1

当我尝试使用requireorrequire_once时,如果需要的文件在同一个子目录中,它会正常工作,但是当它在其子目录之外看到一个文件时,它会产生一个致命错误。这基本上是文件树的样子:

* main.php
+ login/
   * login.php
+ includes/
   * session.php

...所以基本上,如果我要让 main.php 需要 login/login.php,那很好,但是如果我尝试对 login.php 进行目录遍历以要求 include/session.php,它会失败,导致错误:

PHP 致命错误:require_once():打开失败需要 [...]

这个概念的代码是:

require('login/login.php') #works fine (main.php)
require('../includes/session.php') #quits (login.php)

我试过使用$_SERVER('DOCUMENT_ROOT'), $_SERVER('SERVER_ADDR'),dir(_FILE_)chdir(../). 我记得几个月前我在一个项目上解决了这个问题,它是一个遍历文件路径的简单函数,但我再也找不到它了。有任何想法吗?

4

2 回答 2

3

使用set_include_path(),它会让你的生活更轻松。

于 2010-10-31T04:50:24.637 回答
1

这不是递归,它只是简单的旧目录遍历。

切勿将相对路径用于包含/要求。你永远不知道你的脚本是从哪个目录调用的,所以你总是有可能在错误的工作目录中。这只是头痛的秘诀。

ALWAYS 用于dirname(__FILE__)获取当前文件所在目录的绝对路径。如果您使用的是 PHP 5.3,则只需执行__DIR__. (注意前后两个下划线。)

require dirname(__FILE__).'/../includes/session.php';

(顺便说一句,你不需要在 include/require 周围加上括号,因为它是一种语言结构,而不是一个函数。)

使用绝对路径也可能有更好的性能,因为 PHP 不需要查看include_path. (但这仅适用于您的 . 中有多个目录的情况include_path。)

于 2010-10-31T04:55:52.003 回答