2011-05-31 386 views
10

我正在使用PHP代理來獲取文件的內容。我想使用強大的jQuery選項來搜索該文件,而不必在PHP中編寫所有類型的查詢。這是我的PHP代碼:PHP json_encode大小限制?

$page = file_get_contents(filter_var($_POST[url], FILTER_SANITIZE_URL)); 
die(json_encode($page)); 

如果加載的頁面變得太大PHP會閱讀整個文檔,但json_encoding它只會給該文件的第一部分,而不是整個文件。我無法找到關於json傳遞數據的大小限制的任何內容,但顯然有一個。

問題:是否有一種解決方法來防止文件的一部分被傳輸?

我需要從其他域中獲取文件,因此在jQuery中讀取文件的內容並不是一個真正的選項。

+0

文檔的問題是不明確的。 'json_encode'可能轉換的數據大小僅受可用內存限制。 – zerkms 2011-05-31 22:47:53

+0

您能否給我們提供創建併發送給瀏覽器的JSON的最新跡象? – Tadeck 2011-05-31 22:48:38

+0

你確定你不只是達到時間限制(默認30秒)嗎?嘗試'set_time_limit(0)'。 – Halcyon 2011-05-31 22:48:51

回答

7

幫助其他人可能遇到無法用json_encode解釋的問題。我發現它有助於瞭解json錯誤信息功能。

json_last_error_msg(); 

我有類似的問題,但它與文件大小無關。我在數據庫中格式化了utf-8。您可以檢查您的JSON這樣

$json = json_encode($data); 

if ($json) 
    echo $json; 
else 
    echo json_last_error_msg(); 

PHP這裏json_last_error_msg

10

PHP 5.3:ext/json/json.c
PHP 7(電流):ext/json/json.c

沒有內置的限制的JSON串行化數據的大小。無論如何不適用於字符串。因此,我會假設你已經遇到PHP內存限制或什麼的。

json_encode一致的字符串只是增加了一些轉義和外部雙引號。在內部,這意味着內存翻倍(臨時字符串連接和utf8_to_utf16轉換/檢查),以便我已經用8MB字符串運行我的32MB php內存限制。但除此之外,似乎沒有任何限制json.c

+2

大小是方式小於8Mb。我'固定'它(這只是一個解決方法),不要將東西導入爲JSON。這不是PHP的內存限制,否則我不能通過繞過JSON來修復問題 – patrick 2011-06-16 23:06:30

+0

@patrick值得一提的是你如何「修復」它和你的(解決方法)以幫助其他人在未來訪問這裏。 – fidev 2016-05-27 14:04:11

+0

就像我上面說的:我通過不編碼來修復 – patrick 2016-05-28 20:45:33