Я разработал платформу контента для веб-приложений, которая позволяет пользователям искать и загружать (большие) видеофайлы. Они также могут смотреть файл прямо в браузере. Для управления доступом я не буду указывать их напрямую на файлы mp4 / webm, а вместо этого использую скрипт PHP для обработки этого. Мой код в основном основан на примере, найденном на http://www.media-division.com/php-download-script-with-resume-option/
Snippet:
set_time_limit(0);
fseek($file, $seek_start);
while(!feof($file))
{
print(@fread($file, 1024*8));
ob_flush();
flush();
if (connection_status()!=0)
{
@fclose($file);
exit;
}
}
Он в основном устанавливает время выполнения неограниченное (большие файлы), последовательно читает файл и передает его клиенту. Мой вопрос: сценарий прерывается, когда клиент прерывает загрузку? Например, когда есть потоковое видео с использованием видеоплеера HTML5 и прекращается просмотр.
ignore_user_abort отключен по умолчанию, и я не включил это в моей конфигурации. Но функция line connection_status () проверяет, живо ли соединение, и прерывает сценарий, если это не так (я полагаю).
От документация:
PHP не обнаружит, что пользователь прервал соединение, пока
сделана попытка отправить информацию клиенту. Просто используя
Заявление echo не гарантирует отправку информации, см.
промывать().
Так что я бы сказал, как только пользователь прервал, и вы называете это двумя строками:
ob_flush();
flush();
Сценарий будет остановлен. Я не думаю, что эта часть будет выполнена:
if (connection_status()!=0)
{
@fclose($file);
exit;
}
вы проверили? Есть ли причина, почему вы могли бы предположить, что это не так?
Вы можете просто написать файл журнала для подтверждения, если вы не можете видеть текущие процессы (Shared Hosting)
Других решений пока нет …