php flush () иногда не работает, перезагрузка страницы работает

Я не понимаю проблемы в моем коде, я полагаю, что это связано с flush()
Иногда это работает, иногда нет, но если я перезагрузить страницу,
(затем нажмите «продолжить» во всплывающем окне подтверждения формы), это работает!

Вот мой код:

Class.php:

private function myFunUpdate($aaa, $bbb, $ccc, $ddd, $eee){
$httpCode = curl_getinfo($aaa, CURLINFO_HTTP_CODE);
if ($httpCode == "200"){
$percent = @round($ccc/$bbb, 2) * 100;
if ($percent > $this->_percentDownloaded){
$this->_percentDownloaded++;
echo '<script>myFunUpdate("'. $percent .'");</script>';
ob_end_flush();
ob_flush();
flush();
}
}
}

Index.php:

<?php
if ($_POST['submit']){
echo '<div><img src="http://example.com/img'.$alpha->stuff1(trim($_POST['myURL'])).'.jpg" /></div>';
echo '<div>'.$alpha->stuff2(trim($_POST['myURL']), 'url').'</div>';
echo '<div id="progressBar">0%</div>';
flush();

if ($alpha->stuff3(trim($_POST['myURL']))){
echo '<div id="divSuccess"></div>';
echo '<script>var progressBar = document.getElementById("progressBar"); progressBar.style.width = progressBar.innerHTML = "0%"; updateProgress("'.trim(strstr($alpha->myFun(), '/'), '/').'");</script>';
flush();
$alpha->stuff4($_POST['param1']);
}else{
echo '<p>Error, something was wrong...</p>';
}
}
?>

И в файле журнала php я нахожу это (ссылаясь на Class.php линии):

PHP Notice:  ob_end_flush(): failed to delete and flush buffer. No buffer to delete or flush in xxx.php on line xxx

PHP Notice:  ob_flush(): failed to flush buffer. No buffer to flush in xxx.php on line xxx

2

Решение

Это может быть причиной, из php.net

Если вы вызываете ob_flush () и flush () и по-прежнему не получаете буфер
может быть, потому что некоторые антивирусные программы (в этом Panda
case) удерживает буфер до полной загрузки страницы
отправив его в браузер.

Также кажется важным включить заголовок в начале вашего php-кода:

header( 'Content-type: text/html; charset=utf-8' );

Хорошо, с вашим кодом я бы попробовал:

private function myFunUpdate($aaa, $bbb, $ccc, $ddd, $eee){
$httpCode = curl_getinfo($aaa, CURLINFO_HTTP_CODE);
if ($httpCode == "200"){
$percent = @round($ccc/$bbb, 2) * 100;
if ($percent > $this->_percentDownloaded){
$this->_percentDownloaded++;

// start output buffering
if (ob_get_length() === false) {
ob_start();
}
echo '<script>myFunUpdate("'. $percent .'");</script>';

while (ob_get_level()) {
ob_end_flush();
}
}
} }

а также

<?php
header( 'Content-type: text/html; charset=utf-8' );
// start output buffering
if (ob_get_length() === false) {
ob_start();
}
if ($_POST['submit']){
echo '<div><img src="http://example.com/img'.$alpha->stuff1(trim($_POST['myURL'])).'.jpg" /></div>';
echo '<div>'.$alpha->stuff2(trim($_POST['myURL']), 'url').'</div>';
echo '<div id="progressBar">0%</div>';

while (ob_get_level()) {
ob_end_flush();
}

if ($alpha->stuff3(trim($_POST['myURL']))){
// start output buffering
if (ob_get_length() === false) {
ob_start();
}
echo '<div id="divSuccess"></div>';
echo '<script>var progressBar = document.getElementById("progressBar"); progressBar.style.width = progressBar.innerHTML = "0%"; updateProgress("'.trim(strstr($alpha->myFun(), '/'), '/').'");</script>';
while (ob_get_level()) {
ob_end_flush();
}
$alpha->stuff4($_POST['param1']);
}else{
echo '<p>Error, something was wrong...</p>';
}
}
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]