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';
Quand j'ouvre la page index.php j'obtiens l'avertissement suivant et l'erreur fatale. 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
Utilisation
__DIR__
pour obtenir le chemin actuel du script et cela devrait résoudre votre problème.
Alors:
require_once(__DIR__.'/../class/user.php');
Cela évitera les cas où vous pouvez exécuter un script PHP) à partir d'un autre dossier et par conséquent les chemins relatifs ne fonctionneront pas.
Edit: problème de barre oblique corrigé
pour php version 5.2.17 __ [~ # ~] dir [~ # ~] __ ne fonctionnera pas il ne fera que fonctionne avec php 5.3
Mais pour les anciennes versions de php dirname (__ (= [~ # ~] fichier [~ # ~] __) parfaitement
Par exemple, écris comme ça
require_once dirname (__ [~ # ~] fichier [~ # ~] __). '/db_config.php';
Dans mon cas, cela ne fonctionne pas, même avec __DIR__
Ou getcwd()
, il continue de choisir le mauvais chemin. J'ai résolu ce problème en définissant un coûtant dans chaque fichier dont j'ai besoin avec le chemin de base absolu du fichier. 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
....
Je viens de rencontrer le même problème, où tout fonctionnait bien, jusqu'au point où j'avais un inclus dans un autre.
require_once '../script/pdocrud.php'; //This worked fine up until I had an includes within another includes, then I got this error:
Fatal error: require_once() [function.require]: Failed opening required '../script/pdocrud.php' (include_path='.:/opt/php52/lib/php')
Solution 1. (codage en dur indésirable de mon nom de dossier html public, mais cela fonctionne):
require_once $_SERVER["DOCUMENT_ROOT"] . '/orders.simplystyles.com/script/pdocrud.php';
Solution 2. (commentaire non désiré ci-dessus à propos de DIR ne fonctionnant que depuis php 5.3, mais cela fonctionne):
require_once __DIR__. '/../script/pdocrud.php';
Solution 3. (Je ne vois aucun inconvénient, et cela fonctionne parfaitement dans mon php 5.3):
require_once dirname(__FILE__). '/../script/pdocrud.php';