Inclure un fichier depuis un dossier parent

Fonctionne pas pour moi :(

Le problème exposé dans ce sujet a été résolu.

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 !

+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…

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. :)

+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…).

+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.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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