Я не понимаю проблемы в моем коде, я полагаю, что это связано с 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
Это может быть причиной, из 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>';
}
}
?>
Других решений пока нет …