1

我试图从父目录中包含一个 php 文件,但出现错误:

admin@webby:~$ /usr/bin/php /var/phpscripts/email_parser/tests/_email-test.php PHP 致命错误:require_once(): 无法打开所需的 '../PlancakeEmailParser.php' (include_path='. :/usr/share/php:/usr/share/pear') 在第 6 行的 /var/phpscripts/email_parser/tests/_email-test.php

致命错误:require_once():在 /var/phpscripts/email_parser/tests/_email 中打开所需的 '../PlancakeEmailParser.php' (include_path='.:/usr/share/php:/usr/share/pear') 失败-test.php 在第 6 行

PHP 文件

#!/usr/bin/php
<?php
error_reporting(E_ALL ^ E_NOTICE ^E_WARNING);
ini_set("display_errors" , 1);

require_once("../PlancakeEmailParser.php");

// etc

?>

文件夹结构

admin@webby:/var/phpscripts/email_parser$ find .
.
./composer.json
./README.txt
./LICENSE.txt
./PlancakeEmailParser.php
./tests
./tests/_email-test.php

为了进行测试,当我PlancakeEmailParser.php进入tests目录并从要求中删除“../”时它工作正常

4

2 回答 2

5

线

require_once("../PlancakeEmailParser.php");

未使用完全限定的文件系统路径或 PHP-URI 方案。因此其结果取决于 PHP 配置,最常见的原因是包含目录配置

PHP CLI 可以使用与您的网络服务器不同的配置文件- 或者 -工作目录与您的网络服务器不同(可能后者在您的特定场景中扮演更多角色)。

你想要的也可以很容易地完全限定:

require_once(__DIR__ . "/../PlancakeEmailParser.php");

这可能是您正在寻找的。

于 2012-12-27T17:01:24.330 回答
1

引用PHP CLI SAPI:与其他 SAPI 的差异

它不会将工作目录更改为脚本的工作目录。(保留 -C 和 --no-chdir 开关以保持兼容性)

为了保持脚本中的相对路径按原样工作,请将目录更改为脚本所在的位置,然后执行脚本:

cd /var/phpscripts/email_parser/tests/ && ./_email-test.php
于 2012-12-28T11:44:10.133 回答