По какой-то причине наш веб-сервер не отвечает, пока он обслуживает большие файлы. Мы используем платформу Windows, потому что нам нужно удаленно обращаться к приложениям Win32, чтобы сгенерировать файл, который должен обслуживаться. Этот файл подается через функцию РНР: fpassthru, используя этот код:Веб-страницы, которые не обслуживаются при больших передачах файлов (IIS7.5 + PHP)
if (file_exists($file)) {
$handle = @fopen($file, "rb");
header('Content-Description: File Transfer');
header('Content-Type: video/mp4');
if($stream==0){
header('Content-Disposition: attachment; filename='.basename($filename.".mp4"));
}
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_end_clean();
fpassthru($handle);
exit;
}
Эти файлы часто более 1 ГБ и занимает некоторое время, чтобы передать, но в течение этого времени, веб-сервер не будет обслуживать ни одной страницы. Мой firefox указывает, что это «соединение», но больше ничего. Обратите внимание, что кто-то еще передает этот файл, а не меня, так что разные IP-адреса, разные сеансы.
Любой ключ, где искать? Очевидно, невыносимо ждать 5 минут для веб-сайта. Спасибо заранее!
Это, казалось бы, указывает на проблему с резьбой. Возможно, проблема с вашей конфигурацией PHP в IIS. Дополнительные потоки должны обрабатывать другие запросы во время загрузки. Вам нужно передать загрузку через php? – datasage