относительный путь в require_once не работает

У меня есть следующая структура

otsg > class > authentication.php > database.php > user.php > include > config.inc.php > encryption.php > include.php > session.php > index.php > registration.php 

Файл include.php имеет следующее

 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'; 

и на странице index.php я включил

 require_once 'include/include.php'; 

Когда я открываю страницу index.php, я получаю следующее предупреждение и фатальную ошибку. Я не понимаю, что вызывает эту ошибку. Когда я дал абсолютный путь, он работает. Но абсолютный путь – это не очень хорошая идея, я верю.

 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 

заранее спасибо

Solutions Collecting From Web of "относительный путь в require_once не работает"

использование

 __DIR__ 

чтобы получить текущий путь к скрипту, и это должно устранить вашу проблему.

Так:

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

Это предотвратит случаи, когда вы можете запускать скрипт PHP из другой папки, и поэтому пути родственников не будут работать.

Изменить: проблема с косой чертой исправлена

для версии php 5.2.17 __ DIR __ не будет работать, он будет работать только с php 5.3

Но для более старой версии php dirname ( __ FILE __ ) отлично

Например, напишите так:

require_once dirname ( __ FILE __ ). '/db_config.php';

В моем случае это не сработает, даже с getcwd() или getcwd() он продолжает выбирать неправильный путь, я решил, определив costant в каждом файле, который мне нужен, с абсолютным базовым путем проекта:

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

У меня есть MAMP с php 5.4.10, и моя иерархия папок базилярна:

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

….