Intereting Posts
mySqli … внутреннее соединение? Способ избежать использования псевдонима Apache для включения HTML-ресурсов, таких как CSS заполнить 'select list' из каталога на моем сервере, используя php и html ServiceLocator, давайте подумаем об этом в контексте ZF2 Mysql PHP Cron для обновления статистики пользователя Почему так плохо запускать PHP-скрипт? получить всю запись в списке воспроизведения Youtube API V3 с помощью pageToken Ошибка возврата SoapClient в PHP Требуется очистить буфер в Node.js? Если да, то как? Если нет, то в чем проблема? Найден PHP-функция для абсолютного пути и любопытно, как это работает Необходимо проверить, что веб-сайт содержит сертификат ssl или нет, если да, то какова дата истечения срока действия сертификата с использованием php-скриптов Как получить значения флажков в группе с PHP? Ошибка 502 в nginx + php5-fpm Функция PHP – игнорировать некоторые параметры по умолчанию Почему мой сортировка usort () не сортируется?

PHP Connection_Aborted () работает только иногда

У меня есть файл для загрузки PHP-скрипта. Сценарий может загружать большие файлы до 4 ГБ +. В действительности часто случается, что пользователи будут отменять процесс загрузки или закрыть окно браузера во время загрузки.

Поэтому я должен зарегистрироваться, когда уже начатый процесс загрузки будет по какой-либо причине прерван. Оптимальным решением для этого является контроль соединения через функцию connection_aborted () .

'connection_aborted ()', похоже, реагирует на отмену загрузки или закрытие окна моего браузера. Моя проблема заключается в том, что она не реагирует со 100% точностью. Он регистрирует около 50% отмененных загрузок или закрытых браузеров. Если прерывание соединения не обнаружено, загрузка просто продолжается на сервере, как если бы браузер не отменил его.

Не могли бы вы просмотреть мой код для уязвимостей и ошибок? Мне нужно понять, что вызывает поведение:

// empty and turn off output buffering ob_flush(); flush(); // never expire this download script set_time_limit(0); fseek($fileObject, $seek_start); while(!feof($fileObject)) { //usleep(100000); //print(@fread($fileObject, $chunkSize)); echo(@fread($fileObject, $chunkSize)); // gradually output buffer to avoid memory problems by downloading large files ob_flush(); flush(); // check if the client was disconnected // important for cancelled or interrupted downloads if (Connection_Aborted()) { ChromePhp::log("Connection Aborted"); // sent to the database that the connection has been aborted $result = mysqli_query($dbc, "UPDATE current_downloads SET connection_aborted=TRUE WHERE user_id=1;"); // close the database connection mysqli_close($dbc); // close the open file @fclose($fileObject); exit(json_encode(array("result" => false, "error" => "Connection with the client was aborted."))); } $nLoopCounter++; $transferred += $chunkSize; $downloadPercentage = (($nLoopCounter * $chunkSize) / $fileSize) * 100; $result = mysqli_query($dbc, "UPDATE current_downloads SET progress_percent=$downloadPercentage, transferred=$transferred, connection_aborted=$strConnectionAborted, iteration=$nLoopCounter WHERE user_id=1;"); if($result == false) { // close the database connection mysqli_close($dbc); // close the file fclose($handle); // prepare output message $outputArray = array("result" => 0, "message" => "Error Processing Database Query"); // output the message echo json_encode($outputArray); exit; } } // file save was a success @fclose($fileObject); 

Я использую следующее:

  • Apache 2.4.4
  • PHP 5.4.12
  • MySQL 5.6.12
  • Google Chrome Версия 32.0.1700.107 м
  • Windows 7 x64

Спасибо.

Добавьте функцию connection_status , а затем повторите попытку

 if(connection_status()!=0||connection_aborted()!=0||){ //your code }