0

我正在使用 require_once 调用一个脚本,该脚本将为每个页面的页脚回显 HTML。我让每个页面在 URL 中提交一个变量,以便 PHP 文件通过 $_GET 检索,但是因为它没有看到具有完整 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=homepage' 它会完美运行。

4

4 回答 4

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在该上下文中不期望该值,它也可能导致问题。

于 2013-04-27T20:53:28.560 回答
2

只需使用一个变量

$page = 'homepage';
require_once 'footer/footer.php';

然后在我们的footer.php中你可以使用$page

于 2013-04-27T20:48:36.670 回答
1

require_once 是一个本地包含,它不是通过 http 请求进行的,因此查询字符串之类的东西将不起作用。

做类似的事情:

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

$page 将可用于 footer.php

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

附加阅读:PHP 手册:需要一次

于 2013-04-27T20:49:22.983 回答
0

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

于 2013-04-27T20:49:49.080 回答