Ich rufe eine Reihe von Links mit der file_get_contents()
Methode in einer Schleife auf. Die Verarbeitung jedes Links kann länger als 15 Minuten dauern. Jetzt mache ich mir Sorgen, ob PHPs file_get_contents()
eine Zeitüberschreitung haben?
Wenn ja, tritt bei einem Anruf eine Zeitüberschreitung auf und es wird zum nächsten Link gewechselt. Ich möchte den nächsten Link nicht aufrufen, ohne dass der vorherige fertig ist.
Bitte sagen Sie mir, ob file_get_contents()
es eine Zeitüberschreitung gibt. Die Datei, die das enthält, file_get_contents()
wird set_time_limit()
auf Null gesetzt (unbegrenzt).
php
timeout
file-get-contents
Flora Clinton
quelle
quelle
Antworten:
Das Standardzeitlimit wird durch die
default_socket_timeout
Ini-Einstellung definiert , die 60 Sekunden beträgt. Sie können es auch im laufenden Betrieb ändern:Eine andere Möglichkeit, ein Zeitlimit festzulegen, besteht
stream_context_create
darin, das Zeitlimit als HTTP-Kontextoptionen des verwendeten HTTP-Stream-Wrappers festzulegen:quelle
Wie @diyism erwähnt hat, sind " default_socket_timeout, stream_set_timeout und stream_context_create timeout das Zeitlimit für jede Zeile zum Lesen / Schreiben, nicht das gesamte Verbindungszeitlimit. " Und die Top-Antwort von @stewe hat mich gescheitert.
Alternativ zur Verwendung
file_get_contents
können Sie immercurl
eine Zeitüberschreitung verwenden.Hier ist also ein Arbeitscode, der zum Aufrufen von Links funktioniert.
quelle
fsockopen
anstelle voncurl
): stackoverflow.com/a/3690321/1869825Ja! Durch Übergeben eines Stream-Kontexts im dritten Parameter:
Hier mit einer Zeitüberschreitung von 1s :
Quelle im Kommentarbereich von https://www.php.net/manual/en/function.file-get-contents.php
HTTP-Kontextoptionen :
Andere Kontexte: https://www.php.net/manual/en/context.php
quelle
stream_context_create
nur für das Verbindungszeitlimit. Wenn der Server innerhalb des angegebenen Zeitlimits antwortet (einige Daten sendet), es jedoch ewig dauert, den Rest seiner Nutzlast zu senden, unterbricht dieses Zeitlimit die langsame Übertragung nicht.Es ist erwähnenswert, dass bei Änderungen es nützlich sein kann, den Wert nach dem Aufruf von file_get_contents wiederherzustellen default_socket_timeout im laufenden Betrieb ändern :
quelle
Für mich arbeiten, wenn ich meine php.ini in meinem Host ändere:
quelle