Zero Size Reply by Squid или как симулировать нормальную работу скрипта

SlyFox

Guest
Zero Size Reply by Squid или как симулировать нормальную работу скрипта

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

ignore_user_abort();
set_time_limit(3600);

не помогло... т.е. помогло только тем, что при закрытии браузера пользователем скрипт продолжает работать, но все равно таймаут делает свое дело :)
Как можно симулировать нормальную работу скрипта. Копирование файла через copy($url, $fil); сейчас :( Пробовал вариант такой:

$fp = fopen ($fil, "w");
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_FILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);

Тоже что-то не очень понятно как заставить сквида не возвращать zero size reply :(
Помогите, пожалуйста!
 

SlyFox

Guest
chisto_tolyan
Ага, хороший вариант, только до сервера я не достаю - мал еще :) Хостинг хоть и платный... но хостинг...
 

HeavyNatas

Новичок
и что, на платном хостинге нету cpanel или directadmin ?
на крайняк стучи хостеру, проси ssh или пусть сам скрипт на крон ставит.
 

SlyFox

Guest
HeavyNatas
Да можно, наверное, только за cron отдельно платить надо, как за арендованое приложение...

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

$flen = GetFilLen($url);
$bd = 0;
$ed = 0;
print("Starting download from ".$url." to ".$fil."<br>");
print("Remote file size = ".$flen."<br>");
while ($ed<$flen)
{
$bd = $bd;
$ed = $bd+100000;
if ($ed>=$flen)
{
$ed = $flen;
}
$fp = fopen ($fil, "a");
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_FILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RANGE, $bd-$ed);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
print($bd." > ".$ed." bites received<br>");
$bd = $ed;
flush();
}
print("Download complete!");

Только не надо про ДНК :) это я и сам знаю =)

-~{}~ 18.08.05 18:28:

Действительно, я затупил. Надо было:
...
curl_setopt ($ch, CURLOPT_RANGE, $bd."-".$ed);
...
$bd = $ed+1;
...
и все заработало...

-~{}~ 18.08.05 18:58:

... и все-таки интересно - ПОЧЕМУ скрипт ничего не выводит при выполнении этого цикла??? :crazy: Как это победить?
 
Сверху