Aller au contenu

téléchargement d'un fichier


Sujets conseillés

Posté

Bonjour,

Je développe un site sous easyphp installé sur un xp pro. J'essaie de faire un download d'un fichier temporaire mais je me heurte systématiquement à un message d'erreur.

Jai deux fichier, 1 nommé seltrac.php qui crée le fic temporaire et fait appel au second fichier download.php.

le code du seltrac.php (pour ce qui nous intéresse) :

<?php 
switch(strrchr(basename($dwn), "."))
{
case ".gz": $type = "application/x-gzip"; break;
case ".tgz": $type = "application/x-gzip"; break;
case ".zip": $type = "application/zip"; break;
case ".pdf": $type = "application/pdf"; break;
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".txt": $type = "text/plain"; break;
case ".htm": $type = "text/html"; break;
case ".html": $type = "text/html"; break;
default: $type = "application/octet-stream"; break;

}
header("Content-disposition: attachment; filename=$dwn");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type\n");
header("Content-Length: ".filesize($chemin . $dwn));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($chemin . $dwn);
?>

les messages d'erreur :

Notice: Undefined variable: dwn in c:\program files\easyphp1-8\www\download.php on line 2 
Notice: Undefined variable: dwn in c:\program files\easyphp1-8\www\download.php on line 17
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\download.php:2) in c:\program files\easyphp1-8\www\download.php on line 17
../..
Notice: Undefined variable: chemin in c:\program files\easyphp1-8\www\download.php on line 24
Notice: Undefined variable: dwn in c:\program files\easyphp1-8\www\download.php on line 24

merci d'avance pour le coup de main et pour l'explication qui ira avec (j'aime bien me couché moins bête que je me suis levé)

<edit=Dan: merci d'utiliser les balises CODE et CODEBOX pour les citations de messages. J'ai supprimé une partie de tes erreurs, parce que ce n'est que la première qui compte dans ton cas >

Posté

Bonjour,

Remplace tes variables $dwn, $chemin et $tmpfname par $_GET['dwn'], $_GET['chemin'] et $_GET['tmpfname'] dans ton fichier download.php.

Les messages "cannot modify header" viennent du fait de l'affichage te ta première erreur. On ne peut donc plus envoyer de header.

Posté

Dan,

nouveau message d'erreur :

<br />

<b>Warning</b>: filesize(): Stat failed for C:\Program Files\EasyPHP1-8\www\C:\Program Files\EasyPHP1-8\www\fic3B.tmp (errno=2 - No such file or directory) in <b>c:\program files\easyphp1-8\www\download.php</b> on line <b>20</b><br />

<br />

<b>Warning</b>: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\download.php:20) in <b>c:\program files\easyphp1-8\www\download.php</b> on line <b>20</b><br />

<br />

<b>Warning</b>: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\download.php:20) in <b>c:\program files\easyphp1-8\www\download.php</b> on line <b>21</b><br />

<br />

<b>Warning</b>: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\download.php:20) in <b>c:\program files\easyphp1-8\www\download.php</b> on line <b>22</b><br />

<br />

<b>Warning</b>: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\download.php:20) in <b>c:\program files\easyphp1-8\www\download.php</b> on line <b>23</b><br />

<br />

<b>Warning</b>: readfile(C:\Program Files\EasyPHP1-8\www\C:\Program Files\EasyPHP1-8\www\fic3B.tmp): failed to open stream: Invalid argument in <b>c:\program files\easyphp1-8\www\download.php</b> on line <b>24</b><br />

Si j'ai bien compris, il ne trouve pas le .tmp sous ce répertoire. Il est pourtant bien présent avec le bon nom. Quelque chose m'échappe.

Posté

Bonjour,

Es-tu certain que ton script peut atteindre le fichier dans le dossier C:\Program Files\EasyPHP1-8\www ??

Est-il créé ? Parce qu'il semble que filesize() ne trouve pas le fichier (No such file or directory)

Posté

le script ce trouve sous ce répertoire ainsi que le fichier. Effectivement il semble qu'il ne le trouve pas. Serait-ce un problème de droits sur le fichier ? (mais dans ce cas comment aurait-il pu être créer ?)

Posté

A mon avis, il y a danger à mettre un chemin absolu dans ce cas... A priori le script php ne peut "atteindre" qu'un espace restreint du serveur.

Essaye sans mettre de chemin du tout, ca creera le fichier dans le même répertoire que le script.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...