Andrej Falaleev Гость
|
Добавлено: Вс Июн 01 2003 10:53 Заголовок сообщения: PHP: Загрузка файла через STDOUT |
|
|
Нужно отдавать файл через скрипт, при этом контролируя, был ли закачен файл полностью или загрузка оборвалась где-то посередине. Если файл был загружен - записываем это событие в журнал. Как мне объяснили, с полной вероятностью узнать результат процесса нельзя, но наиболее лучший способ - отдавать файл кусками через поток вывода.
Итак, что делаю: define('AccessError', "Ошибка при доступе к файлу."); //$file - путь к файлу, который закачивается $download = fopen($file, "rb"); if (!$download) die(AccessError);
//открываю stdout $stdout = fopen("php://stdout", "wb"); if (!$stdout) { fclose($download); die(AccessError); }
//отключаю буферизацию stream_set_write_buffer($stdout, 0); define('ChunkSize', 1024);
//читаю файл кусками и отправляю куски в stdout $goodwrite = true; while ( !feof($download) && $goodwrite ) { $chunk = fread($download, ChunkSize); $goodwrite = fwrite($stdout, $chunk); } fclose($stdout); fclose($download);
//повер яю, не было ли ошибки в процессе записи - если была, то выход из скрипта и ничего в логи не запишется if (!$goodwrite) die;
//запись в логи
Ход мыслей вроде правильный. Но на строчке $goodwrite = fwrite($stdout, $chunk); получаю ошибку от апача "500 Internal Server Error". Может в настройках что-то не указано? Или в самом скрипте что-то неправильно? |
|