【问题标题】:Using a query-string in require_once in PHP在 PHP 的 require_once 中使用查询字符串
【发布时间】:2011-05-28 00:23:37
【问题描述】:

在我的一个页面上,我有一个require_once('../path/to/url/page.php');,它可以正常工作。在我添加查询字符串require_once('../path/to/url/page.php?var=test'); 的那一刻,它将不再包含该文件。它只是空白。有人知道为什么吗?不能在 require 中使用查询字符串吗?

谢谢, 瑞恩

【问题讨论】:

  • 我可以回答“它只是空白”的问题。通常require() 会为不存在的文件触发错误(因为该参数不被视为“URL”,而是作为原始文件名)。看来您的 error_reporting()完全禁用。如果您精通,关闭通知是可以的,但您绝对应该让 E_ERRORs 保持开启(开发环境)。
  • @mario 你是正确的,error_reporting() 已关闭,我只是没有意识到。谢谢!

标签: php query-string require


【解决方案1】:

通过使用require_once('../path/to/url/page.php?var=test');,php不会向page.php发出新的请求,它实际上会搜索名为page.php?var=test的文件并包含它,因为在unix中,你可以有这样的文件名。如果您想将变量传递给该脚本,只需定义它:$var="test" 即可在该脚本中使用。

【讨论】:

  • 或者定义$_GET['var'] = 'test';
  • 这个没必要,其实这样会麻烦的。
  • @Rudie:我第二个 s3v3n,绝对不要这样做。
  • "php 不会向 page.php 发出新请求,它实际上会搜索名为 page.php?var=test 的文件"——这很有意义并解释了包含失败的事实.谢谢!
  • 你能详细说明为什么$_GET['var'] = 'test';会带来麻烦吗?我的问题是 $_GET... 有效,但 $var="test" 无效。
【解决方案2】:

require 加载要包含的文件(从文件路径)。它不通过 apache(或其他网络服务器)请求该文件,因此您不能以这种方式传递查询字符串。

如果需要将数据传递到文件中,可以简单地定义一个标准的php变量。

例子

<?php $a_variable = "data"; require_once('../path/to/url/page.php'); ?>

注意,变量必须在调用include/require之前设置,否则将不可用。

【讨论】:

    【解决方案3】:

    所有答案都是正确的。但最重要的是:由于$_GET 是一个全局变量,它也存在于所有包含的文件中,因此通过包含传递这些参数绝对没有用。

    【讨论】:

    • 也没有必要将该变量推送到 $_GET 中。你可以简单地定义它。
    【解决方案4】:

    require 只接受添加任何请求的路径,因为它不会发出任何请求 它简单地将所需的代码包含到当前代码中

    【讨论】:

    • 你在说什么?他根本没有使用 $_GET。
    • 好吧,我假设他在 page.php 代码中,如果我会在需要将该代码放在 url var=somethingelse 末尾的页面中,它会改变页面的行为.php 页面
    • require 不会发出新请求,因此它不会触及任何 $_GET。它只包含该代码,例如本地 fopen()。没有请求,没有 GET,没有 POST。
    • 这就是我的意思,它只包含代码,如果设置任何 get 变量将毫无意义,即使它有可能被用户覆盖,因为它很简单包含代码当前的
    • 如果我在描述我的意思时含糊其辞,我很抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多