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 :

Téléchargement de fichiers par un script php ne fonctionne plus depuis nom de domaine [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 573
    Points : 258
    Points
    258
    Par défaut Téléchargement de fichiers par un script php ne fonctionne plus depuis nom de domaine
    Bonjour à tous,

    Je viens vous exposer ici un problème que je rencontre depuis peu.
    Sur mon site j'utilise un fichier php pour télécharger des documents dont je souhaite cacher l'adresse.
    Les problèmes sont apparus quand j'ai décidé de prendre un nom de domaine pour ce site..... et un certificat ssl....Je ne sais pas s'il y a un rapport....

    J'ai un site principal hébergé chez OVH et d'autres sites (multi-sites) avec des noms de domaines sont également hébergés dans des dossiers dédiés.

    Le téléchargement de fichier se passe très bien quand je suis connecté avec l'adresse de mon site principal et toute l'arborescence jusqu'à ma page de téléchargement.
    Mais quand je me connecte avec le nouveau nom de domaine le script ne fonctionne plus.
    Sous Edge le fichier commence à se télécharger on voit même la taille du fichier à télécharger et puis au bout de quelques secondes j'ai un message d'erreur: 'impossible de télécharger - problème de réseau"
    Sous firefox:
    C:\Users\Sylvain\AppData\Local\Temp\L6IBn34b.pdf.part ne pourra être enregistré car le fichier source ne peut être lu.

    Réessayez plus tard ou contactez l’administrateur du serveur.
    J'ai bien sûr vérifié mes liens....

    Voici le script php pour télécharger le fichier. Le nom du fichier est passé par une variable POST... et il passe bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    //echo($_POST['fichier']);
    if(isset($_POST['fichier']))
    {
    $file ="dossierpdf/".$_POST['fichier'];
    //echo("adresse du fichier: ".$file);
     
    //Check the file exists or not
    	if (file_exists($file)) {
    		echo("fichier existant");
    		header('Content-Description: File Transfer');
    		header('Content-Type: application/octet-stream');
    		header('Content-Disposition: attachment; filename="'.basename($file).'"');
    		header('Expires: 0');
    		header('Cache-Control: must-revalidate');
    		header('Pragma: public');
    		header('Content-Length: ' . filesize($file));
     
    		//Clear system output buffer
    		flush();
     
    		//Read the size of the file
    		readfile($file);
     
    		//Terminate from the script
    		die();
    		}
    		else{
    		echo "File does not exist.";
    		}
    }
    else
    {
    	echo "Filename is not defined.";
    }
        exit;
     
    ?>
    Auriez-vous des pistes à me proposer d'explorer ?
    J'avoue que je sèche un peu.....

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    essayez de mettre uniquement ces entêtes, ils devrait être suffisants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		header('Content-Type: application/octet-stream');
    		header('Content-Length: ' . filesize($file));
    		header('Content-Disposition: attachment; filename="'.basename($file).'"');

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Cela peut être un blocage des navigateurs.

    Regarde les messages dans la console JavaScript (F12 sous Chrome).


    Points annexes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    //echo($_POST['fichier']);
    if(isset($_POST['fichier']))
    {
    $file ="dossierpdf/".$_POST['fichier'];
    ...
    readfile($file);
    Que se passe-t-il si $_POST['fichier'] vaut "../../../Users/mnssylvain/Documents/Mots de passe.txt" ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Check the file exists or not
    	if (file_exists($file)) {
    		echo("fichier existant");
    		header('Content-Description: File Transfer');
    Je suppose que le echo n'est pas présent en temps normal, non ? Autrement tes fichiers téléchargés seraient corrompus.


    Attention avec le "?>", si un retour à la ligne, ou n'importe quel autre caractère, venait à être inséré après le tag fermant PHP alors tes fichiers téléchargés seraient corrompus.
    Pour éviter ce risque mieux vaut ne pas utiliser "?>" dans un script PHP sans HTML ou sortie brute.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Hello

    Dans ton premier post, ligne 10, tu fais un echo, je te suggère de le retirer parce que cela pourrait être la source du problème.

    Tu fais un écho puis un readfile, à mon avis, cela doit être source de conflit.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 573
    Points : 258
    Points
    258
    Par défaut
    Punaise j'ai honte !

    Le echo était juste pour le debug bien sûr......
    C'est bien lui qui empêchait le bon fonctionnement..... et pourtant j'ai lu et relu en faisant bien attention à ça...... A partir d'un moment on ne voit plus rien quand on cherche trop!
    Alors un grand merci pour votre relecture avec un œil neuf ....

    Une petite question persiste quand même :
    Mais alors pourquoi ça fonctionnait avec l'adresse complète et pas avec le nom de domaine?

  6. #6
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Supposition : tu disais avoir un certificat SSL qui, obligatoirement, est lié au nom de domaine. Le protocole SSL ne doit pas trop aimé le mix entre texte (ton echo) et du binaire.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  7. #7
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 573
    Points : 258
    Points
    258
    Par défaut
    Ok merci pour cette explication !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2014, 11h36
  2. Réponses: 4
    Dernier message: 20/04/2011, 11h11
  3. Réponses: 4
    Dernier message: 30/06/2010, 21h32
  4. Réponses: 1
    Dernier message: 23/09/2009, 18h06
  5. Téléchargement de fichier dans un script PHP
    Par Mikke dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2008, 11h34

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