我正在使用require_once来调用一个脚本,该脚本将回显每个页面页脚的HTML。我让每个页面都通过$ _GET在PHP文件的URL中提交一个变量,但由于它没有看到一个带有完整URL(包括变量)名称的文件,因此无效。有什么工作吗?
错误:
Warning: require_once(footer/footer.php?page=homepage) [function.require-once]: failed to open stream: No such file or directory in /home/content/05/10838405/html/index.php on line 434
如果我删除'?page =主页',则效果非常好。
答案 0 :(得分:2)
只需使用变量
$page = 'homepage';
require_once 'footer/footer.php';
然后在我们的footer.php中,您可以使用$page
答案 1 :(得分:2)
GET参数是HTTP URL的一部分 - 但是服务器的本地文件系统会“说”HTTP。
因此footer/footer.php?page=homepage
字面意思是该名称的文件(不存在,字符?
和=
作为“非法”部分许多文件系统中的文件/目录名称。)
由于您要求一种解决方法 - 两种简单的可能性(在这两种情况下,只需要文件的实际名称,footer/footer.php
,当然):
您重写该文件中的代码以使用“普通”变量来决定它应该输出的内容 - $page
。 (虽然这可能会导致变量范围出现问题,但如果在该文件的函数内部使用$_GET['page']
。)
在执行包含的脚本中,在包含文件之前自己设置GET参数 - $_GET['page'] = 'homepage';
。从句法角度来看,这在PHP中是完全合法的 - 从语义上讲,人们可能会看到不同的东西;如果在其他代码中进一步说明GET参数也被评估,那么它可能会导致问题,并且在该上下文中不期望值homepage
。
答案 2 :(得分:1)
require_once是一个本地包含,它不通过http请求,所以像查询字符串这样的东西将不起作用。
做类似的事情:
$page = 'homepage';
require 'footer.php'
$ page将可用于footer.php
编辑:像姜继子一样被打败
答案 3 :(得分:0)
您遇到此问题的原因是require_once
会查找名为“footer.php?page = homepage”的文件,该文件在您的文件系统中不存在。 Romainberger的解决方案很好。