我有一个文件
workers / activity / bulk_action.php,其中包含一个文件
include('../../classes/aclass.php');
在aclass.php里面它确实:
include ('../tcpdf/config/lang/eng.php');
似乎第二个文件中的include使用的是第一个文件工作目录而不是相对于自身,导致错误。这是如何工作的?
答案 0 :(得分:11)
您可以使用第二个include
进行调整:
include (__DIR__.'/../tcpdf/config/lang/eng.php');
魔术常量__DIR__
指的是当前的.php文件,通过在此之后附加相对路径,将导致正确的位置。
但它仅适用于PHP5.3,如果您需要兼容旧设置,则必须使用dirname(__FILE__)
构造。
答案 1 :(得分:1)
通过为include_path
设置适当的值然后使用相对于此目录的路径,您会更好。
set_include_path(
get_include_path() .
PATH_SEPARATOR .
realpath(__DIR__ . '/your/lib')
);
include 'tcpdf/config/lang/eng.php';
include 'classes/aclass.php';
我还建议您查看自动加载。这将使文件包含过时。
答案 2 :(得分:0)
根据给定的文件路径包含文件,如果没有给出,则指定include_path。如果在include_path中找不到该文件,include()最终将在调用脚本自己的目录和当前工作目录中检查失败。
您可以使用dirname(__FILE__)
获取当前执行脚本所在目录的路径:
include(dirname(dirname(__FILE__)) . '/tcpdf/config/lang/eng.php');
(自PHP 5.3起,您可以使用__DIR__
)
或者,在第一个文件中定义一个指向根目录的常量,并在包含中使用它。