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 :

chemin vers fichiers/répertoire dans une classe


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut chemin vers fichiers/répertoire dans une classe
    Salut,

    Je rencontre encore un problème pour le moins bizarre, je suis abonné

    Dans une classe php5), je désire créé un fichier xml (mise en cahce), donc je me sers de file_put_contents() pour l'enregister, et là php m'indique que le chemin vers le répertoire est invalide.

    Donc, je fait un test avec is_dir et en effet, celui-ci me retourne false, incompréhension totale, je fait un test avec ce même is_dir dans la page où est instanciée ma classe, et là c'est ok, ça me retourne true....

    Je regarde les valeurs de $_SERVER de chaque côté(dans la classe, et hors de celle-ci), et rien d'anormal....

    J'exécute donc un cd, et là je vois le problème.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $a = `cd`;
    pre($a);

    Sur ma page courante, j'ai bien la racine du site D:\web, tandis qu'à l'intérieur de ma classe, j'ai le répertoire d'apache C:\Server\Apache\Apache2

    Je comprend pas du tout pourquoi j'obtiens ceci dans ma classe, et surtout comment je pourrais résoudre cet étrange phénomène

    A l'aide !!

    En espérant que quelqu'un pourra m'apporter une réponse.

    Merci d'avance.

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    J'ai trouvé comment résoudre le problème.

    En fait, le script de création de mon xml était dans une fonction en private que j'appelais dans mon destructeur.

    Et le blème était là.
    J'ai donc procédé autrement.

    Mais pourquoi le répertoire courant du site est ignoré dans un __destruct() ?
    Pourquoi les fonctions de fichiers se retrouve avec un chemin situé dans le répertoire d'apache au lieu de la racine du site définie dans le httpd.conf dans un __destruct() ?

    Merci de ne pas me laisser dans mon ignorance, car c'est quand même bizarre cette réaction.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Auriez-vous un code minimal pouvant reproduire ce problème ? C'est toujours intéressant de comprendre mais personnellement j'y verrais plus clair si je pouvais tester avec du code

    Vous ne changez jamais de répertoire (par exemple avec chdir, cd, ...) ? Aucune particularité à signaler au niveau de votre code comme de votre environnement ?

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Oui, voilà

    Non, je ne fait aucun appel

    Je viens de faire un test avec un truc tout simple. (sur windows)

    Code PHP : 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
    <?php
     
    class test
    {
        function __construct()
        {
            $this->testDIR('constructeur');
        }
     
        private function testDIR($x)
        {
            if( is_dir('./test/') )
            {
                echo 'répertoire test existant dans le ' . $x . '<br><br>';
            }
            else
            {
                echo 'répertoire test inexistant dans le ' . $x;
                $e = `cd`;
                echo '<br>On se trouve actuellement dans ' . $e . '<br><br>';
            }
        }
     
        function __destruct()    
        {
            $this->testDIR('destructeur');
        }
    }
     
    $test = new test();
     
    ?>

    Avec un répertoire test au même niveau d'arborescence que le script.

    Et en fait en l'état, c'est parfaitement correct, par contre si je n'appelle pas la fonction testDIR() dans mon constructeur, c'est là que ça ne fonctionne plus.

    C'est en faisant ce test que je m'en suis aperçu.

    Donc en laissant comme ceci, j'obtiens:
    répertoire test existant dans le constructeur

    répertoire test existant dans le destructeur
    Par contre, si j'enlève l'appel à la fonction testDIR() dans le constructeur, j'obtiens :
    répertoire test inexistant dans le destructeur
    On se trouve actuellement dans C:\Server\Apache\Apache2
    Etrange quand même.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par Xunil
    Etrange quand même.
    C'est certain. Visiblement ce comportement ne survient que lorsque PHP est utilisé en tant que module Apache et non en CGI (testé sous Windows XP Pro, PHP 5.2.1, Apache 1.3.36).

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Au moins, je suis rassuré, ça ne vient pas d'un problème spécifique à ma config

    J'avais oublié de préciser mes versions.
    apache 2.0.58 et php 5.2

    Merci d'avoir effectué le test.

Discussions similaires

  1. [PHP 5.3] Charger un fichier PHP dans une classe
    Par pierrot10 dans le forum Langage
    Réponses: 0
    Dernier message: 07/05/2010, 20h41
  2. [Framework] Injecter un fichier properties dans une classe de constante
    Par Slyders dans le forum Spring
    Réponses: 0
    Dernier message: 25/03/2010, 17h10
  3. Réponses: 1
    Dernier message: 22/03/2010, 15h40
  4. Réponses: 0
    Dernier message: 03/11/2008, 12h40

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