Недавно я перешел с Amazon Elastic Beanstalk на свой собственный сервер Ubuntu 14.04 lts. Все портировано плавно, за исключением одной страницы, которая использует ob_flush
и продолжает обрабатывать. Вот этот блок кода:
<?php
//put string of page ----> $string
ob_end_clean();
header("Connection: close");
ignore_user_abort(true); // optional
ob_start();
echo ($string);
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
session_write_close(); // Added a line suggested in the comment
// Do processing here
sleep(10);
//do stuff
echo "something";
Я ожидаю, что содержимое строки $ print будет напечатано, вместо этого будет отображаться содержимое строки $ string, а затем "что-то". В этом фрагменте "что-то" будет печатать. Я отключил mod_pagespeed (который в настоящее время включен), и убедитесь, что gzip и выход буфера отключены.
Вот мой файл php.ini
(у меня его вне сайта, потому что он не имеет ограничений и не имеет отношения к вопросу). У меня также есть подозрение, что это может иметь отношение к моему конфигурационному файлу apache, который вы можете увидеть здесь. Наконец, если это имеет какое-то отношение к моей проблеме, вот ссылка на мою конфигурацию в формате pagepeed. Когда я вызываю функцию, в журнале ошибок нет ошибок, кроме того, у меня есть root-доступ к серверу. Спасибо, что помогли мне исправить эту проблему!
Джейк Сильвестр
Я думаю, что вы путаете ob_get_contents и ob_end_flush: http://php.net/manual/en/function.ob-start.php.