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

PHP & Base de données Discussion :

Include php n'accepte que des antislash [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut Include php n'accepte que des antislash
    Bonjour

    J'ai une application en php qui marche très bien sous windows.
    Dans cette application les includes sont de la forme
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    include("../fonctions/nonfonction")

    Je veux déployer cette application sur un serveur sous mandriva mais les clients seront sous windows.
    Le problème les includes ne marche pas il faut que je les change comme ca

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    include("..\fonctions\nonfonction")

    ce qui matériellement pose problème. Et je ne sais même pas sil les clients vont fonctionner après changement.

    Merci
    Amicalement

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Tout d'abord les chemins sous Linux (interpréteur PHP ou pas) sont de la forme [...]/monfichier. Le serveur Apache sous Linux se fiche royalement des clients pour retrouver ses fichiers de fonction. Un client n’envoie qu'une requête HTTP et reçoit un résultat sous la forme de contenu (HTML, XML, etc), donc le chemin d'accès au fichiers de fonctions ce sont des traitements qui se passent uniquement au niveau serveur.

    Ensuite second problème : les \ sont interprétés comme caractères d'échappements, il faut donc écrire \\ mais là n'est pas le problème.

    De plus, même sous Windows, dans les versions récentes de PHP, l'arborescence Unix est correctement prise en compte de mémoire, mais à nouveau, là n'est pas le problème.

    Peut être faudrait-il plus détailler davantage ton problème

    Cordialement,
    Idriss

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Bonjour.
    Peut être faudrait-il plus détailler davantage ton problème

    Cordialement,
    Idriss
    Merci de la contribution.

    Pour être claire je croyait l'avoir été mais bon.

    Disons que j'ai un dossier fonction dans lequel j'ai plusieurs fichiers.

    Dans mon index.php (e dans d'autres fichier php) je fais appel à certains fichiers dans le dossier fonction. l'appel se fait comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include("fonctions/fichier.php")
    le problème sous mandriva le / doit être remplacer par un \ pour que mes pages s'affichent. c'est à dire que quand je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include("fonctions\fichier.php")
    le résultat est correct. Par contre si je laisse tel quel j'ai rien

    Voila le problème.
    Amicalement

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Donc en gros si je te suis sous Mandriva :

    - les \ ça fonctionne parfaitement
    - les / ça ne fonctionne pas

    On est bien d'accord ?

    Avec \ :

    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
    [idriss@hp-dv6:~]$ cat funcdir/functions.php 
    <?php
        function myHello(){
            echo "Hello world !";
        }
    ?>
    [idriss@hp-dv6:~]$ cat test1.php 
    #!/usr/bin/php
     
    <?php
        include ("funcdir\functions.php");
        myHello();
    ?>
    [idriss@hp-dv6:~]$ ./test1.php
     
    PHP Warning:  include(funcdir
                                 unctions.php): failed to open stream: No such file or directory in /home/idriss/test1.php on line 4
    PHP Stack trace:
    PHP   1. {main}() /home/idriss/test1.php:0
    PHP Warning:  include(): Failed opening 'funcdir
                                                    unctions.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/idriss/test1.php on line 4
    PHP Stack trace:
    PHP   1. {main}() /home/idriss/test1.php:0
    PHP Fatal error:  Call to undefined function myHello() in /home/idriss/test1.php on line 5
    PHP Stack trace:
    PHP   1. {main}() /home/idriss/test1.php:0
    [idriss@hp-dv6:~]$
    => le path n'est pas reconnus et \ est interprété comme caractère d'échappement comme je l'avais dit

    Avec / :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [idriss@hp-dv6:~]$ cat test2.php 
    #!/usr/bin/php
     
    <?php
        include ("funcdir/functions.php");
        myHello();
    ?>
    [idriss@hp-dv6:~]$ ./test2.php 
     
    Hello world !
    [idriss@hp-dv6:~]$
    => Oh miracle

    Mis à part ce "léger" soucis, je ne vois toujours pas le rapport avec les clients ...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Je suis devant un problème que je n'ai jamais rencontré auparavant.

    je sais que les includes php fonctionnent avec des slash et non des antislash.
    Je rappel que l'application php fonctionne parfaitement sous windows avec les includes de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include("fonctions/nomfichier.php")
    c'est quand j'ai voulu le déployer sous mandriva que je problème s'est manifesté.
    Et c'est dans les recherches de solutions que j'ai tester avec un antislash et j'ai eu des résultat correct.

    J'ai regardé dans le fichier php.ini mais j'ai rien trouvé de suspect.

    Est ce qu'il y a pas dans les fichiers de configuration de php ou d'apache quelque chose qu'il faut revoir.
    Amicalement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    As-tu des erreurs éventuelles dans les logs d'erreur du serveur apache?

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    salut

    Sur la page index, en mettant le include comme ca include("fonctions/loadfonction.php")

    j'ai cet erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /var/www/html/htsn/fonctions/loadpdo.php:3 
    Stack trace: #0 /var/www/html/htsn/fonctions/loadpdo.php(3): PDO->__construct('mysql:host=loca...', 'user', '') 
    #1 /var/www/html/htsn/index.php(2): include('/var/www/html/h...') 
    #2 {main} thrown in /var/www/html/htsn/fonctions/loadpdo.php on line 3
    dans loadpdo.php j'ai ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
            $dns = 'mysql:host=localhost;dbname=db';$utilisateur = 'user';$motdepasse = 'pass';
            $pdo = new PDO($dns, $utilisateur, $motdepasse);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     ?>
    si maintenant le met le include comme ca include("fonctions\loadfonction.php"), ma page s'affiche normalement.
    Amicalement

  8. #8
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Ah mais tout s'explique...

    Avec \ le include ne trouve pas le fichier et renvoie un warning. Ton level d'erreur n'est pas assez élevé pour afficher ou peut être loguer cette erreur (voir dans /var/log/apache2/error.log ou quelque chose dans le genre). En utilisant require() à la place d'include() je suis sûr que tu verrais l'erreur.

    Avec / ton fichier est bien retrouvé ... sauf qu'il te manque le driver PDO pour ton SGBD à installer sur ton serveur mandriva. L'erreur est très claire et aucun rapport avec un chemin inexistant

    Cordialement,
    Idriss

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Pour éviter l'usine à gaz au niveau des séparateurs des répertoires PHP propose la constante : DIRECTORY_SEPARATOR -

    Dans le cadre d'un développement tout POO, il est possible de tout ranger dans les espaces de nom (avec un autoloader adéquate) et là les inclusions seront toujours de la forme unique : use \nspc_root\nspc_sub\nscp...\Class.
    Le prix de la tranquilité : aimer les classes.

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    En fait c'est le pdo-myql qui n'était pas installé. Je croyait que cela se ferait automatiquement comme c'est le cas pour pdo-pgsql (postgres).

    La question que je me pose c'est pourquoi j'avais pas de message d'erreur claire que l'absence des extensions pdo de mysql lorsque je met dans les includes des caractères non autorisées?

    Pourquoi avec les \ dans les includes (donc incorrecte) j'ai pas d'erreur sur mes pages???
    Amicalement

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    J'ai déjà expliqué ça dans mon message précédant : ton level d'erreur est trop permissif et ne doit pas prendre en compte les warnings (c'est un warning que renvoit include* contrairement à la fonction require* qui renvoit une fatal error). Cela se configure dans ton php.ini (celui d'apache si tu exécute tes scripts via apache).

    Il n'en reste pas moins que ton code avec \ n'as pas le comportement souhaité ... tu ne pourrais pas faire de requête SQL avec ta variable PDO qui n'existerait pas. Un coup de debugger, de var_dump ou de print_r pourrait te le confirmer (il faut investiguer plus que ça, tu tire des conclusions beaucoup trop hâtives comme quand tu accuses l'OS ou ton include qui n'ont rien à voir avec l'erreur. Il ne faut jamais se fier au résultat apparant, c'est pour ça qu'on a des debuggers, des fonctions de debug comme var_dump, des tests unitaires, etc).

    @rawsrc : <troll>Le / fonctionne partout maintenant normalement (d'autant plus que je ne fait jamais de PHP pour une cible Windows et que je ne revient pas sur des versions PHP ante 5.3.5) </troll>

    Cordialement,
    Idriss

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

Discussions similaires

  1. [RegEx] regex n'acceptant que des additions ou soustractions ?
    Par metos00 dans le forum Langage
    Réponses: 6
    Dernier message: 22/05/2008, 17h45
  2. un wxtextCtrl qui accepte que des chiffres
    Par boubou00 dans le forum wxWidgets
    Réponses: 9
    Dernier message: 27/06/2007, 10h11
  3. Réponses: 1
    Dernier message: 18/04/2007, 13h39
  4. forcer un formulaire à n'accepter que des majuscules
    Par teen6517 dans le forum Langage
    Réponses: 6
    Dernier message: 30/03/2007, 09h14
  5. forcer un TextField à n'accepter que des chiffres
    Par intik dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/02/2007, 15h43

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