cURL in Internal (500)
2 naročnika
2 naročnika
Že 2 dni se ubadam s cURLom, recimo parsam eno stran pa je vse lepo in ok. Včasih pa morem parsati če nekaj podstrani, takrat se začnejo problemi ...
recimo, zahtevam:
http://www.internetmojster.com/index.php
ok, dela super, dobim vse ... potem pa zahtevam ...
http://www.internetmojster.com/index.php
http://www.internetmojster.com/forumdisplay.php?f=20
http://www.internetmojster.com/forumdisplay.php?f=28
http://www.internetmojster.com/forumdisplay.php?f=27
http://www.internetmojster.com/forumdisplay.php?f=30
http://www.internetmojster.com/forumdisplay.php?f=29
... itd.
običajno lahko zahtevam cca. 10 URLjev preden dobim Internal Server Error (500). Sedaj pa me zanima zakaj se to dogaja, Google ni vrgel nič pametnega ...
Nisem zadel memory limita, tudi execution time je dovolj velik, tisti čas ko je omejitev, koliko lahko traja input, timeouti v apachejevem logu ... v error logu pa je samo tole ...
[Mon May 13 **:**:01 2008] [warn] mod_fcgid: process 32002 graceful shutdown timeouted, sending SIGKILL
timeouted ? Samo kje ? :o:mad: Po googlanju sem našel samo en page kjer je nekdo na freebsd nevem kaj čaral, pocal pa po svoje konpajlal da mu je delalo ... samo če gre za time out bi se moralo dati vse nastaviti s confi a ne ?
8 odgovorov
function fetchurl($url, $timeout = 0, $agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if($timeout !== 0) curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;
}
če pač želiš timeout kličeš z recimo:
$data = fetchurl('http://google.com',10);
Sej imam tole ...
curl_setopt($curl_tmp, CURLOPT_CONNECTTIMEOUT, 3);
s tem da nabijem nek drug timeout zato se skripta prekine ...
cURL mi lepo dela, edino ko hočem več URLjev pobirat ... dobim errore (500), če samo 1 URL recimo, potem lepo dela ...
Celotna skripta se izvaja 20 sec, pol pa dobim Internal Server Error, če se zakluči pred 20 sec ne dobim errorja, drugače pa ja ...
phpinfo();
maxexecutiontime 200 200
no ja ... med pisanjem posta ... Timeout 20 v apacejevem confu ...
čisto sem pozabil na tole ... že dela :) .
misleš paralelno?
Po vrsti ...
url1
url2
... doker ni vse, kar mu dam v tisti rundi ...
timeout je bil kriv :) . Jao :) .
Eh p*+do, še vedno, prej je odprlo ... ampak zato ker je stran prej dobil, če je slaba odzivnost strani ki jih parsam pa je curlanje in izvedba cele skripte traja več kot 20 sec. gotovo ... Internal ...
pa sploh več nikjer v confu nimam 20 ... :confused:
Pa ja .. skripta mislim ...
jah če bi vidu tvojo skripto bi ti vedu povedat...
jast nardim ponavad neki v stilu:
(sam mam navadno v mysql urlje...)
$urls = array('url1','url2',...);
$next = isset($_GET['next']) ? intval($next) : 0;
$data = fetchurl($urls[$next]);
// parse
$next++;
if($next > count($urls)) die("Done!");
header("Location: file.php?next=$next");
lah na dnu uporabišt tut echo meta refresh, če kej izpisuješ preden pride do dna.