2010-09-27 9 views
0

Je tente de télécharger des fichiers assez volumineux (jusqu'à plus de 1 Go) à partir d'un serveur HTTP distant via un script PHP. J'utilise fgets() pour lire le fichier distant ligne par ligne et écrire le contenu du fichier dans un fichier local créé via tempnam(). Cependant, les téléchargements de très gros fichiers (plusieurs centaines de Mo) échouent. Est-il possible de retravailler le script pour détecter les erreurs qui se produisent? Parce que le téléchargement n'est qu'une partie d'un processus global plus large, j'aimerais pouvoir gérer les téléchargements et gérer les erreurs dans le script PHP plutôt que d'avoir à aller à wget ou à un autre processus.Attraper des erreurs lors du téléchargement de fichiers volumineux via PHP

C'est le script que je suis maintenant en utilisant:

$tempfile = fopen($inFilename, 'w'); 
$handle = @fopen("https://" . $server . ".domain.com/file/path.pl?keyID=" . $keyID . "&format=" . $format . "&zipped=true", "r"); 
$firstline = ''; 
if ($handle) { 
while (!feof($handle)) { 
    $buffer = fgets($handle, 4096); 
    if ($firstline == '') $firstline = $buffer; 
    fwrite($tempfile, $buffer); 
} 
fclose($handle); 
fclose($tempfile); 
return $firstline; 
} else { 
throw new Exception ('Unable to open remote file.'); 
} 

Répondre

3

Je dirais que vous cherchez stream_notification_callback (en particulier les STREAM_NOTIFY_FAILURE & STREAM_NOTIFY_COMPLETED constantes)

+0

1 ne savaient pas que l'un. – NikiC

+0

Excellent, merci! (En note, j'ai juste ajouté ce code, et tous les fichiers de test ont fonctionné, donc je n'ai pas pu vraiment le tester.) – Wige