115

我有以下结构

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

提前致谢

4

4 回答 4

238

利用

__DIR__

获取脚本的当前路径,这应该可以解决您的问题。

所以:

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

这将防止您可以从不同的文件夹运行 PHP 脚本,从而导致亲属路径不起作用的情况。

编辑:斜线问题已修复

于 2011-03-20T22:09:09.113 回答
18

对于 php 版本 5.2.17__DIR__将不起作用,它只适用于 php 5.3

但是对于旧版本的php来说 dirname(__FILE__)完美

例如这样写

require_once dirname(__FILE__) . '/db_config.php';
于 2012-10-03T05:39:16.837 回答
1

在我的情况下,它不起作用,即使使用__DIR__getcwd()它一直选择错误的路径,我通过在我需要的每个文件中使用项目的绝对基本路径定义一个成本来解决:

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

……

于 2013-12-09T10:45:05.287 回答
0

我刚刚遇到了同样的问题,一切正常,直到我在另一个包含中包含一个包含。

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';
于 2019-08-06T15:38:27.643 回答