Externe Seite aufrufen

ZockerLordLP

Erfahrenes Mitglied
Hallo Community,

wie kann ich am einfachsten eine externe Seite in PHP aufrufen auf der ein Script aufgerufen wird, das etwas länger dauert? Sollte man dafür cURL benutzen?
Es geht mir eig. nur darum, dass die Seite aufgerufen wird als wenn es ein normaler Benutzer wäre. Kann man mit cURL auch ein TimeOut der externen Seite auswerten, da es schon sein kann,dass das Script länge als 30Sekunden dauert und ich mir dann eine E-Kail senden wollte?

Hoffe auf antworten :)
 
Hallo,

ja grundsätzlich geht das mit curl. Wobei es mit der Option CURL_TIMEOUT sogar ein Zeitrahmen definiert werden kann. Mit Hilfe Option CURLOPT_FAILONERROR kann man das Fehlverhalten steuern.

curl_errno() liefert 0 im Falle von "Alles OK", curl_error() gibt ein Meldung im Fehlerfalle zurück, die man loggen oder dem Benutzer präsentieren kann.

Aber das steht alles schön in der Doku beschrieben :)
 
@saftmeister
Danke genau das habe ich gesucht :)
Da PHP ein Timeout von 30Sekunden hat muss ich den CronTimeOut auch auf 30 setzen oder erkennt Cron das automatisch wenn PHP ein TimeOut sendet?
 
Das PHP-Timeout kannst du mit ini_set() oder set_time_limit() ändern. An der Command-Line gelten andere Regeln für PHP (cli = default 0 => endlos). Nur für den Fall der Fälle

PHP:
// Entweder
set_time_limit(300); // in Sek.
// oder
ini_set('max_execution_time', 300); // auch Sek.

Wenn PHP seine max_execution_time erreicht hat, wird auch curl beendet, egal in welchem Zustand es sich befindet. Das zugrundeliegende Socket wird geschlossen, der Vorgang damit abgebrochen. Der Rückgabewert von php wird an cron zurückgegeben und der Job damit als fehlgeschlagen eingestuft. In diesem Fall wird an den Administrator des Servers oder den Eigentümer des Jobs eine mail gesendet.
 
Zuletzt bearbeitet:
@saftmeister Danke, aber in meiner Dummheit habe ich Cron statt cURL geschrieben. Natürlich meine ich cURL. Wie behandelt cURL denn ein TimeOut einer externen Seite? An der PHP Ini kann ich leider nichts ändern, da mein Webspace betreiber nicht unterstützt
 
Cron uns cURL machen grundsätzlich verschiedene Sachen:
http://de.wikipedia.org/wiki/CURL
http://de.wikipedia.org/wiki/Cron

Du brauchst vermutlich beides, wenn du deine User nicht warten lassen möchtest. Wenn das Skript tatsächlich so lange läuft (ist diese andere Seite, die so lange läuft, auch von dir?), würde ich in periodischen Abständen das Ergebnis von der Seite abhoen und irgendwo abspeichern (z.B. Datenbank). Die User laden dann nur die Daten aus der Datenbank, feuern aber selber keine Requests an die externe Seite ab. Hat natürlich den Vorteil, dass es deutlich schneller geht :)
 
@alxy
So würde es mir nicht helfen:
Auf meinem Webspace habe ich eine Datei die E-Mails verschickt. Diese läuft im Normalfall ca. 20Sek. Wenn mal ein Fehler autritt und sie länger als 30Sek läuft schickt PHP ein TimeOut. Da der Webspace anbieter keine CronJobs unterstützt habe ich meinen Freund mit nem VServer gefragt ob er eine PHP Datei, die dann mit cURL die Seite aufruft, mit CronJob jede Nacht um 0:00 aufrufen kann. Nun würde ich gerne, dass das PHP Skript, das mit cURL die Seite aufruft bei einem TimeOut von MEINEM Webspace mir eine E-Mail sendet. Deswegegen muss ich herausfinden ob PHP ein TimeOut sendet. Sonst stelle ich das TimeOut von cURL einfach auf 30 Sekunden, wenn dann keine Antwort kommt sende ich mir eine E-Mail
 
Das ist einfach....
Lass dein Mailsendeskript einfach im Erfolgsfall eine bestimmte Nachricht ausgeben (zB "OK"). Dein Skript auf dem V-Server prüft dann nur, ob diese Antwort ("OK") ausgegeben wurde, oder nicht (dann bist du wahrscheinlich in das max_execution_time-Limit gerannt...). Übrigens: Zum Versenden größerer Mengen an Mails sollte man keinesfalls(!) die Mail Funktion von PHP verwenden ;)
 
Der kann auch intern die PHP-Mail Funktion benutzen. Ich würde empfehlen, hier die SMTP Variante zu wählen ;)
 

Neue Beiträge

Zurück