【问题标题】:$_SERVER['REQUEST_METHOD'] does not exist$_SERVER['REQUEST_METHOD'] 不存在
【发布时间】:2012-09-27 02:09:47
【问题描述】:

我刚刚安装了 WAMP,我可以访问 localhost 并获取 phpinfo() 输出。

但是,虽然我可以看到 _SERVER['REQUEST_METHOD'] 设置为 GET,但我正在尝试使用以下 PHP:

if ($_SERVER["REQUEST_METHOD"]=="POST") {
  ...

但它会产生这个错误:

PHP 通知:未定义索引:C:\ ... \test.php 中第 40 行的 REQUEST_METHOD

使用 Komodo 在第 40 行停止并检查 $_SERVER - 数组中根本没有“REQUEST_METHOD” - 甚至没有 GET。

有人有什么想法吗?我必须启用 POST、REQUEST_METHOD 吗?

为什么我可以在 phpinfo 中看到 REQUEST_METHOD=GET 而在 PHP 脚本中却看不到。

我也试过这个:

<?php
ob_start();
phpinfo();
$info = ob_get_contents();
ob_end_clean();
?>

我生成了一些 phpinfo(在浏览器中使用 localhost/?phpinfo=1 查看),但不是全部。为什么不呢?

【问题讨论】:

    标签: php phpinfo


    【解决方案1】:

    大多数 $_SERVER 指令由 Web 服务器设置。如果您使用的是 WAMP,那将是 Apache。您可以检查您的 apache 配置以找出未设置此值的原因。

    最好在尝试使用值之前测试它们是否存在。

    $value = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : null;
    

    您甚至可以使用getenv() 方法来缩短它。

    $value = getenv('REQUEST_METHOD');
    

    也不需要这样做

    <?php
    ob_start();
    phpinfo();
    $info = ob_get_contents();
    ob_end_clean();
    ?>
    

    这是您在空白 PHP 文件中所需要的全部内容。

    <?php phpinfo();
    

    我会这样写你的例子:

    $request_method = strtoupper(getenv('REQUEST_METHOD'));
    $http_methods = array('GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS');
    
    if( ! in_array($request_method, $http_methods)
    {
        die('invalid request');
    }
    

    【讨论】:

    • 虽然我从未见过 Apache 不将此值发送给 PHP。
    • 可能是从命令行调用 PHP(例如,cron 作业或直接调用 php script.php)。在这些情况下,不会设置 $_SERVER['REQUEST_METHOD']
    • 是的,这是真的(这些天我主要是这么称呼 PHP 的)。但是,他提到使用 WAMP,这就是为什么我坚持使用基于 Web 服务器的答案。
    【解决方案2】:

    就我而言,我在 php.ini 文件中将 variables_orderE 更改为 GPCS

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多