Fonction filesize en local et sur server

Mammouth du PHP | 965 Messages

27 févr. 2008, 14:11

Bonjour,

Lorsque je veux forcer le telechargement de mes fichiers sans avoir a utiliser le clic droit -> enregistrer sous j'utilise le code suivant :
//telechargement 
clearstatcache();
$taille=filesize($file); 
header("Content-Type: application/force-download; name=\"$file\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $taille"); 
header("Content-Disposition: attachment; filename=\"$file\""); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile($file); 
exit(); 
en local aucun problème, le téléchargement se lance bien mais sur server il me retourne l'erreur suivante :
Warning: filesize() [function.filesize]: stat failed for http://site/doc.pdf in /var/www/vhosts/site/page.php on line 39
la ligne 39 correspond à :
$taille=filesize($file);
J'ai tenter de mettre le fichier en 777 mais rien a faire.

Pourtant avec une autre fonction "Telecharger tout les fichiers" je peux télécharger l'ensemble des documents sans problème et même les concaténer, donc je ne vois pas un problème de droit sur le fichier ou d'emplacement.

Une idée ?

Mammouth du PHP | 505 Messages

27 févr. 2008, 15:03

Vérifie que $file correspond bien coté serveur a l'emplacement du fichier. Si c'est du relatif, vérifie que tu as bien . dans ton path ou si ce n'est pas le cas, que ton $file commence bien par ./ et assure toi que le path courant est bien celui que tu pensais (getcwd())
Enfin, si c'est absolu, assure toi que le groupe ou l'utilisateur utilisé pour faire tourner ton apache a bien les droits pour accéder au fichier (mettre 777 sur le fichier ne suffit pas si tu n'as pas les droits pour traverser les répertoires qui mène au fichier)

Mammouth du PHP | 965 Messages

27 févr. 2008, 15:11

Vérifie que $file correspond bien coté serveur a l'emplacement du fichier. Si c'est du relatif, vérifie que tu as bien . dans ton path ou si ce n'est pas le cas, que ton $file commence bien par ./ et assure toi que le path courant est bien celui que tu pensais (getcwd())
Enfin, si c'est absolu, assure toi que le groupe ou l'utilisateur utilisé pour faire tourner ton apache a bien les droits pour accéder au fichier (mettre 777 sur le fichier ne suffit pas si tu n'as pas les droits pour traverser les répertoires qui mène au fichier)
ce qui signifie que pour un chemin absolue en http://monsite/fichier.pdf il faut que je mette tout en 777 ? :s


erfff je viens de voir que je ne peux pas tout passer en 777 ya pas un moyen de forcer le download pour un fichier sans passer par la ? :s

ViPHP
ViPHP | 2287 Messages

27 févr. 2008, 15:41

La réponse est dans le message d'erreur :
Warning: filesize() [function.filesize]: stat failed for http://site/doc.pdf in /var/www/vhosts/site/page.php on line 39
Ton $file contient une URL. Hors ce n'est pas une url qu'il faut donner à filesize(), mais un chemin vers un fichier ;-)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 965 Messages

27 févr. 2008, 15:44

La réponse est dans le message d'erreur :
Warning: filesize() [function.filesize]: stat failed for http://site/doc.pdf in /var/www/vhosts/site/page.php on line 39
Ton $file contient une URL. Hors ce n'est pas une url qu'il faut donner à filesize(), mais un chemin vers un fichier ;-)
j'ai retirer le filesize du script ce qui donne :
//telechargement 

header("Content-Type: application/force-download; name="$file""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $taille"); 
header("Content-Disposition: attachment; filename="$file""); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile($file); 
exit(); 
étant donné que le filesize n'est pas repris plus loin dans le script, est ce que je fais une grosse connerie ?

ViPHP
ViPHP | 2287 Messages

27 févr. 2008, 15:46

étant donné que le filesize n'est pas repris plus loin dans le script, est ce que je fais une grosse connerie ?
Et ça c'est quoi ?
header("Content-Length: $taille");  
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 965 Messages

27 févr. 2008, 15:48

étant donné que le filesize n'est pas repris plus loin dans le script, est ce que je fais une grosse connerie ?
Et ça c'est quoi ?
header("Content-Length: $taille");  
arf oui pourtant le script a l'air de tourner convenablement :/

bon je vais tenter de trouver un moyen de lancer un chemin relatif, ce qui risque d'être assez difficile etant donner que je dois utiliser un absolu dans la même page.