118 votes

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'ai ouvert 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

246voto

Raisen Points 1522

Utilisation

__DIR__

pour obtenir le chemin d'accès actuel du script et cela devrait résoudre votre problème.

Donc:

require_once(__DIR__.'/../class/user.php');

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 résolu

20voto

Mobile Tech. Points 422

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(__FILE__) parfaitement

Par exemple écrire comme ceci

require_once dirname(__FILE__) . '/db_config.php';

1voto

linuxatico Points 533

Dans mon cas ça ne fonctionne pas, même avec __DIR__ ou getcwd() 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:

if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); }
require_once THISBASEPATH.'cache/crud.php';
/*every other require_once you need*/

J'ai MAMP avec php 5.4.10 et ma hiérarchie de dossiers est basilaire:

q.php 
w.php 
e.php 
r.php 
cache/a.php 
cache/b.php 
setting/a.php 
setting/b.php

....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X