Download de gros fichier avec header()

leg_yves Messages postés 3 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 10 août 2005 - 10 août 2005 à 22:27
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 10 août 2005 à 23:11
Bonjour, J'ai écris un code php qui permet au client de downloader un fichier d'un serveur. Tout marche bien, le client est capable de downloader de petits fichiers. Le problème arrive lorsque c'est le temps de dowloader des fichiers de tailles supérieures à 2Mo. Le fichier est downloadé, mais il est incomplet. Il est tronqué à 1,9Mo. Il est donc inutilisable. J'ai bien sûr modifier les valeurs comme suit : file_uploads On et upload_max_filesize 20M, pour permettre le upload et le augmenter la taille maximale. Je ne sais plus quoi faire après de longues heures de recherche.


Je fonctionne avec la version PHP 5.0.4 et IIS 5.1 (Je sais IIS n'est pas fait pour php, mais à ma job, il fonctionne sous IIS )

Quelqu'un peut m'aider???

Voici le code :

if($_GET['dwn'])
{
$fileName = $_GET['file']; // Obtient le nom à donner au fichier.
$fileString = $_GET['dwn']; // Obtient le nom physique du fichier


// Traduction du nom de fichier pour Internet Explorer.
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
}


// S'assure que le fichier existe avant d'envoyer les headers.
if([mailto:!$fdl=@fopen($fileString,'r' !$fdl=@fopen($fileString,'r']))
die("Le Fichier ne peut être ouvert!");
else
{
header("Cache-Control: "); // Laisser blanc évite des erreurs de IE.
header("Pragma: "); // Laisser blanc évite des erreurs de IE.
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename="".$fileName.""");
header("Content-length:".(string)(filesize($fileString)));
header("Content-Description: File Transfer");
sleep(1);
fpassthru($fdl);
}
}

Merci

5 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 août 2005 à 22:38
Salut,



augmente le max_execution_time dans le php.ini je pense que c'est lui qu'est en cause.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
leg_yves Messages postés 3 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 10 août 2005
10 août 2005 à 22:44
Je te remercie, mais j'avais oublié de mentionner que j'avais aussi modifier les valeurs suivantes comme suit :

max_execution_time = 120 ; Maximum execution time of each script, in seconds
max_input_time = 120 ; Maximum amount of time each script may spend parsing request data
memory_limit = 20M ; Maximum amount of memory a script may consume (8MB)

Je crois t'avoir tout dit, je n'ai modifier aucun autre valeur.

Je cherche toujours...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 août 2005 à 22:56
Bah regarde au bout de combien de temps le fichier reste à 1.9 Mo et compare ça au max_execution_time

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
leg_yves Messages postés 3 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 10 août 2005
10 août 2005 à 23:08
J'ai downloader le fichier plusieurs fois et il me donne toujours 2 ou 3 secondes. La fênetre indique que le fichier est complètement downloader, cependant le fichier indique toujours 1,9Mo et pourtant j'ai accès au serveur et je sais très bien que le fichier à d'abord été upload correctement et complètement et que sa taille est de 3,5Mo. J'ai beau augmenté le max_execution_time mais j'en reçoit pas plus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 août 2005 à 23:11
header("Content-length:".(string)(filesize($fileString)));



heu tu peux remplacer par ça :



header('Content-length:'.filesize($fileString));

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
Rejoignez-nous