cUrl redirect dupa ce sursa e downloadata complet
Moderatori: Moderatori, Start Moderator
Re: cUrl redirect dupa ce sursa e downloadata complet
Cursuri gratuite: | | | |
Re: cUrl redirect dupa ce sursa e downloadata complet
Cursuri gratuite: | | | |
-
nevvermind
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: cUrl redirect dupa ce sursa e downloadata complet
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/
Re: cUrl redirect dupa ce sursa e downloadata complet
@nevermind, vreau sa monitorizez niste preturi. Fyi, daca vrei sa copiezi content, sa stii ca google detecteaza continutul duplicat si te penalizeaza.
-
nevvermind
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: cUrl redirect dupa ce sursa e downloadata complet
Nu ma refeream la continut in sensul ala, ci la ORICE de pe site, fie ca-i o pagina intreaga, fie ca-i doar un span.
Cand faci curl-uri din alea, le incarci lor serverele, omu. Daca vei face nush ce gafa in codul tau PHP si curl-ul o sa faca loop infinit catre acel site, ia ghici. Asta-i DDoS involuntar. Si mi-e sa nu-ti bata la usa dup-aia.
De asta, deseori, e-o treaba cam ilegitima crawling-ul. Cel putin imorala, ya with me?
Tu tre sa iei informatiile alea
a) ori cu acordul lor, avand requesturi limitate pe o perioada de timp
b) ori prin API expus de ei
Oricum, n-ai raspuns de ce ti se incarca memoria cu o simpla iteratie.
Cand faci curl-uri din alea, le incarci lor serverele, omu. Daca vei face nush ce gafa in codul tau PHP si curl-ul o sa faca loop infinit catre acel site, ia ghici. Asta-i DDoS involuntar. Si mi-e sa nu-ti bata la usa dup-aia.
De asta, deseori, e-o treaba cam ilegitima crawling-ul. Cel putin imorala, ya with me?
Tu tre sa iei informatiile alea
a) ori cu acordul lor, avand requesturi limitate pe o perioada de timp
b) ori prin API expus de ei
Oricum, n-ai raspuns de ce ti se incarca memoria cu o simpla iteratie.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/
Re: cUrl redirect dupa ce sursa e downloadata complet
Da, voi cauta si apela la API. Oricum scriptul imi trebuie si la preluarea periodica a unor fisiere xml puse la dispozitie de catre un site, sa il pun pe cron in loc sa ruleze prin browser.
Inca mai lucrez, incerc sa combin cele 2 raspunsuri, solutia cu foreach e buna, dar imi trebuie set_time_limit(0) pe server, cea cu header redirect nu cred ca necesita. Multumesc.
Inca mai lucrez, incerc sa combin cele 2 raspunsuri, solutia cu foreach e buna, dar imi trebuie set_time_limit(0) pe server, cea cu header redirect nu cred ca necesita. Multumesc.
-
nevvermind
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: cUrl redirect dupa ce sursa e downloadata complet
Orice script rulat in CLI (cand rulezi cron-ul, de ex.), e 0 oricum: http://php.net/manual/en/info.configura ... ution-time
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/
-
nevvermind
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: cUrl redirect dupa ce sursa e downloadata complet
- asigura-te ca erorile, daca nu sunt afisate, macar bagate in log: http://stackoverflow.com/a/21429652; faptul ca-ti da 500 si nu ai nimic in loguri inseamna ca nu ai setarile bune pt log de erori; verifica-le
- scoate sleep(); nu-ti trebuie. mai si astepti degeaba...
- scoate din iteratie tot ce nu e specific ei; adica pastreaza numai curl_setopt($ch, CURLOPT_URL,$url);, exec() si getinfo()
- tu mereu presupui ca requestul curl nu va avea eroare: $content = curl_exec($ch); if ($content === false) { echo curl_error($ch); }
- tre sa tii cont de faptul ca unele URL sunt redirectari, pe care curl-ul le poate urma. altfel, vei primi coduri response ca 301 si 302, care sunt valide, dar tie or sa-ti scape: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- codul ala nush unde face "memory leak"; nu stiu ce anume iti incarca memoria; afla macar daca se intampla asta, punand la sfarsitul iteratiei echo memory_get_peak_usage(false);
Sau intra pe chat, poate-i cineva acolo sa te ajute. Intru si eu.
- scoate sleep(); nu-ti trebuie. mai si astepti degeaba...
- scoate din iteratie tot ce nu e specific ei; adica pastreaza numai curl_setopt($ch, CURLOPT_URL,$url);, exec() si getinfo()
- tu mereu presupui ca requestul curl nu va avea eroare: $content = curl_exec($ch); if ($content === false) { echo curl_error($ch); }
- tre sa tii cont de faptul ca unele URL sunt redirectari, pe care curl-ul le poate urma. altfel, vei primi coduri response ca 301 si 302, care sunt valide, dar tie or sa-ti scape: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- codul ala nush unde face "memory leak"; nu stiu ce anume iti incarca memoria; afla macar daca se intampla asta, punand la sfarsitul iteratiei echo memory_get_peak_usage(false);
Sau intra pe chat, poate-i cineva acolo sa te ajute. Intru si eu.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/
Re: cUrl redirect dupa ce sursa e downloadata complet
- sleep() trebuie, ca sa nu suprasolicit serverul unde fac request sa sa fiu banat de firewall.
- am pus memory_get_peak_usage, nu stiam de functie, imi arata circa 1mb pentru fiecare loop, la final la fel, deci cred ca e ok.
Am observat urmatoarele:
- cand rulez scriptul in browser si apas Stop in browser, de fapt scriptul continua sa mearga in background si se updateaza db. Ca sa il opresc ar trebui de fapt sa ii pun un exit() sau die() in script.
- cand imi apare in browser "500 Server Internal Error", pe la 10% dupa ce a rulat, de fapt scriptul continua sa mearga in background si se updateaza db, deci scriptul de fapt merge pana la capat. Am cautat in logurile Apache si imi apare o eroare 404 (imi arata semnul - in loc de vreun url), dar nu stiu de ce pt ca toate url-urile sunt valide.
- daca e 404 am pus comanda continue (am inteles ca sare loopul respectiv din foreach, desi mai intuitive era sa se cheme skip)
Acum l-am pus pe cron, ar trebui ca outputul sa imi vina pe mail dupa ce se termina de rulat.
- am pus memory_get_peak_usage, nu stiam de functie, imi arata circa 1mb pentru fiecare loop, la final la fel, deci cred ca e ok.
Am observat urmatoarele:
- cand rulez scriptul in browser si apas Stop in browser, de fapt scriptul continua sa mearga in background si se updateaza db. Ca sa il opresc ar trebui de fapt sa ii pun un exit() sau die() in script.
- cand imi apare in browser "500 Server Internal Error", pe la 10% dupa ce a rulat, de fapt scriptul continua sa mearga in background si se updateaza db, deci scriptul de fapt merge pana la capat. Am cautat in logurile Apache si imi apare o eroare 404 (imi arata semnul - in loc de vreun url), dar nu stiu de ce pt ca toate url-urile sunt valide.
- daca e 404 am pus comanda continue (am inteles ca sare loopul respectiv din foreach, desi mai intuitive era sa se cheme skip)
Acum l-am pus pe cron, ar trebui ca outputul sa imi vina pe mail dupa ce se termina de rulat.
-
nevvermind
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Re: cUrl redirect dupa ce sursa e downloadata complet
Ai timeout la server, in Apache. Ii atingi limita serverului, nu PHP-ului, si trimite un raspuns, indiferent daca a terminat sau nu php-ul. Tre sa folosesti un fel de batch processing cu ajax sa eviti asta.
Dar asta necesita putina organizare din partea-ti.
Dar asta necesita putina organizare din partea-ti.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 20 vizitatori