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 :

ce warning est incompréhensible


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut ce warning est incompréhensible
    Bonjour,

    je tente de forcer un téléchargement de fichier, mais ça se traduit par un warning incompréhensible.
    Le code appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($handle = opendir('../sauvegarder/essai')) {			
     
        while (false !== ($file = readdir($handle))) 
           if (($file!='.')&&($file!='..')) {
               echo '<a href="telecharger_vieilles.php?nom_file='.$file.'">'.$file."</a><br>";
     }}
    telecharger_vieilles.php :
    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
    <?php 
    $nom_file=$_GET['nom_file'];
    // code pour forcer un téléchargement
    $full_path = "essai/".$nom_file;
    $full_path="http://villarddelanspatinage.fr/maj/sauvegarder/".$full_path;
    $file_name=$full_path;
     
    ini_set('zlib.output_compression', 0);
    $date = gmdate(DATE_RFC1123);
     
    header('Pragma: public');
    header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
     
    header('Content-Tranfer-Encoding: none');
    header('Content-Length: '.filesize($full_path));
    header('Content-MD5: '.base64_encode(md5_file($full_path)));
    header('Content-Type: application/octetstream; name="'.$file_name.'"');
    header('Content-Disposition: attachment; filename="'.$file_name.'"');
     
    header('Date: '.$date);
    header('Expires: '.gmdate(DATE_RFC1123, time()+1));
    header('Last-Modified: '.gmdate(DATE_RFC1123, filemtime($full_path)));
     
    readfile($full_path);
    exit; // nécessaire pour être certain de ne pas envoyer de fichier corrompu
    ?>
    Le premier warning (il y en a une cascade) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: filesize() [function.filesize]: Stat failed for http://villarddelanspatinage.fr/maj/sauvegarder/essai/cadre72.gif (errno=2 - No such file or directory) in /homez.309/villardd/www/maj/vieillessauvegar/telecharger_vieilles.php on line 15
    (Alors que ce fichier existe)

    A votre avis, qu'est-ce qui cloche ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu peux pas faire un filesize sur une URL, ca marche qu'avec les fichiers locaux
    si tu veux recuperer la taille regarde du coté de get_headers

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Comme il s'agit d'un fichier local, j'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $local_file="../sauvegarder/essai/".$nom_file;
    ...
    header('Content-Length: '.filesize($local_file));
    Il n'y a plus de warning, mais au lieu de télécharger le fichier, il me propose de télécharger "telecharger_vieilles.php"...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Points : 70
    Points
    70
    Par défaut
    Le problème vient sans doute de ce que tu as mis dans

  5. #5
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Pourquoi ne pas appliquer l'une des deux méthodes présentées
    ici pour $full_path ?

    Edit : Ce n'est pas 'application/octetstream' mais application/octet-stream.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas appliquer l'une des deux méthodes présentées
    ici pour $full_path ?
    car je n'y avais pas pensé...Du coup, j'ai laissé tomber le $local_file et suis revenu en arrière. De plus, il y a un truc que je ne comprends pas : si à telecharger_vieilles.php, je passe juste $file :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="telecharger_vieilles(archives !!).php?nom_file='.$file.'">'.$file."</a><br>";
    , ça ne marche pas, alors que si je lui passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ch="../sauvegarder/essai/".$file;
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="telecharger_vieilles.php?nom_file='.$ch.'">'.$file."</a><br>";
    ça marche (tu comprends pourquoi ? Car passer seulement $file me paraîtrait plus logique).

    Ce n'est pas 'application/octetstream' mais application/octet-stream
    OK le puriste, mais même sans le tiret, ça marche.

    Et sinon, merci pour ta réponse, car je n'aurais pas trouvé sinon.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par laurentSc
    si je lui passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ch="../sauvegarder/essai/".$file;
    ça marche
    L'idéal est que le paramêtre nom_file de l'URL ne contienne pas de chemin. C'est au script de téléchargement "d'aller chercher" le fichier.

    Pour ce faire, on supprime l'éventuel chemin du fichier passé en paramêtre à l'aide de la fonction basename().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_name=basename($_GET['nom_file']);
    Ensuite, on défini le répertoire en fonction de la méthode choisie :

    1) Répertoire relatif au script de téléchargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $full_path=dirname(__FILE__).'../sauvegarder/essai/'.$file_name;
    2) À partir de la racine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $full_path = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/';
    $full_path.= 'maj/sauvegarder/essai/'.$file_name;

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/06/2008, 14h09
  2. [WARNING] message incompréhensible.
    Par storm_2000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 24/11/2006, 17h54
  3. Réponses: 16
    Dernier message: 29/05/2006, 17h52

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