1

我需要在 php 中包含一个文件,所以我这样做

$web_proc = '../res/proc'; //variable read from config file I can't change
//in my file
include_once($web_proc . '/check_sprache.php');

和 PHP 输出:

警告:include_once(../res/proc/check_sprache.php):无法打开流:第 62 行的 /Users/user/Sites/site/res/pdf/rechnung.php 中没有此类文件或目录
警告:include_once( ): 在第 62 行的 /Users/user/Sites/site/res/pdf/rechnung.php 中打开 '../res/proc/check_sprache.php' 以包含 (include_path='.:') 失败

所以我改变了包含路径:

set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__DIR__) . DIRECTORY_SEPARATOR);

再试一次,但 PHP 输出:

警告:include_once(../res/proc/check_sprache.php):无法打开流:第 62 行的 /Users/user/Sites/site/res/pdf/rechnung.php 中没有此类文件或目录
警告:include_once( ): 在 /Users/user/Sites/site/res/ 中打开 '../res/proc/check_sprache.php' 以包含 (include_path='.::/Users/user/Sites/site/res/') 失败pdf/rechnung.php 在第 62 行

但如果我这样做

include_once(dirname(__DIR__). DIRECTORY_SEPARATOR . $pfadweb_proc . '/check_sprache.php');

有用。但这不是解决方案,因为包含的文件包含更多具有相对路径的文件,因此也找不到它们。

所以要么我误解了 PHP 包含路径,要么它只是在欺骗我。

有人可以帮忙吗?

4

1 回答 1

0

在第二个示例中,包含路径看起来很奇怪;尽管我怀疑这是问题所在,但您有两个PATH_SEPARATOR字符和一个尾随。DIRECTORY_SEPARATOR

试试这个

set_include_path(implode(PATH_SEPARATOR, [ // use array() if PHP < 5.4
    dirname(__DIR__), // this should be /Users/user/Sites/site/res
    get_include_path()
]));

include_once 'proc/check_sprache.php';

这会将/Users/user/Sites/site/resCWD ( /Users/user/Sites/site/res/pdf) 的父目录 ( ) 添加到您的包含路径中。

任何其他文件中的任何include语句都可以使用/Users/user/Sites/site/res.

于 2014-06-05T01:14:43.880 回答