J'ai la structure suivante
otsg
> class
> authentication.php
> database.php
> user.php
> include
> config.inc.php
> encryption.php
> include.php
> session.php
> index.php
> registration.php
Le fichier include.php contient les éléments suivants
ini_set('display_errors', 1);
error_reporting(E_ALL);
ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:');
require_once 'config.inc.php';
require_once '../class/database.php';
require_once '../class/user.php';
require_once 'encryption.php';
require_once 'session.php';
require_once '../class/authentication.php';
et dans la page index.php j'avais inclus
require_once 'include/include.php';
Lorsque j'ouvre la page index.php, j'obtiens l'avertissement et l'erreur fatale suivants. Je ne comprends pas ce qui cause cette erreur. Quand j'ai donné le chemin absolu, cela fonctionne. Mais le chemin absolu n'est pas une bonne idée, je crois.
Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9
Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9
Merci d'avance
php
warnings
fatal-error
require-once
user525146
la source
la source
Réponses:
Utilisation
pour obtenir le chemin actuel du script et cela devrait résoudre votre problème.
Alors:
Cela évitera les cas où vous pouvez exécuter un script PHP à partir d'un dossier différent et par conséquent, les chemins relatifs ne fonctionneront pas.
Edit: problème de slash corrigé
la source
__DIR__
est nouveau dans PHP 5.3. Si vous avez besoin de ce script pour s'exécuter sur des versions antérieures de PHP, vous devez utiliser à ladirname(__FILE__)
place.__DIR__
. Donc:require_once(__DIR__.'/../class/user.php');
selon la documentation , la barre oblique de fin est omise sauf pour le répertoire racine.__DIR__
est nécessaire. La documentation PHP semble indiquer que PHP recherchera par défaut le répertoire du script actuel. Quelqu'un peut-il nous éclairer?require "../a.php"
. Si ce fichier est importé d'un autre fichier (x) dansdir1/dir2/x.php
le fichier inclus seradir1/a.php
, mais si x est dansdir1/dir2/dir3/x.php
, le fichier inclus seradir1/dir2/a.php
, etc. Ou est-ce que je me trompe?pour php version 5.2.17
__DIR__
ne fonctionnera pas, il ne fonctionnera qu'avec php 5.3Mais pour les anciennes versions de php
dirname(__FILE__)
parfaitementPar exemple, écrivez comme ceci
la source
Dans mon cas, cela ne fonctionne pas, même avec
__DIR__
ougetcwd()
il continue de choisir le mauvais chemin, j'ai résolu en définissant un costant dans chaque fichier dont j'ai besoin avec le chemin de base absolu du projet:J'ai MAMP avec php 5.4.10 et ma hiérarchie de dossiers est basique:
....
la source
Je viens de tomber sur ce même problème, où tout fonctionnait bien, jusqu'au point où j'ai eu un inclut dans un autre inclut.
Solution 1. (codage en dur indésirable du nom de mon dossier html public, mais cela fonctionne):
Solution 2. (commentaire indésirable ci-dessus à propos de DIR ne fonctionne que depuis php 5.3, mais cela fonctionne):
Solution 3. (je ne vois aucun inconvénient, et cela fonctionne parfaitement dans mon php 5.3):
la source