Inclure un fichier depuis un dossier parent

Fonctionne pas pour moi :(

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir,
J'écris un petit script PHP. Pour ça, celui ci doit se rendre dans un dossier et importer un fichier de fonctions. Voici le code :

1
2
3
<?php
include '../bdd/functions.php';
echo "hey"; // Ne s'affiche pas :(

Voici la hiérarchie :

1
2
3
4
5
6
7
8
9
.
├── bdd
│   ├── bdd_connect.php
│   └── functions.php
├── controlers
│   ├── bangs.php
│   └── search.php
├── index.php
└── settings.php

Le fichier s'appelle bangs.php et il doit importer le fichier functions.php qui se trouve dans le dossier bdd. Je ne comprend pas pourquoi ça ne fonctionne pas (preuve que ça ne fonctionne pas, le hey ne s'affiche pas.. :( ).

Merci de votre aide !

Édité par Wizix

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+0 -0

Est-ce que le fichier "bang.php" est lui même inclu dans un fichier de la racine (index.php ou settings.php)? Si oui, met le lien par rapport à la racine (enfin, ce qui a l'air d'être la racine).

Sinon, pour parcourir un dossier il me semble que le dossier doit être exécutable (chmod +x dessus). Mais cela me paraitrait bizard que ça ne soit pas déjà le cas…

+0 -0
Auteur du sujet

Le tout est dans un dossier parent qui se trouve lui même à la racine. Le fichier bang.php est appelé grâce à un formulaire à la racine oui (dans index.php).

Un dossier exécutable ?

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+0 -0

Cette réponse a aidé l'auteur du sujet

Le fichier n'a pas besoin d'être exécutable, par contre le dossier et le fichier lui-même doivent avoir les droits de lecture pour tout le monde.

Solid

Nope, juste le process qui exécute php (soit en général l'utilisateur unix si on est en ligne de commande, ou bien l'user du serveur web (www-data, …) si on est dans un contexte web).

Sinon oui la solution est d'utiliser la constante magique __DIR__ comme l'a indiqué artragis. Un petit exemple pour montrer pourquoi....

3 fichiers :

1
2
3
4
5
6
.
├── foo.php
└── bar
    ├── fubar.php
    └── baz
        └── fubaz.php
1
2
3
4
5
<?php
// fichier foo
include 'bar/fubar.php';

// Lorsqu'on appelle ce script, on est déjà dans le dossier racine
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// fichier bar/fubar.php
include __DIR__ . '/baz/fubaz.php';

/* 
 * Puisque ce fichier est * inclus * par foo.php, on est dans 
 * le dossier de foo.php, soit le dossier racine ! Du coup, quand
 * on veut inclure quelque chose * par rapport * au dossier bar/,
 * il faut alors donner le chemin complet vers celui-ci... ce que 
 * fait la constante __DIR__
 */

Et le contenu du troisième, peu importe, je pense que vous avez saisi l'idée. :)

"Meh." Outil de diff PHP : Totem

+0 -0
Auteur du sujet

D'accord ! C'est vrai que c'est logique en faite ! Merci beaucoup, je retient cette petite constante magique __DIR__ ! Tout fonctionne maintenant ! Merci !

Édité par Wizix

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+0 -0

Hop,
juste pour faire un petit point, il me semble qu'il est nécessaire d'avoir des droits d’exécution sur les dossiers. D'expérience, je peux déjà dire que si je les enlève sur mon serveur, il ne m'est plus possible d'y accéder. Je viens de faire quelques recherches et il semblerait que ce soit nécessaire (mais je n'arrive toujours pas savoir pourquoi…).

Édité par SeeoX

+0 -0

@SeeoX : les droits d'exécution sont pour les fichiers. Pour les dossiers c'est plus un droit de traverse, pour agir sur son contenu.

viki53

Merci :) c'est ce qu'il me semblait. Mais je n'ai pas trouvé d'autres sources que des forums à ce propos, et ils restaient très vague sur le sujet.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte