| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

24-06-2010, 18:50
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
PHP cURL timeout?!
hallo liebe gemeinde 
ich habe ein kleines problem, wofür mir irgendwie die lösung nicht einleuchten mag.
und zwar:
ich setze jeweils in einer schleife so um die 100 http requests ab, der request übergibt den returned transfer an eine variable, die einigen zeichen entfernt und anschliessend mittels sql in eine datenbank geschrieben wird.
es geht dabei darum, ein system zu entwickeln, womit ich lokal von meinem remote server einige daten auslesen kann und sozusagen ein "backup" wichtiger daten zu erhalten.
klar kann man es anders lösen, darum geht es mir aber nicht.
das problem ist nur, dass irgendwie manche requests einfach so untergehen. falls bei einem request was falsch laeuft sollte ja false zurückgegeben werden, wird aber nicht, das ganze geht einfach unter.
habe je eine ausgabe if(request true) print "request nummer x erfolgreich"
sieht dann meisten so aus: erfolgreich-> 1,2,3,4 plötzlich 8, 9,10,11,12,15
ich denke ihr wisst was gemeint ist 
ich habe die manual mal gelesen, allerdings habe ich keine schlüssige antwort.
ich habe als "lösungsversuch" mal probiert, einen sleep einzubauen. nach jedem request wird jetzt 2 sekunden geschlafen.
danke für jede hilfe
|

24-06-2010, 18:58
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von svr
habe je eine ausgabe if(request true) print "request nummer x erfolgreich"
sieht dann meisten so aus: erfolgreich-> 1,2,3,4 plötzlich 8, 9,10,11,12,15
|
Wie auch immer diese eher obskure Abfrage in der Realität aussehen mag - wenn du nur den positiv-Fall behandelst und den Fehlerfall nicht, dann brauchst du dich auch nicht wundern, wenn fehlerhaft verlaufene Requests „einfach so untergehen“.
Wie sieht denn deine Fehlerbehandlung aus, was fragst du ab und wie behandelst du es?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-06-2010, 20:05
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
ich geben voll und ganz zu, dass ich den eintrag hier haette schoener gestalten koennen
das ganze sieht natürlich so aus:
if(curl_request) print "erfolgreich";
if(!curl_request) print "nicht erfogreich"; // php-manual: curl gibt im fehlerfall false zurück
trotzdem wird eben nicht dieses "nicht erfolgreich" ausgegeben, niemals.
|

24-06-2010, 20:10
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von svr
trotzdem wird eben nicht dieses "nicht erfolgreich" ausgegeben, niemals.
|
Vielleicht waren alle Requests „erfolgreich“ (im Sinne von HTTP) - aber die Gegenstelle hat nicht das geliefert, was du erwartet hast. Hast du das überprüft ...?
Du wirst schon mehr Infos - brauchbare Infos - liefern müssen, wenn du Hilfe bei deinem Problem bekommen willst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-06-2010, 20:26
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
hallo,
also als erstes werde ich mal die curls posten
sieht so aus
PHP-Code:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $urlcurrent); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($ch, CURLOPT_COOKIEJAR,'c.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE,'c.txt'); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $string = curl_exec($ch);
if(!$string){ print "false"; remission(); }
als erstes fuehre ich in der schleife jeweils die requests aus, speichere das ganze in $string. danach wird uberprüft, was string zurückgibt, bei false sollte die funktion remission, die das ganze mit derselben url wiederholt, gerufen werden.
im positiven fall wird der string weiterverarbeitet
wie meinst du das mit "im sinne von http"
wenn ein fehler auftritt sollte false zurückgegeben werden, falls alles glatt geht sollt mein stirng daten enthalten, wenigstens irgendwas
ode rnicht?
danke!
Geändert von svr (24-06-2010 um 20:29 Uhr)
|

24-06-2010, 20:45
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von svr
wenn ein fehler auftritt sollte false zurückgegeben werden,
|
Prüfst du auf false? Nein.
Zitat:
|
falls alles glatt geht sollt mein stirng daten enthalten, wenigstens irgendwas ode rnicht?
|
Genau das herauszufinden, riet ich dir bereits.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-06-2010, 21:02
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
Zitat:
Zitat von wahsaga
Prüfst du auf false? Nein.
|
..!$string...
prüft das etwa nicht?
Zitat:
Zitat von wahsaga
Genau das herauszufinden, riet ich dir bereits.
|
falls ein string daten enthält sehe ich es, dnen ich geben curl infos uber datengroesse transferzeit etc aus, plus substring.
auf der kommandozeile natürlich. dann muesste ich doch wenigstens sehen, ob die entsprechende nummer leer ist.
es kommt aber gar kein output!
substring plus das andere zeug habe ich ja nicht zum spass gemacht, es ist also nicht so, dass ich es nicht versucht hätte.
|

24-06-2010, 22:33
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
öhm .-. auch wenn das Amica und die annern hier vielleicht schöner erklären
if (!$String) prüft nicht auf FALSE - , es prüft ob die Variable überhaupt existiert - die funktion antwortet jedoch bei Verbindungsfehler mit FALSE . das dann in der Variablen drinsteht ... sie existiert also
correctamente sollte das wohl eher
Code:
if ($String === FALSE ) {
echo "mecker HTTP-request keine Antwort <br>";
}
else {
....
tu halt was du machen wolltest, wenn die Anfrage erfolgreich war
}
Geändert von eagle275 (24-06-2010 um 22:36 Uhr)
|

24-06-2010, 23:45
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
!$var ergibt immer dann true, wenn für $var eine der folgenden Bedingungen zutrifft:
- $var ist undefiniert (vorher kommt eine Notice)
- $var ist null
- $var ist false
- $var ist 0
- $var ist ein leerer String
- $var ist ein String der nur die Ziffer 0 enthält, z. B. '0' oder "0"
- $var ist ein leeres Array
Im Grunde genommen wird der Wert erst zu int und danach zu bool gecastet. Das Ergebnis wird schließlich negiert (vgl. empty()).
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

25-06-2010, 11:44
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
super erklärung, danke 
mache mich ans werk und schaue ob alles klar geht
|

25-06-2010, 22:25
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
hi,
muss noch einmal fragen
habe jetzt das ganze so gelöst if($string === FALSE){remission();}else{save();}
das funktioniert schon ganz gut, nur leider verschwinden manche requests immernoch.
habe eine statistik gemacht, so in etwa 5-10% sind einfach weg.
hat jemand einen rat?
danke
|

25-06-2010, 23:02
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Wie sieht dein aktueller Code aus?
|

26-06-2010, 12:32
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
PHP-Code:
while($int<$absoluteAnzahl){ $int++; // hier wird die url generiert ->$u_curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $u_cur); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookie_file); curl_setopt($ch, CURLOPT_COOKIEFILE,$this->cookie_file); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $string = curl_exec($ch);
if($string === FALSE){ print "error"; remission(); //die funktion ruft das ganze nochmal auf } else{ verarbeiten(); // hier wird weiter verarbeitet } usleep($this->sleep); curl_close($ch); }
sorry für die schlechte formatierung
|

27-06-2010, 15:11
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
keiner mehr??
|

27-06-2010, 15:47
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.309
|
|
Zitat:
Zitat von svr
keiner mehr??

|
OffTopic: Du weißt, was um 16 Uhr passiert? Schau mal in deine Fehrnsehzeitung.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
Ähnliche Themen
|
| Thema |
Autor |
Forum |
Antworten |
Letzter Beitrag |
|
Online Timeout
|
NetzSchleicher |
PHP Developer Forum |
6 |
05-01-2007 14:29 |
|
timeout
|
soerenschulz |
SQL / Datenbanken |
9 |
04-01-2007 20:39 |
|
fehlermeldung bei timeout
|
undine |
PHP Developer Forum |
3 |
10-10-2005 09:56 |
|
timeout definieren?
|
mrhappiness |
BRAINSTORMING PHP/SQL/HTML/JS/CSS |
4 |
04-12-2003 16:20 |
|
CGI Timeout
|
lemmy |
SQL / Datenbanken |
4 |
24-10-2002 13:53 |
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|