Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/11/2006, 17h02   #1
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
Par défaut Problème avec le téléchargement forcé d'un fichier

Bonjour,

Grace à un script php je force le téléchargement de fichier. Ce script reçoit deux arguments, le nom du fichier ex : toto.avi et l'url absolue du fichier ex : www.toto.com/video/toto.avi.
Lorsque je clique sur mon lien, une boite de dialogue s'ouvre effectivement, m'indique le bon nom de fichier et me télécharge un fichier de 0 ko !

Si quelqu'un pouvait m'aider

En vous remerciant

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
 
$name = $_GET['name'];
$location = $_GET['location'];
$type = "video/x-msvideo";
 
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $type");    
$header="Content-Disposition: attachment; filename=".$name.";";
header($header );
header("Content-Transfer-Encoding: binary");
@readfile($location); 
 
?>
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h07   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Est-ce que tu testes si la $location est correcte/valide/existante/... [rayer la mention inutile] ?
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h17   #3
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
Salut,

J'ai fait des test avec des echo de mes variables et elles sont correctes.
Je ne m'explique donc pas ce comportement, en même temps je ne suis pas un habitué de php.
Verrais tu une autre possibilités d'erreur ?

Merci
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h26   #4
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Es tu sûr de ta synthaxe concernant ton type de téléchargement ? Tu sais, dans les Header, tout comme dans ce type de gestion de télémchargement, une majuscule à la place d'une minuscule, et c'est la grouille.

Je te conseil de vérifier minutieusement la synthaxe de tes header : espaces, casses, etc....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h35   #5
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
J'avoue ne pas voir d'erreur, peut etre dû à mon niveau, mais tout de même je n'en vois pas. J'ai testé d'ecrire en dur l'url du fichier, ca me fait le même problème, c'est à dire me télécharge un fichier de 0 ko.

Je deviens fou, sauvez mon esprit

Merci
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h41   #6
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Pourquoi tu ne mettrais pas simplement un lien sur ton téléchargement dans une page HTML, ? Tu n'as pas besoin de gérer le téléchargement, si ????

Code :
1
2
 
<a href="<?php echo $location; ?>">téléchargement</a>
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h48   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par sunshine33
J'ai fait des test avec des echo de mes variables et elles sont correctes.
Je ne m'explique donc pas ce comportement, en même temps je ne suis pas un habitué de php.
Verrais tu une autre possibilités d'erreur ?
as-tu essayer is_file() ou file_exists() ?

Et je viens de voir un truc qui m'horripile :
Enlève-moi ce satané @
On ne désactive jamais les erreurs !
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h48   #8
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
Je ne peux pas faire ça, car j'appelle le fichier php depuis une apply flash.
Je ne peux donc pas faire un simple lien, surtout qu'un simple lien ne force pas le download, or c'est ce que je recherche.

En te remerciant.
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h53   #9
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
J'ai testé d'enlever le readfile pour bien comprendre son rôle. Dans mon cas, son abscence ne change rien, ca lance la boite de dialogie et telecharge un fichier vide.

Inversement j'ai laissé uniquement le readfile, et là erreur :

Code :
1
2
3
4
 
Warning: readfile() [function.readfile]: php_network_getaddresses: getaddrinfo failed: Hôte inconnu. in C:\wamp\www\****\www\php\****\****\downloadVideo.php on line 49
 
Warning: readfile(*****/*****/*****/****/****/video/liste2/demoreel.mov) [function.readfile]: failed to open stream: No error in C:\wamp\www\****\www\php\****\****\downloadVideo.php on line 49
Les numéros de lignes sont plus importante que le coed que je vous ai transmi car j'ai laissé pas mal de code de test en commentaire, donc c'est normal.
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 09h07   #10
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
Bon je fais mon mea culpa !
L'erreur venait du fait que le readfile n'acceptait pas d'url absloue, ex http://www.toto.com..... , j'ai remanié çà en adresse relative et le readfile fonctionne nickel

J'aurais jsute une dernière demande, lors du téléchargement le poids du fichier à télécharger ne s'affiche pas, ca met inconnue. Or je calcul correctement son poids, j'ai vérifié avec un echo, et je crée ce qui me semble être l'header aproprié :

header("Content-Length:".$size);

Voila l'intégralité de mon code, ca ne fait pas beaucoup de lignes :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<?php
 
$name = $_GET['name'];
$location = "../../../" . $_GET['location'];
$type = "video/x-msvideo";
$size = filesize($location);
 
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $type");  
$header="Content-disposition: attachment; filename=".$name.";";
header($header );
header("Content-Transfer-Encoding: binary");
header("Content-Length:".$size);
@readfile($location);
 
?>
Si vous pouviez m'aider sur ce dernier point, je vous en serez reconnaissant.
Merci
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 09h56   #11
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
manque p'tet un petit espace
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 10h03   #12
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
Salut !

J'ai essayé en rajoutant un espace :
header("Content-Length: ".$size);

Mais cela n'y a rien changé

Une autre idée ?

PS : J'en profite pour exposer un autre problème mais qui ne survient que sous IE, sous FF non : Sous IE le nom du fichier à télécharger est toujours le nom de ma page php ! ! ! Je ne comprends pas pourquoi, comme s'il ne tenait pas compte de la variable $name. Or sous FF ca fonctionne nickel à ce niveau là.

Merci pour votre aide en tout cas.
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 10h10   #13
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Essaie peut-etre de remplacer ça :
Code :
1
2
$header="Content-disposition: attachment; filename=".$name.";";
header($header );
par
Code :
header('Content-Disposition: attachement; filename="'. $name .'"');
Si ca marche toujours pas essaie de remplacer
Code :
header("Content-Type: $type");
par
Code :
header('Content-Type: '. $type .'; name="'. $name .'"');
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 10h17   #14
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
Non cela n'a pas réglé mon problème de nom de fichier. J'en suis vraiment déçu, en effet c'est encore plus important que la taille du fichier à mes yeux. Car un mauvais nom de fichier veut aussi dire une mauvaise extension, il me met toujours .avi alors que ca pourrait être autre chose. Resultat, une fois le fichier téléchargé on ne peut pas le lire directement car ce n'est pas forcément la bonne appli qui se lance pour le lire ...
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 10h24   #15
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 120
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 120
Points : 18
Points : 18
En fait, le code que tu m'as donné ne change rien sous FF, par contre sous IE ca ne force plus le téléchargement, ca tente d'ouvrir directement le fichier avec windows media player. Surement car il se trompe sur le nom du fichier et son extension.
sunshine33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h46.


 
 
 
 
Partenaires

Hébergement Web