Download файла и browser timeout

zyablik

Новичок
Download файла и browser timeout

Как лучше реализовать скачивание файла с одного сервера на другой?

дано:
- скрипт выполняет набор шагов, на одном из шагов необходимо скачать архив, на шаге скачивания браузер в таймаут вываливается(НЕ СКРИПТОВЫЙ).
- файл может быть размером для примера 10 мб
- pcntl_* не предлагать, надо чтобы везде работало

например, шаг скачивания:
$importFile = file_get_contents($archiveURL);
if($importFile)
{
$fp = fopen($uploadfile,"w");
fwrite($fp,$importFile);
fclose($fp);
echo 'done';
}

отрабатывает, и скачивает архив нормально, но браузер уже вывалился в таймаут

понятно что бразуеру надо выдавать контент какой-нибуть чтобы продлить время жизни.
 

GodFrey

Новичок
Браузер не будет скидывать при таймауте, если послать хидер
Conection: Keep-alive

вроде...
 

kruglov

Новичок
А зачем вы файл сначала качаете в переменную (сколько у вас, кстати, памяти на сервере? а DOS-а не боитесь?)?

Параллельно качайте и отдавайте.
 

zyablik

Новичок
мне необходимо получить архив на сервер, для дальнейшей распаковки его.

пробовал читая сразу записывать файл на диск, но конструкция типа

while(!feof($file))
{
fwrite($fp, fread($handle, 8192));
}

выполняется в бесконечном цикле...
 

kruglov

Новичок
Тогда пишите в браузер по одному пробелу на каждый мегабайт скачанного файла, чтоб браузер не думал, что его покинули.

выполняется в бесконечном цикле
Это чудо какое-то, должно нормально работать.
 

splashx

Новичок
Если задача для клиентской части - то надо вешать это на ajax и показывать индикатор (упаси господи от таких клиентских задач).

Если задача системная, то выполнять в консоли.
 

zyablik

Новичок
demon_goo, примет - идея того как работает. тоесть ошибки в приведенном куске искать не нужно.

kruglov
возможно какой то баг с определением конца файла.
я видет гдето тут решение, наподобие поиска\n\r\n\r\n\r или чтото такое
 

kruglov

Новичок
Попробуйте делать через fsockopen, через curl... Вообще, и через fopen работать должно, причем именно через feof. Искать \n\r неправильно.
 

zyablik

Новичок
проблемма в том что таймаут в браузере срабатывает. сам код отрабатывает, но браузер не успевает получить ответ, и вываливается.
 

dimagolov

Новичок
проблемма в том что таймаут в браузере срабатывает. сам код отрабатывает, но браузер не успевает получить ответ, и вываливается.
откуда такая уверенность? с каким кодом завершается скрипт?
 
Сверху