PHP包含../失败打开

时间:2012-12-27 16:57:46

标签: php

我试图从父目录中包含一个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')in   第6行/var/phpscripts/email_parser/tests/_email-test.php

     

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

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目录并从require

中删除“../”时,它可以正常工作

2 个答案:

答案 0 :(得分:4)

该行

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

未使用完全限定的文件系统路径或PHP-URI方案。因此,其结果取决于PHP配置,通常是因为include directory configuration

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

你想要的东西也可以很容易地表达出来:

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

这可能就是你要找的东西。

答案 1 :(得分:1)

引自PHP CLI SAPI: Differences to other SAPIs

  

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

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

cd /var/phpscripts/email_parser/tests/ && ./_email-test.php