Estou chamando uma série de links usando o file_get_contents()
método em um loop. Cada link pode levar mais de 15 minutos para ser processado. Agora, me preocupo se o PHP file_get_contents()
tem um período de tempo limite?
Se sim, o tempo limite será excedido com uma chamada e passará para o próximo link. Não quero ligar para o próximo link sem o término anterior.
Então, diga-me se file_get_contents()
tem um período de tempo limite. O arquivo que contém o file_get_contents()
é definido set_time_limit()
como zero (ilimitado).
php
timeout
file-get-contents
Flora Clinton
fonte
fonte
Respostas:
O tempo limite padrão é definido pela
default_socket_timeout
configuração ini , que é de 60 segundos. Você também pode alterá-lo rapidamente:Outra maneira de definir um tempo limite seria usá-lo
stream_context_create
para definir o tempo limite como opções de contexto HTTP do wrapper de fluxo HTTP em uso:fonte
Como o @diyism mencionou, " default_socket_timeout, stream_set_timeout e stream_context_create timeout são o tempo limite de cada linha de leitura / gravação, não o tempo limite total da conexão " . E a principal resposta de @stewe me falhou.
Como alternativa ao uso
file_get_contents
, você sempre pode usarcurl
com um tempo limite.Então, aqui está um código funcional que funciona para chamar links.
fonte
fsockopen
em vez decurl
): stackoverflow.com/a/3690321/1869825Sim! Ao passar um contexto de fluxo no terceiro parâmetro:
Aqui com um tempo limite de 1s :
Fonte na seção de comentários de https://www.php.net/manual/en/function.file-get-contents.php
Opções de contexto HTTP :
Outros contextos: https://www.php.net/manual/en/context.php
fonte
stream_context_create
apenas funciona para o tempo limite da conexão. Se o servidor responder (enviar alguns dados) dentro do tempo limite especificado, mas levar uma eternidade para enviar o restante de sua carga, esse tempo limite não interromperá a transferência lenta.Vale ressaltar que, se alterar o default_socket_timeout em tempo real, pode ser útil restaurar seu valor após a chamada de file_get_contents :
fonte
Para mim, trabalho quando altero meu php.ini no meu host:
fonte