2

可能重复:
require_once 中的相对路径不起作用

我有一个这样的项目结构:

ProjectName/
   src
     test
       TestClass.php
   tests
     TestTestClass.php

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

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

有任何想法吗?

4

4 回答 4

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';
于 2013-01-19T22:15:23.873 回答
1

传递给 require/include/require_once/include_once 的绝对文件路径都从文件系统根目录工作,而不是网络服务器根目录

于 2013-01-19T22:15:22.847 回答
0

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

require_once(__DIR__ . '../folder/whatever.php');
于 2013-01-19T22:16:22.920 回答
0

您将从为您的项目创建路径常量中受益。__FILE__用常数 和很容易做到这一点dirname()

define('ROOT_PATH', dirname(__FILE__));

以上内容可以放在配置文件中,以便在整个项目中包含文件更容易。

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

我还建议研究autoloader

于 2013-01-19T22:16:39.407 回答