Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/04/2007, 16h42   #1
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
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 :
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.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 14h26   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
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.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 16h37   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 17h05   #4
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Oui, voilà

Non, je ne fait aucun appel

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

Code PHP :
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:
Citation:
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 :
Citation:
répertoire test inexistant dans le destructeur
On se trouve actuellement dans C:\Server\Apache\Apache2
Etrange quand même.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 00h32   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 10h14   #6
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
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.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h14.


 
 
 
 
Partenaires

Hébergement Web