我如何要求其他目录分支中的文件?

时间:2010-10-31 04:45:03

标签: php recursion require require-once

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

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

...所以基本上,如果我要main.php需要login / login.php,那很好,但如果我尝试对login.php进行目录遍历,要求包含/ 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(../)。我记得几个月前在一个项目上工作,我解决了这个问题,它是一个遍历文件路径的简单函数,但我再也找不到它了。有任何想法吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

这不是递归,它只是普通的旧目录遍历。

永远不要使用include / require的相对路径。你永远不知道你的脚本被调用到哪个目录,所以你总是有可能在错误的工作目录中。这只是头疼的一个秘诀。

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

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

(顺便说一句,你不需要围绕include / require的括号,因为它是一种语言结构,而不是一种功能。)

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

相关问题