Pergunta

Eu estou trabalhando com PHP para acessar arquivos e fotos a partir de servidores remotos. Eu estou usando principalmente as file_get_contents () e cópia () funções.

Às vezes o acesso a um pequeno arquivo de texto ou foto é quase instantânea, mas outras vezes parece ficar "preso" por um minuto no mesmo arquivo exato. E às vezes isso realmente faz com que o meu script para pendurar, e mesmo quando eu parar o script Apache permanece trancado por vários minutos.

Estou bastante disposto a aceitar o fato de que as conexões de internet pode ser esquisito. Minha preocupação é que eu recuperar normalmente e que eu não bata Apache - a função PHP set_time_limit () retorna apenas um erro fatal. Além disso, há uma nota no manual do PHP que o tempo gasto em operações de fluxo não contribui para o tempo de execução do script.

Como posso recuperar de tais problemas de conexão e permitir que o meu script para continuar? E por que isso seria causando Apache para pendurar?

Obrigado, Brian

Foi útil?

Solução

$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 );

Dê uma olhada stream_context_create e HTTP opções de contexto . O código acima irá definir um tempo limite na conexão, e permitirá um redirecionamento.

Isso deve impedir de atingir o tempo limite.

Os longos atrasos podem ser causados ??pela rede ou pelo servidor remoto ter um firewall negar que você pegue muitos arquivos de uma vez ou por um servidor DNS escamosa ou roteador no caminho para o host remoto. Como sugestão, você deve armazenar em cache localmente os arquivos baixados, assim por diante os próximos arquivos de atualização serão tratadas localmente em vez da grande rede de largura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top