2012-01-30 2 views
3

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

//apache_setenv('no-gzip', 1); // returns error that apache_setenv does not exist 
//ini_set('zlib.output_compression',0); 
//ini_set('implicit_flush',1); 
//ob_end_clean(); 
//for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
//ob_implicit_flush(1); 
set_time_limit(0); 
echo "<pre>"; 
for ($i = 0; $i < 100; ++$i) { 
    echo $i.' '.time().str_repeat(' ',256)."\n"; 
    //ob_flush(); // returns error without output buffering enabled 
    flush(); 
    usleep(100000); 
} 

Это не кажется, что бы я ни делал, я всегда получаю результаты все вместе в один гигантский кусок. Вот скриншот из всех различных настроек я набор из WAMP: from left to right: php extension, php setting, apache modules

Edit: Я загрузил точно такой же код на сервер, работающий на CPanel/Linux, и он отлично работает во всех браузерах. Почему я не могу заставить его работать на локальном сервере WAMP?

+0

Это вопрос я буду иметь, чтобы взять разработчиков WAMP. Я только что установил XAMPP, и все работает так, как ожидалось. – Shea

+0

Я понятия не имею, что это было, это самая странная вещь, но я переустановил WAMP, и теперь все отлично работает. Все настройки и модули одинаковы, это, должно быть, ошибка в WAMP. Я совершенно озадачен этим. Я знаю, что я не сумасшедший, и я все делаю правильно. – Shea

+0

У меня такая же проблема. Какую версию WAMP вы используете? –

ответ

3

Возможно, флеш() не может переопределить схему буферизации вашего веб-сервера и не влияет на любую клиентскую буферизацию в браузере. Он также не влияет на механизм буферизации вывода пользовательского пространства PHP. Это означает, что вам придется вызывать оба ob_flush() и flush(), чтобы очистить выходные выходные буферы, если вы их используете.

Несколько серверов, особенно на Win32, все равно будут буферизовать вывод из вашего скрипта до тех пор, пока он не завершится до передачи результатов в браузер.

Серверные модули для Apache, такие как mod_gzip, могут выполнять собственную буферизацию, что приведет к тому, что flush() не приведет к немедленному отправке данных клиенту.

Даже браузер может буферировать его ввод перед его отображением. Например, Netscape загружает текст до тех пор, пока не получит конец строки или начало тега, и он не будет отображать таблицы до тех пор, пока не будет замечен тег самой внешней таблицы.

Некоторые версии Microsoft Internet Explorer начнут отображать страницу только после того, как они получили 256 байтов вывода, поэтому вам может потребоваться отправить лишние пробелы перед тем, как очистить, чтобы эти браузеры отображали страницу.

  • php.net
+0

Я не совсем понимаю это. У меня даже есть 'str_repeat ('', 256)', чтобы попытаться обойти эту проблему с 256 байтами. Я пробовал один и тот же код в Firefox 9, Chrome 16 и IE 9. Означает ли это, что флеш просто не будет работать во всех современных браузерах? Должна быть какая-либо ошибка сервера. – Shea

+0

возможно, когда вы выполняете функцию usleep(), за это время буфер заполняется/освобождается. – Grigor

0

Попробуйте использовать ob_flush() перед сбросом();

+0

Я даже пробовал это, и без буферизации вывода я получаю сообщение об ошибке, что буфер не выводится. С буферизацией вывода я все еще получаю все в одном большом куске. – Shea

+0

@ob_flush; // предотвращает предупреждение выхода – zzapper