require_once中的相对路径不起作用

use*_*146 98 php warnings require-once fatal-error

我有以下结构

otsg
 > class
   > authentication.php
   > database.php
   > user.php
 > include
   > config.inc.php
   > encryption.php
   > include.php
   > session.php
 > index.php
 > registration.php
Run Code Online (Sandbox Code Playgroud)

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';
Run Code Online (Sandbox Code Playgroud)

在我包含的index.php页面中

require_once 'include/include.php';
Run Code Online (Sandbox Code Playgroud)

当我打开页面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
Run Code Online (Sandbox Code Playgroud)

提前致谢

Rai*_*sen 207

使用

__DIR__
Run Code Online (Sandbox Code Playgroud)

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

所以:

require_once(__DIR__.'/../class/user.php');
Run Code Online (Sandbox Code Playgroud)

这将防止您可以从其他文件夹运行PHP脚本的情况,因此亲属路径将不起作用.

编辑:修正了斜线问题

  • 小心!`__DIR__`是PHP 5.3中的新功能.如果您需要在早期版本的PHP上运行此脚本,则应使用`dirname(__ FILE __)`. (42认同)
  • 请注意,您应该在`__DIR__`之后手动包含尾部斜杠.所以:`require_once(__ DIR __.'/ ../class/user.php');`根据[文档](http://php.net/manual/en/language.constants.predefined.php),尾随除根目录外,省略了斜杠. (26认同)
  • 感谢您的帮助,但我仍然不明白为什么`__DIR__`是必要的.PHP文档似乎表示PHP将默认搜索当前脚本的目录.任何人都能解释一下吗? (8认同)

Mob*_*ch. 17

对于PHP版本5.2.17 __ DIR __将无法正常工作它只适用于PHP 5.3

但对于旧版本的php dirname(__ FILE __)完美无缺

例如写这样的

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