require_once没有像我期望的那样工作

时间:2013-01-19 22:12:28

标签: php phpunit require-once

  

可能重复:
  relative path in require_once doesn’t work

我有一个项目结构:

ProjectName/
   src
     test
       TestClass.php
   tests
     TestTestClass.php

当我尝试将require_once '/ProjectName/src/test/TestClass.php';导入 tests / TestTestClass.php 时,我从PHP收到一条错误,指出:没有这样的文件或目录。

我检查了拼写,我检查了一切。我不能给它完整的/home/userName/bla/bla路径,因为我需要把它交给其他人。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

这是预期的行为。执行TestTestClass.php时,您的工作目录设置为ProjectName/tests

最好使用../src/test/TestClass.php

您的路径实际上是绝对的,因此您将直接从/开始工作,这不是您所期望的。如果您的include_path设置为服务器的目录根目录,那么您的代码将在没有第一个/的情况下运行。如果您不希望依赖include_path或任意调平(使用..),您始终可以在第一个文件中设置一个环境变量来定义应用程序根目录的完整路径,然后使用该变量对于所有包括。

例如,/ProjectName/index.php

define('APPPATH', __DIR__);

..并在/ProjectName/tests/TestTestClass.php

require_once APPPATH . '/src/test/TestClass.php';

答案 1 :(得分:1)

传递给require / include / require_once / include_once的绝对文件路径从文件系统根目录开始,而不是从webserver根目录

答案 2 :(得分:0)

使用特殊的 DIR 来获取脚本的当前路径,这样您就可以更轻松地找到脚本路径:

require_once(__DIR__ . '../folder/whatever.php');

答案 3 :(得分:0)

您可以为项目创建路径常量。使用__FILE__常量和dirname()

可以很容易地做到这一点
define('ROOT_PATH', dirname(__FILE__));

以上内容可以放在配置文件中,这样就可以更轻松地在整个项目中包含文件。

require_once ROOT_PATH . '/src/test/TestClass.php';

我还建议调查autoloader