$ _SERVER ['REQUEST_METHOD']不存在

use*_*261 2 php phpinfo

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

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

if ($_SERVER["REQUEST_METHOD"]=="POST") {
  ...
Run Code Online (Sandbox Code Playgroud)

但它会产生这个错误:

PHP注意:未定义的索引:第40行的C:\ ...\test.php中的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();
?>
Run Code Online (Sandbox Code Playgroud)

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

Xeo*_*oss 6

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

在尝试使用它们之前测试值的存在会更好.

$value = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : null;
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用getenv()方法来缩短它.

$value = getenv('REQUEST_METHOD');
Run Code Online (Sandbox Code Playgroud)

也没有必要这样做

<?php
ob_start();
phpinfo();
$info = ob_get_contents();
ob_end_clean();
?>
Run Code Online (Sandbox Code Playgroud)

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

<?php phpinfo();
Run Code Online (Sandbox Code Playgroud)

我会像这样写你的例子:

$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');
}
Run Code Online (Sandbox Code Playgroud)

  • 可能是从命令行调用了PHP(例如,cron作业或直接调用`php script.php`)。在这种情况下,将不会设置$ _SERVER ['REQUEST_METHOD']`。 (2认同)