J'appelle une série de liens en utilisant la file_get_contents()
méthode en boucle. Le traitement de chaque lien peut prendre plus de 15 minutes. Maintenant, je me demande si PHP file_get_contents()
a un délai d'expiration?
Si oui, il expirera avec un appel et passera au lien suivant. Je ne veux pas appeler le lien suivant sans que le précédent ne soit terminé.
Alors, dites-moi s'il y file_get_contents()
a un délai d'expiration. Le fichier qui contient le file_get_contents()
est mis set_time_limit()
à zéro (illimité).
php
timeout
file-get-contents
Flora Clinton
la source
la source
Réponses:
Le délai d'expiration par défaut est défini par
default_socket_timeout
ini-setting , qui est de 60 secondes. Vous pouvez également le changer à la volée:Une autre façon de définir un délai d'expiration serait de l'utiliser
stream_context_create
pour définir le délai d'expiration en tant qu'options de contexte HTTP du wrapper de flux HTTP utilisé:la source
Comme @diyism l'a mentionné, " default_socket_timeout, stream_set_timeout et stream_context_create timeout sont tous les délais d'expiration de chaque ligne en lecture / écriture, pas tout le délai d'expiration de la connexion. " Et la réponse principale de @stewe m'a échoué.
Comme alternative à l'utilisation
file_get_contents
, vous pouvez toujours utilisercurl
avec un délai d'expiration.Voici donc un code fonctionnel qui fonctionne pour appeler des liens.
la source
fsockopen
au lieu decurl
): stackoverflow.com/a/3690321/1869825Oui! En passant un contexte de flux dans le troisième paramètre:
Ici avec un timeout de 1s :
Source dans la section commentaires de https://www.php.net/manual/en/function.file-get-contents.php
Options de contexte HTTP :
Autres contextes: https://www.php.net/manual/en/context.php
la source
stream_context_create
ne fonctionne que pour le délai de connexion. Si le serveur répond (envoie des données) dans le délai imparti, mais prend une éternité pour envoyer le reste de sa charge utile, ce délai n'interrompt pas le transfert lent.Il est à noter que si vous modifiez default_socket_timeout à la volée, il peut être utile de restaurer sa valeur après votre appel file_get_contents :
la source
Pour moi, je travaille lorsque je change mon php.ini dans mon hôte:
la source