я заметил, что приложение я разрабатывал разрывалось, мне удалось сократить его до этой проблемы (я настроил тестовый пример для него):PHP: Длинные строки, json_encode, var_dump и эхо
ini_set("display_errors", "1");
error_reporting(E_ALL);
error_log("[test] Memory limit: " . ini_get('memory_limit'));
error_log("[test] Max Execution Time: " . ini_get('max_execution_time'));
$testArray = array("abcdefghijklmnotuv..... 786998 characters later...ijklmEND");
$json = json_encode($testArray);
var_dump($json);
// echo($json);
error_log("[test] Memory: ".memory_get_usage()."B");
Когда я var_dump переменного $ JSON, я получаю правильный вывод:
string(786998) "["abcdefghijklm....ijklmEND"]"
Когда я эхо переменного $ JSON, вы можете очень кратко увидеть что-то появиться на экране, но затем он исчезает, конец ответ кажется должен быть NULL.
Если я повторяю выше со строкой вместо массива, то происходит то же самое.
Если я повторяю выше строку и опускаю шаг json_encode, все ведет себя так, как ожидалось, результаты var_dump и echo верны.
В течение всего процесса нет ошибок вывода в журнал ошибок, мои пределы памяти и не более времени выполнения также хорошо:
[test] Memory limit: 256M
[test] Max Execution Time: 30
[test] Memory: 2134296B
Любые идеи?
Немного информации о моем приложении:
В двух словах есть два сервера. Сервер A отправляет HTTP-запрос на сервер B, сервер B обрабатывает запрос и отправляет ответ обратно серверу A. Ответ всегда является кодированным JSON-массивом. Если одно из значений массива в ответе слишком длинное, сервер A получает ответ NULL.
Вы уверены, что это не ваш браузер, который сломан из-за огромного дампа? – Uby
Я так не думаю, если я могу успешно выполнить echo/var_dump строку, которая так же длинна, успешно var_dump массив, почему бы мне не удастся также эхо-массива? Что касается ограничений браузера. – Jeremy
проверить внешний источник браузера (не через firebug и т. Д.), Вы, вероятно, увидите код там –