php包含有没有办法包含仅相对于该文档的文件?

2022-08-31 00:33:04

如果我有一个包含inc/footer的索引.php文件.php我会写:

include 'inc/footer.php';

如果我想在页脚.php中包含另一个文件,我必须相对于索引.php文件(包含它的文件)执行此操作。这可能不是问题,但是如果我想包含来自完全不同位置的索引.php呢?

我知道有几种方法可以实现这一目标,例如定义绝对路径或使用.dirname(__FILE__)

这从来都不是一个真正的问题,因为我总是以某种方式弄清楚,但我总是想知道php中究竟如何包含工作。

有人能解释一下引擎盖下发生了什么吗?


答案 1

这可能会有所帮助:(从 http://php.net/manual/en/function.include.php)

首先在相对于当前工作目录的每个include_path条目中查找要包含的文件,然后在当前脚本的目录中查找。例如,如果您include_path是库,当前工作目录是 /www/,您包含 include/a.php并且该文件中包含“b.php”,则 b.php 首先在 /www/libraries/ 中查找,然后在 /www/include/ 中查找。如果文件名以 ./ 或 .. 开头。/,则分别仅在当前工作目录或当前工作目录的父目录中查找

您的问题指出:

如果我想在页脚.php中包含另一个文件,我必须相对于索引.php文件(包含它的文件)执行此操作。

仅当您尝试以 或 开头的文件路径时,才存在这种情况。如果需要使用相对路径在当前文件上方包含文件,则可以(按照建议)使用:include()./../

include( dirname(__FILE__) . '/../file.php')

如果定义了绝对路径,则还可以将其添加到当前include_path:

set_include_path(get_include_path() . PATH_SEPARATOR . '/absolute/path');

然后,您可以执行相对于“/绝对/路径/”的所有包含。


答案 2

找到答案的最佳位置是在PHP手册中。

http://php.net/manual/en/function.include.php

简短的回答:路径是相对于正在执行的PHP脚本没有子包含的。

设置函数,类等文件夹的全局绝对路径是最好的方法。


推荐