Domanda

Sto lavorando con PHP per accedere a file e foto da server remoti. Uso principalmente le funzioni file_get_contents () e copy ().

A volte l'accesso a un piccolo file di testo o una foto è quasi istantaneo, ma altre volte sembra "bloccato". per un minuto sullo stesso file esatto. E a volte fa sì che il mio script si blocchi, e anche quando lo interrompo, Apache rimane bloccato per diversi minuti.

Sono abbastanza disposto ad accettare il fatto che le connessioni Internet possono essere instabili. La mia preoccupazione è che mi riprendo con garbo e che non mi blocchi Apache - la funzione set_time_limit () di PHP restituisce solo un errore fatale. Inoltre, c'è una nota nel manuale di PHP che il tempo impiegato per le operazioni di streaming non contribuisce al tempo di esecuzione dello script.

Come posso recuperare da tali problemi di connessione e consentire al mio script di continuare? E perché questo potrebbe causare il blocco di Apache?

Grazie, Brian

È stato utile?

Soluzione

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

Dai un'occhiata a stream_context_create e Opzioni di contesto HTTP . Il codice sopra imposterà un timeout sulla connessione e consentirà un reindirizzamento.

Ciò dovrebbe impedire il timeout.

I lunghi ritardi possono essere causati dalla rete o dal server remoto che ha un firewall che ti nega di prendere troppi file contemporaneamente o da un server DNS o router traballante sul percorso verso l'host remoto. Come suggerimento, dovresti memorizzare nella cache localmente i file scaricati, quindi al prossimo aggiornamento i file verranno gestiti localmente invece della grande rete.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top