我有一个项目结构:
ProjectName/
src
test
TestClass.php
tests
TestTestClass.php
当我尝试将require_once '/ProjectName/src/test/TestClass.php';
导入 tests / TestTestClass.php 时,我从PHP收到一条错误,指出:没有这样的文件或目录。
我检查了拼写,我检查了一切。我不能给它完整的/home/userName/bla/bla
路径,因为我需要把它交给其他人。
有什么想法吗?
答案 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。