我有以下结构
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
提前致谢
答案 0 :(得分:197)
使用
__DIR__
获取脚本的当前路径,这应该可以解决您的问题。
所以:
require_once(__DIR__.'/../class/user.php');
这可以防止您可以从其他文件夹运行PHP脚本,因此亲属路径不起作用。
编辑:修正了斜线问题
答案 1 :(得分:17)
for php version 5.2.17 __ DIR __ 无法正常运行它只适用于php 5.3
但是对于旧版本的php dirname( __ FILE __ )完全
例如,像这样写
require_once dirname( __ FILE __ )。 '/db_config.php';
答案 2 :(得分:1)
在我的情况下它不起作用,即使使用__DIR__
或getcwd()
它仍然选择错误的路径,我通过在每个文件中使用绝对基本路径定义一个costant来解决项目:
if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); }
require_once THISBASEPATH.'cache/crud.php';
/*every other require_once you need*/
我有php 5.4.10的MAMP,我的文件夹层次结构是基础的:
q.php
w.php
e.php
r.php
cache/a.php
cache/b.php
setting/a.php
setting/b.php
...
答案 3 :(得分:0)
我只是遇到了同样的问题,在这里一切正常,直到我在另一个include中包含一个include。
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')
解决方案1。(我的公共html文件夹名称的不正确的硬编码,但是有效):
require_once $_SERVER["DOCUMENT_ROOT"] . '/orders.simplystyles.com/script/pdocrud.php';
解决方案2。(上面关于DIR的不需要的注释仅自php 5.3起有效,但有效):
require_once __DIR__. '/../script/pdocrud.php';
解决方案3。(我看不到任何缺点,并且在我的php 5.3中效果很好):
require_once dirname(__FILE__). '/../script/pdocrud.php';