Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/10/2012, 15h58   #1
DMboup
Membre Expert
 
Inscription : juin 2003
Messages : 1 217
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 217
Points : 1 447
Points : 1 447
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 :
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 :
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
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2012, 16h41   #2
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 795
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 795
Points : 12 157
Points : 12 157
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2012, 18h27   #3
DMboup
Membre Expert
 
Inscription : juin 2003
Messages : 1 217
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 217
Points : 1 447
Points : 1 447
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 :
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 :
include("fonctions\fichier.php")
le résultat est correct. Par contre si je laisse tel quel j'ai rien

Voila le problème.
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2012, 18h42   #4
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 795
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 795
Points : 12 157
Points : 12 157
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 :
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 :
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 ...
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2012, 22h00   #5
DMboup
Membre Expert
 
Inscription : juin 2003
Messages : 1 217
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 217
Points : 1 447
Points : 1 447
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 :
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
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 15h12   #6
Mygale1978
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 882
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 34
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 882
Points : 5 412
Points : 5 412
Salut,

As-tu des erreurs éventuelles dans les logs d'erreur du serveur apache?
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 15h27   #7
DMboup
Membre Expert
 
Inscription : juin 2003
Messages : 1 217
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 217
Points : 1 447
Points : 1 447
salut

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

j'ai cet erreur
Code :
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 :
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
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 15h42   #8
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 795
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 795
Points : 12 157
Points : 12 157
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 16h03   #9
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 601
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 601
Points : 6 125
Points : 6 125
Envoyer un message via Skype™ à rawsrc
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2012, 18h09   #10
DMboup
Membre Expert
 
Inscription : juin 2003
Messages : 1 217
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 217
Points : 1 447
Points : 1 447
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
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2012, 21h03   #11
ok.Idriss
Responsable Modération

 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 3 795
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 3 795
Points : 12 157
Points : 12 157
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h42.


 
 
 
 
Partenaires

Hébergement Web