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 21/04/2011, 14h22   #1
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Par défaut Forcer le téléchargement fonctionne seulement en local

Bonjour,

Je veux forcer le téléchargement d'une vidéo (mpg)

Voici mon code :

Code :
1
2
3
4
5
6
7
8
 
if(file_exists($pathFile)){
    header("content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$pathFile");
    flush();
    readfile($pathFile);
    exit;
}
J'ai essayé pas mal de header différent que j'ai pu trouver sur ce forum....

En local cela marche parfaitement mais dès que je le met sur un serveur il me télécharge un fichier de 0 ou 8 octets (suivant les tests effectués...)

Bien sur le fichier et présent sur le serveur

Quelqu'un aurait une idée ?

Merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 16h45   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Que vient faire le flush() là dedans ?
Cela veut dire que tu envoies les entêtes puis tu envoies le fichier (dans une seule requête cela va de soit mais tout de même).
Donc suivant la configuration du serveur et du navigateur utilisé cela peut poser soucis à mon avis.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 17h02   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Ouais j'ai une idée

C'est quoi ce qu'il y a dans $pathFile ? Est-ce que par hasard ce serait pas un chemin du système de fichier ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 18h09   #4
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
@transgohan : J'ai essayé avec et sans flush()

@Benjamin Delespierre

C'est un chemin du genre

Code :
1
2
 
/videos/produit/maVideo.mpg
Merci pour votre aide
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 08h14   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Et donc pour rebondir sur ce que disait Benjamin Delespierre, ce chemin est-il sous ton dossier web et non ailleurs dans le système ?

Et aussi, arrives-tu à lire la vidéo en accédant manuellement au lien ? Le fichier est peut être tout simplement corrompu.

Ensuite ton hébergeur a peut être des restrictions de téléchargement. Je sais que certains hébergeurs ne permettent pas l'upload de fichiers de plus de X mio. Mais certains sont plus vilains et interdisent seulement le téléchargement de fichiers de plus de X mio ce qui fait que tu peux tout de même les stocker sur ton ftp.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 09h43   #6
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Oui j'arrive à ouvrir la vidéo manuellement avec le chemin fourni.


Merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 09h48   #7
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
comment tu peux FORCER ton visiteur à télécharger quelque chose? c'est pas comme ça que ça marche le web.

Citation:
@transgohan : J'ai essayé avec et sans flush()
c'est donc que c'est inutile.

vu que tu utilises des header() il serait judicieux de logger tous les messages générés par php (y compris les notices). Ce qui probable c'est que tes headers ne fonctionnent pas à cause par exemple d'une écriture précoce sur la sortie.

L'autre solution, on te l'a déjà suggéré c'est un problème de fichier (probleme de droits sur le fichier, c'est très probable).

En beaucoup moins probable mais en possible tout de même il y a la possibilité d'un probleme de compression de flux automatique avec du gzip configuré dans php.ini
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h14   #8
Membre à l'essai
 
Inscription : mars 2008
Messages : 159
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 159
Points : 24
Points : 24
Je ne veux pas forcer dans le sens ne pas donner le choix ...

Mais j'ai un lien télécharger une vidéo (vidéo légale) et je ne veux pas que cette vidéo s'ouvre dans le navigateur.

Sinon je vais voir si il y a des restriction sur le serveur ...

Merci
coupolites est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h31   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
comment tu peux FORCER ton visiteur à télécharger quelque chose? c'est pas comme ça que ça marche le web.
C'est à ça que sert Content-Disposition. Ce header ne peut fonctionner que pour les mimes connus, je te recommande de remplacer application/octet-stream par video/mpeg pour voir. cf la liste des mimes.

Dans le pire des cas, tu peux toujours mettre l'attribut target de ton lien à _blank pour le faire ouvrir dans un nouvel onglet.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h37   #10
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Essai éventuellement ceci : http://www.developpez.net/forums/d10...ttp-simplifie/

Ca pourra peut être t'aider , ou au moins tu y trouvera des idées pour le téléchargement de fichiers.
grunk 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 12h23.


 
 
 
 
Partenaires

Hébergement Web