Ограничение размера PHP json_encode? - PullRequest
11 голосов
/ 01 июня 2011

Я использую прокси PHP для получения содержимого файла.Я хочу искать в этом файле, используя мощные опции jQuery, без необходимости писать все виды запросов на PHP.Вот мой PHP-код:

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

Если загруженная страница становится слишком большой, PHP прочитает весь документ, но json_encoding даст только первую часть файла, а не весь файл.Я не могу найти что-либо об ограничении размера передаваемых данных через json, но, видимо, есть один.

вопрос: существует ли обходной путь, предотвращающий передачу только части файла?

Мне нужно захватывать файлы из других доменов, поэтому чтение содержимого файла в jQuery на самом деле не вариант.

Ответы [ 2 ]

15 голосов
/ 13 марта 2017

Чтобы помочь другим, которые могут столкнуться с проблемами, которые они не могут объяснить с помощью 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

12 голосов
/ 01 июня 2011

PHP 5.3: ext / json / json.c
PHP 7 (текущий): ext / json / json.c

Нетвстроенное ограничение на размер сериализованных данных JSON.Во всяком случае, не для струнных.Поэтому я предполагаю, что вы столкнулись с ограничением памяти PHP или чем-то подобным.

json_encode последовательное добавление строки просто добавляет некоторые экранирующие и внешние двойные кавычки.Внутренне это означает удвоение памяти (временная конкатенация строк и преобразование / проверка utf8_to_utf16), так что я столкнулся с пределом 32-мегабайтной памяти php со строкой 8 мегабайт.Но, кроме этого, в json.c

кажется, что нет никаких произвольных ограничений
...