chemin relatif dans require_once ne fonctionne pas
Je avoir 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
include.php fichier est le suivant
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 le index.php la page que j'avais compris
require_once 'include/include.php';
Quand j'ouvre la page index.php je reçois le message d'avertissement suivant et erreur fatale. Je ne comprends pas ce qui provoque cette erreur. Quand j'ai donné le chemin d'accès absolu, il 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
- Je suis généralement de faire en Objective-C et en essayant d'obtenir mes mains sur les scripts php et triste de voir que j'ai déjà perdu 2 heures pour trouver comment inclure correctement les fichiers en PHP. Les choses sont donc faciles avec X-code.
- On tombe souvent dans cette erreur, et à dépanner rapidement, suivez ces étapes : stackoverflow.com/a/36577021/2873507
Vous devez vous connecter pour publier un commentaire.
Utilisation
pour obtenir le chemin d'accès actuel du script et cela devrait résoudre votre problème.
Donc:
Cela permettra d'éviter les cas où vous pouvez exécuter un script PHP à partir d'un autre dossier et, par conséquent, les parents, les chemins ne fonctionnera pas.
Edit: slash problème fixe
__DIR__
est nouveau en PHP 5.3. Si vous avez besoin de ce script à exécuter sur des versions précédentes de PHP, vous devez utiliserdirname(__FILE__)
à la place.__DIR__
. Donc:require_once(__DIR__.'/../class/user.php');
Par la documentation, le slash est omis, à l'exception du répertoire racine.__DIR__
est nécessaire. Le PHP docs semblent dire que PHP va chercher le script courant est le répertoire par défaut. Quelqu'un peut jeter un peu de lumière?require "../a.php"
. Si ce fichier est importé à partir d'un autre fichier (x) dansdir1/dir2/x.php
le fichier inclus serontdir1/a.php
, mais si x est dansdir1/dir2/dir3/x.php
, le fichier inclus serontdir1/dir2/a.php
, etc. Ou je me trompe?pour php version 5.2.17 __DIR__ ne fonctionnera pas il ne fonctionne qu'avec php 5.3
Mais pour les anciennes version de php dirname(__FICHIER__) parfaitement
Par exemple écrire comme cela
Dans mon cas ça ne fonctionne pas, même avec
__DIR__
ougetcwd()
il garde la cueillette le mauvais chemin, je l'ai résolu en définissant un constant dans tous les fichiers dont j'ai besoin à l'absolu chemin de base du projet:J'ai MAMP avec php 5.4.10 et ma hiérarchie de dossiers est basilaire:
....