Ho avuto lo stesso problema in passato, per il mio caso ho risolto con questo metodo, che ti propongo ora come funzione.
Premetto che avendo a disposizione l'estensione curl l'ho preferito a file_get_contents.
Internamente effettua 5 tentativi su ogni url, puoi provarla così com'è ed eventualmente migliorarla a tuo piacimento ( ad esempio parametrizzare il numero di tentativi, effettuare un log per le url per le richieste che restituiscono errori ecc.. ).
Codice PHP:
function curlRequest($url)
{
$error = 0;
$tentativi = 0;
$limit = 5;
do {
// Richiesta Curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$error = curl_errno($ch);
curl_close($ch);
$tentativi++;
if($tentativi == $limit) {
break;
}
} while($error != 0);
//echo "Tentativi: ".$tentativi;
//var_dump($error);
return $data;
}
Ciao