cURL in Internal (500)
 
HeXeR 13. maj 2008 12:05:44 Pridružen od:
13. dec 2006
3268 objav
122 22 5
#1

Ž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 ?


všeč(0) ni všeč(0) spam(0)
First rule of business, protect your investment.
 
twarlock 13. maj 2008 12:05:52 Pridružen od:
17. okt 2006
160 objav
0 0 0
#2
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);


všeč(0) ni všeč(0) spam(0)
 
HeXeR 13. maj 2008 12:05:55 Pridružen od:
13. dec 2006
3268 objav
122 22 5
#3

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 ...


všeč(0) ni všeč(0) spam(0)
First rule of business, protect your investment.
 
twarlock 13. maj 2008 13:05:05 Pridružen od:
17. okt 2006
160 objav
0 0 0
#4

misleš paralelno?


všeč(0) ni všeč(0) spam(0)
 
HeXeR 13. maj 2008 13:05:05 Pridružen od:
13. dec 2006
3268 objav
122 22 5
#5

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 :) .


všeč(0) ni všeč(0) spam(0)
First rule of business, protect your investment.
 
HeXeR 13. maj 2008 13:05:08 Pridružen od:
13. dec 2006
3268 objav
122 22 5
#6

misleš paralelno?




Po vrsti ...



url1

url2

... doker ni vse, kar mu dam v tisti rundi ...



timeout je bil kriv :) . Jao :) .


všeč(0) ni všeč(0) spam(0)
First rule of business, protect your investment.
 
twarlock 13. maj 2008 13:05:13 Pridružen od:
17. okt 2006
160 objav
0 0 0
#7

ajaaaaaa skripta, bi pa tko povedu ^^


všeč(0) ni všeč(0) spam(0)
 
HeXeR 13. maj 2008 13:05:18 Pridružen od:
13. dec 2006
3268 objav
122 22 5
#8

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 ...


všeč(0) ni všeč(0) spam(0)
First rule of business, protect your investment.
 
twarlock 13. maj 2008 13:05:35 Pridružen od:
17. okt 2006
160 objav
0 0 0
#9

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.


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se