require_once中的相对path不起作用

我有以下结构

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我得到以下警告和致命的错误。 我不明白是什么原因导致这个错误。 当我给绝对path它的作品。 但绝对path不是我相信的一个好主意。

 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 

提前致谢

使用

 __DIR__ 

获取脚本的当前path,这应该解决您的问题。

所以:

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

这将防止您可以从不同的文件夹运行PHP脚本的情况,因此亲属path将不起作用。

编辑:斜杠问题修复

为PHP版本5.2.17 __ DIR __将无法正常工作,它只会在PHP 5.3中起作用

但是对于较老版本的php dirname( __ FILE __ )却完美无缺

比如写这样的

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

在我的情况下,它不工作,即使__DIR__getcwd()它不断挑选错误的path,我通过在项目的绝对基path的每个文件中定义一个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 

….