在URL中要求带变量的文件

时间:2013-04-27 20:44:26

标签: php

我正在使用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 =主页',则效果非常好。

4 个答案:

答案 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,当然):

  1. 您重写该文件中的代码以使用“普通”变量来决定它应该输出的内容 - $page。 (虽然这可能会导致变量范围出现问题,但如果在该文件的函数内部使用$_GET['page']。)

  2. 在执行包含的脚本中,在包含文件之前自己设置GET参数 - $_GET['page'] = 'homepage';。从句法角度来看,这在PHP中是完全合法的 - 从语义上讲,人们可能会看到不同的东西;如果在其他代码中进一步说明GET参数也被评估,那么它可能会导致问题,并且在该上下文中不期望值homepage

答案 2 :(得分:1)

require_once是一个本地包含,它不通过http请求,所以像查询字符串这样的东西将不起作用。

做类似的事情:

$page = 'homepage';
require 'footer.php'

$ page将可用于footer.php

编辑:像姜继子一样被打败

补充阅读:PHP Manual: Require Once

答案 3 :(得分:0)

您遇到此问题的原因是require_once会查找名为“footer.php?page = homepage”的文件,该文件在您的文件系统中不存在。 Romainberger的解决方案很好。