php set_include_path让我发疯

时间:2014-06-05 01:08:43

标签: php include-path set-include-path

我需要在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):无法打开   stream:没有这样的文件或目录   /Users/user/Sites/site/res/pdf/rechnung.php第62行   警告:   include_once():无法打开'../res/proc/check_sprache.php'   包含(include_path =':')in   第62行/Users/user/Sites/site/res/pdf/rechnung.php

所以我改变了包含路径:

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

再试一次,但PHP输出:

  

警告:include_once(../ res / proc / check_sprache.php):无法打开   stream:没有这样的文件或目录   /Users/user/Sites/site/res/pdf/rechnung.php第62行   警告:   include_once():无法打开'../res/proc/check_sprache.php'   包含(include_path ='。:: / Users / user / Sites / site / res /')   第62行/Users/user/Sites/site/res/pdf/rechnung.php

但如果我这样做

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

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

所以要么我误解了PHP包含路径,要么只是拖着我。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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';

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

任何其他文件中的任何include语句都可以使用/Users/user/Sites/site/res的相对路径。