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

28-06-2010, 02:13
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Das ist nicht dein realer Code!
|

29-06-2010, 13:48
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
wieso ist das nicht mein realer code?
|

29-06-2010, 14:08
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Weil du dich in einem Objektkontext befindest (das sagt mir $this->sleep) und deswegen die Funktion verarbeiten() nicht an das CURL-Ergebnis kommt. Das liegt nämlich in einer lokalen Variable $string in der Methode, wo der CURL-Aufruf stattfindet. Wenn das wirklich eins zu eins dein Code ist, dann erkläre mal bitte, was verarbeiten() macht!
|

29-06-2010, 19:38
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
du hast vollkommen recht.
das ganze ist aus einer klasse
das ganze ist ein ausschnitt einer funktion.
verarbeiten war pseudocode, stimmt. da das, was mit dme string gemacht ist, viel zu viel code hier wäre. das ganze wird gefiltert, bisschen verändert und dann per insert into in ne db geschrieben.
das remission dekrementiert den counter und setzt einige andere variablen, sodass innerhalb der schleife der request wiederholt wird
entschuldigt!
|

30-06-2010, 05:06
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Leider kann man dir nicht helfen, weil du Informationen zurück hältst. Dein Code besteht im Wesentlichen aus
PHP-Code:
$string = curl_exec(...); if ($string === FALSE) { remission(); } else { verarbeiten(); }
und deine einzige Aussage dazu ist "leider verschwinden manche requests".
Unter "Request" verstehst du offenbar die Ausführung von curl_exec(). Aber was heißt "verschwinden"? Gibt es eine Differenz zwischen der Anzahl der Ausführungen von curl_exec() und der Summe der Ausführungen von remission() und verarbeiten()? Anders ausgedrückt: Willst du behaupten, dass nach curl_exec() manchmal weder if noch else ausgeführt wird?!?
|

30-06-2010, 08:05
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
du weißt selbst, dass das eigentlich nicht sein kann .. deine Abfrage mit
Code:
if ($string === FALSE) {
ist absolut eindeutig .... es kann natürlich sein, dass dass einige deiner Anfragen IMMER im remission - Zweig landen. Dort wird die Schleifenvariablein incrementiert - und irgendwann wird dann die Schleife abgebrochen, ohne dass die betreffenden Hosts jemals antworten - Das wird wohl passieren, in unserm tollen Internet .. einzelne Rechner sind immer mal wieder nicht erreichbar
__________________
Wer LESEN kann, ist klar im Vorteil!
Geändert von eagle275 (30-06-2010 um 08:28 Uhr)
|

30-06-2010, 13:39
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
hallo,
okay, jetzt werde ich es ganz genau machen. mein problem ist, dass die verarbeitung von $string so umfangreich ist. deshalb habe viel gekürzt, weshalb es wohl umstaendlich wird.
also, jetzt ganz genau:
es handelt sich um die klasse abc. im konstruktor wird dann jeweils alles festgelegt, was die objektfunktionen brauchen ($this->..)
der ausschnitt des codes ist aus der "main" funktion. diese wird nach dem erzeugen des objekts gerufen. dabei wird die schleife ($num) über $argv gesteuert. (kommandozeile)
jetzt wird genau das ausgefuehrt:
PHP-Code:
while($num<$this->num){ //durchlauflaenge wird definiert $num->argv $cur_u = getURL(); //diese funktion liefert die url, die besucht wird // ist auch etwas umfangreicher, zum verstaendnis reicht es aber wohl so $ch = curl_init(); //hier werden die cURL "executed" curl_setopt($ch, CURLOPT_URL, $cur_u); 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); curl_setopt($ch, CURLOPT_NOPROGRESS, 0); curl_setopt($ch, CURLOPT_BUFFERSIZE, 9000); $string = curl_exec($ch);
if($string === FALSE){ //wird auf fehler ueberprueft print "error"; remission(); setzt den url "maker" um eins zurueck, sodass neu gerufen wird } else{ verarbeiten($string); hier wird der string dann weiterverarbeitet print "fertig und ok"; $num++; //schleife } print "sent request to ".$num; curl_close($ch); usleep($this->sleep); }
so, das ist es. die ausgabe sieht nun so aus (wir gehen von 10 requests aus)
fertig und ok sent request to....
fertig und ok sent request to....
error sent request to...
fertig und ok sent request to....
sent request to....
...
und genau das vorletze ist das problem: hier wird zwar gesagt, dass der request gesendet wurde, allerdings habe ich keine indikator was nun damit passiert ist. obwohl doch eine der beiden moeglichkeiten (verarbeiten oder remission) zutreffen MUSS.
ich hoffe nun ist es klar
danke!
Geändert von svr (30-06-2010 um 13:41 Uhr)
|

30-06-2010, 14:10
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Wenn deine Schleife nicht mehr wiederholt wird (letzter Durchlauf), kann danach ja nichts mehr kommen. Sinnvoller wäre es, diese Ausgabe vor dem aktuellen Request zu tätigen und nicht danach für den nächsten, weil ja eben nicht unbedingt noch einer kommen muss. Error by Design.
Edit: vergiss das Geschriebene, ich merk gerade, dass ich da was verdreht hab.
__________________
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! 
Geändert von AmicaNoctis (30-06-2010 um 15:08 Uhr)
|

30-06-2010, 15:03
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Deine Art den Code für uns zu vereinfachen macht es leider nur komplizierter.
Dein Problem: Du erhältst u.a. die Ausgabe "sent request to …" ohne dass zuvor "error" oder "ok" ausgegeben wurde.
Dein Code entspricht diesem Pseudocode:
PHP-Code:
while ($num < $this->num) { if (rand(0,1)) { print "error"; } else { print "ok"; $num++; } print "sent request to ".$num; }
Jetzt siehst du selbst, dass dieser Code dein Problem überhaupt nicht verursachen kann. Da ich deine Ausgabe nicht anzweifle, muss es also an deinen "Vereinfachungen" liegen.
Häng doch einfach mal das ganze Script als Attachment an deinen nächsten Beitrag. Sonst kommen wir hier nicht zu Potte.
|

30-06-2010, 18:19
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
hallo,
ah, jetzt habe ich es herausgefunden: tatsächlich lag es nicht an cURL, es lag an einer regular expression, der ein U Modifier fehlte.
ich habe bewusst nicht den ganzen code gepostet, da es über 1700 zeilen sind.
vielen dank für eure hilfe!
|

30-06-2010, 18:37
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von svr
da es über 1700 zeilen sind.
|
Aua, wie will man das denn noch debuggen? Mal ein paar Such-Stichworte als Anregungen für die Verbesserung deines Programmierstils, um sowas beim nächsten Mal zu vermeiden: OOP, Code Re-use, Unit Tests, Behavior-driven Development, Design Patterns, Inversion of Control.
__________________
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! 
|

01-07-2010, 13:23
|
|
svr
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 60
|
|
Zitat:
Zitat von AmicaNoctis
Aua, wie will man das denn noch debuggen? Mal ein paar Such-Stichworte als Anregungen für die Verbesserung deines Programmierstils, um sowas beim nächsten Mal zu vermeiden: OOP, Code Re-use, Unit Tests, Behavior-driven Development, Design Patterns, Inversion of Control.
|
klar, bin mir bewusst.
vielen dank!
|
|
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
|