Frage

ich mit PHP arbeite Dateien und Fotos von Remote-Servern zuzugreifen. Ich bin meistens die file_get_contents () verwenden und copy () Funktionen.

Manchmal ist eine kleine Textdatei zugreifen oder Foto ist fast sofort, aber auch andere Zeiten scheint es, „stecken“ für eine Minute auf genau die gleiche Datei zu erhalten. Und manchmal tatsächlich bewirkt, dass es mein Skript hängen, und selbst wenn ich das Skript Apache stoppen bleibt für einige Minuten gesperrt.

Ich bin durchaus bereit, die Tatsache zu akzeptieren, dass Internet-Verbindungen flockig sein können. Meine Sorge ist, dass ich genesen anmutig und dass ich Apache nicht abstürzen - die PHP set_time_limit () gibt nur einen fatalen Fehler. Darüber hinaus gibt es eine Notiz in dem PHP-Handbuch, dass die Zeit auf Stream-Operationen ausgegeben nicht zur Laufzeit des Skripts beiträgt.

Wie kann ich erholen sich von solchen Verbindungsprobleme und lassen mein Skript fortgesetzt werden? Und warum sollte dies Apache verursachen zu hängen?

Danke, Brian

War es hilfreich?

Lösung

$options = array( 'http' => array(
      'user_agent'    => 'Firefox wannabe',
      'max_redirects' => 1,
      'timeout'       => 10,
  ) );
$context = stream_context_create( $options );
$content = file_get_contents( $url, false, $context );

Hier finden Sie aktuelle stream_context_create und HTTP-Kontext Optionen . Der obige Code wird ein Timeout auf der Verbindung gesetzt, und wird für eine Umleitung ermöglichen.

Dies sollte verhindern, dass das Timeout erreicht.

Die langen Verzögerungen können durch das Netzwerk oder von dem Remote-Server mit einer Firewall verursacht werden, zu leugnen, Sie auf einmal oder durch einen flockigen DNS-Server oder Router auf dem Weg zu der Remote-Host zu viele Dateien zu greifen. Als Anregung, sollten Sie lokal die heruntergeladenen Dateien zwischenspeichern, so auf die nächsten Refresh-Dateien werden lokal statt der großen weiten Netz abgewickelt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top