php包括不适用于现有文件

时间:2015-09-27 00:22:05

标签: php include

我最近更改了自制框架,将模板文件存储在主题文件夹中,而不是通用模板文件夹中。问题是我已经这样做了,由于某种原因我的include()指向正确的文件,但不起作用。但是,由于某种原因,主题模板include()起作用。

我收到这些错误:

Warning: require(lib/themes/original/templates/en/home/index.php): failed to open stream: No such file or directory in /home/stretch045/public_html/lib/theme/original/templateen.php on line 27

Warning: require(lib/themes/original/templates/en/home/index.php): failed to open stream: No such file or directory in /home/stretch045/public_html/lib/theme/original/templateen.php on line 27

Fatal error: require(): Failed opening required 'lib/themes/original/templates/en/home/index.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/stretch045/public_html/lib/theme/original/templateen.php on line 27

我相信最后一个可能会解释它,但我不明白括号中的内容应该是什么意思,因为它不是我在共享服务器上的路径。

如果有必要,我会提供代码,但由于路径正确,我不知道这可能是什么问题。

2 个答案:

答案 0 :(得分:1)

我认为问题在于您尝试将themes文件夹中的文件包含在theme中,至少是我从错误中理解的内容:

Warning: require(lib/themes/original/templates/en/home/index.php): failed to open stream: No such file or directory in /home/stretch045/public_html/lib/theme/original/templateen.php on line 27

这里显然是文件' / home / stretch045 / public_html / lib / 主题 /original/templateen.php'尝试包含文件' lib / 主题 /original/templates/en/home/index.php'。

如果您的框架的入口点为/home/stretch045/public_html/index.php,那么您使用相对路径这一事实不应该成为问题,因为include()的文档适用于require()方法因此,它知道检查文件是否相对于当前工作目录存在,也相对于调用脚本自己的目录

答案 1 :(得分:0)

它不起作用,因为找不到该文件。

您在require语句中使用了相对路径。如果包含的文件包含使用相对路径的其他文件(因为PHP使用相对于正在执行的脚本的路径而不是包含include / require语句的文件),这尤其成问题。

PHP尝试使用include_path找到相对引用的文件,即.相对于执行的文件以及/ usr / lib / php和/ usr / local / lib / php (即/usr/lib/php/lib/themes/original/templates/en/home/index.php和/usr/local/lib/php/lib/themes/original/templates/en/home/index.php )。这些都不存在。

因此,使用正确的相对路径(例如,始终使用require(__DIR__.'/PATH');始终基于当前脚本路径)或在require语句中使用绝对路径或将基路径添加到include_path({{ 1}}是路径分隔符。)