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 :

Preuve que le readfile n'est pas exécuté ?


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 378
    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 378
    Points : 5 731
    Points
    5 731
    Billets dans le blog
    1
    Par défaut Preuve que le readfile n'est pas exécuté ?
    Bonsoir,

    j'ai un doute qui nécessite une confirmation ; je voudrais savoir si un readfile est bien exécuté ; comme à cet endroit l'affichage ne marche pas, j'effectue une trace dans une table MySQL. Je voudrais savoir si ce que j'ai fait est juste :
    code appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readfile("testreadfile.php");
    Contenu du readfile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php	
    $texte="ici testreadfile";
    $sql= "INSERT into `espion` (_sql) VALUES('".ES($texte)."')";
    $sql = stripslashes($sql);
    $result = mysql_query($sql) or die(mysql_error());
    ?>
    La connexion à la base MySQL est faite dans le code appelant, le nom "_sql" est historique et la fonction ES (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function ES($truc)
    {
    $truc=mysql_real_escape_string($truc);
    return $truc;
    }
    ) est incluse dans le code appelant. Si c'est bon, ça prouve que le readfile n'est pas exécuté, vu qu'il n'y a rien dans la table MySQL.
    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
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi
    à cet endroit l'affichage ne marche pas
    ?

    Si le but est juste de debuguer, tu peux utiliser die() c'est beaucoup plus simple, rapide à positionner et fiable.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    je voudrais savoir si un readfile est bien exécuté
    Ote moi d'un doute... tu essaye d'EXECUTER le contenu du fichier que tu met dans le readfile ?

    http://fr.php.net/Fr/readfile

    En aucun cas le readfile "execute" le contenu php du fichier :/

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 378
    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 378
    Points : 5 731
    Points
    5 731
    Billets dans le blog
    1
    Par défaut
    Pourquoi
    à cet endroit l'affichage ne marche pas
    ?

    Si le but est juste de debuguer, tu peux utiliser die() c'est beaucoup plus simple, rapide à positionner et fiable.
    Je ne saurais expliquer, c'est juste un constat. En fait, j'utilise un plugin jquery, dont l'une des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    upload_url: "upload-file.php"
    fait appel à un fichier PHP, mais quand celui-ci est appelé, l'affichage n'est pas possible (et ne sais pas pourquoi, mais par exemple, les echo ne donnent rien).
    Et sinon,comment utiliser die ?

    Ote moi d'un doute... tu essaye d'EXECUTER le contenu du fichier que tu met dans le readfile ?

    En aucun cas le readfile "execute" le contenu php du fichier :/
    Je corrige : je n'aurais pas dû dire "exécuter", mais "interpréter", mais à part ça, je ne vois pas de problème, car j'ai déjà utilisé readfile avec des fichiers contenant du code html et du js, et ça se passait bien...
    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

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Je corrige : je n'aurais pas dû dire "exécuter", mais "interpréter", mais à part ça, je ne vois pas de problème, car j'ai déjà utilisé readfile avec des fichiers contenant du code html et du js, et ça se passait bien...
    Ben si tu lis la description de readfile tu t'apercois qu'il ne parle nulle part d'"interprétation" du code PHP a l'intérieur.

    C'est normal que ca marche avec de l'html et du JS, l'html et le JS sont envoyé directement au navigateur - qui les interprètent.

    Le code PHP, lui, a besoin d'être interprété par le SERVEUR php, tu ne peux pas te contenter de l'afficher. Donc readfile ne doit pas être utilisé ici.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 378
    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 378
    Points : 5 731
    Points
    5 731
    Billets dans le blog
    1
    Par défaut
    Bon d'accord, mais si je mets ds le readfile une page html qui contient une iframe qui elle, pointe sur le fichier PHP (grosse bidouille), cela pourrait-il marcher ?
    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 expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Oui, le code va être executé mais tu ne pourras pas récupérer le retour car il s'executera dans une 2eme requete HTTP.

    Je pense qu'il faudrait déjà que tu comprennes comment fonctionne PHP :

    Tu as un client avec un navigateur Web
    Il envoi une requete HTTP (qui contient l'URL = L'adresse)
    Le serveur Web (en général Apache) récupère la requête HTTP
    Le serveur Web retrouve le fichier demandé par l'utilisateur dans la requête
    Le serveur Web détermine que le fichier doit être parsé par PHP avant d'être renvoyé (il se base sur l'extension et les Mime-type configurés dans le serveur)
    Le serveur Web envoi le fichier a PHP
    PHP s'exécute et renvoi du code HTML/JS ou autre au serveur Web
    Le serveur Web renvoi le code HTML/JS au navigateur
    Le navigateur recoit le code HTML/JS
    Le navigateur interprète et exécute le code HTML/JS de la page sur le poste client.

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 378
    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 378
    Points : 5 731
    Points
    5 731
    Billets dans le blog
    1
    Par défaut
    Je croyais avoir posé une question pour remplacer le readfile par un include, mais je vois qu'elle n'y est pas. Cela dit, j'ai fait l'essai (c'est mieux d'avoir le code à un seul endroit pour des raisons de maintenance). Donc, avec un include_once, tout va bien.
    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

  9. #9
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    c'est en effet une bien meilleure solution ;o)
    Attention au include_once. Tu n'incluera ton fichier qu'une seule fois dans tout ton script, il n'est pas évident que ce soit ce que tu veux (ton fichier ne contient pas de déclaration de fonction, de constantes ou tout autre élément "unique")

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 378
    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 378
    Points : 5 731
    Points
    5 731
    Billets dans le blog
    1
    Par défaut
    c'est en effet une bien meilleure solution ;o)
    Attention au include_once. Tu n'incluera ton fichier qu'une seule fois dans tout ton script, il n'est pas évident que ce soit ce que tu veux
    Il se trouve qu'ici, si (sinon include tout court, je crois)

    Que veux-tu dire par ça :
    (ton fichier ne contient pas de déclaration de fonction, de constantes ou tout autre élément "unique")
    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

  11. #11
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    include sert a inclure un fichier
    include_once sert a inclure UNE SEULE FOIS un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    include_once('A.php');
    ...
    include_once('A.php'); // Ne sera JAMAIS executé
    ...
    ?>
    En général on utilise include_once uniquement lorsque le fichier a include contient des déclarations de fonctions par exemple, parce que si tu l'inclus 2 fois tu auras une erreur (function already defined)

    Là dans ton cas tu utilise le fichier inclus comme un "vérificateur", donc le include serait plus approprié je pense

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 378
    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 378
    Points : 5 731
    Points
    5 731
    Billets dans le blog
    1
    Par défaut
    Merci pour l'explication ; tu as raison ; mon fichier ne contient pas de déclaration ; il appelle des fonctions ; il se trouve qu'il ne doit être appelé qu'une seule fois (envoi d'un mail) ; mais l'emploi de include_once ne se justifie pas ici.
    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

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2008, 13h22
  2. Réponses: 2
    Dernier message: 01/11/2006, 22h36
  3. Réponses: 10
    Dernier message: 31/08/2006, 14h57
  4. Tester que le fichier n'est pas un fichier binaire
    Par fedfil dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 21/10/2005, 17h29
  5. [VB.NET]Lancement d'un programme que s'il n'est pas lancé
    Par cyrcroix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2005, 14h05

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