IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Forcer le téléchargement fonctionne seulement en local


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 56
    Points
    56
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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 ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 56
    Points
    56
    Par défaut
    @transgohan : J'ai essayé avec et sans flush()

    @Benjamin Delespierre

    C'est un chemin du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /videos/produit/maVideo.mpg
    Merci pour votre aide

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 56
    Points
    56
    Par défaut
    Oui j'arrive à ouvrir la vidéo manuellement avec le chemin fourni.


    Merci

  7. #7
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    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 : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    comment tu peux FORCER ton visiteur à télécharger quelque chose? c'est pas comme ça que ça marche le web.

    @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 .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Points : 56
    Points
    56
    Par défaut
    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

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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.

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    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.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  2. [PHP-JS] Forcer le téléchargement d'une image JPG
    Par Amnesiak dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 23h50
  3. [Configuration] problème pour forcer le téléchargement d'un fichier
    Par All Bran dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/01/2006, 16h23
  4. Réponses: 1
    Dernier message: 08/09/2005, 11h01
  5. Réponses: 2
    Dernier message: 23/03/2005, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo