在使用它之前,您是否必须检查$ _SERVER变量中是否存在'REQUEST_METHOD'?

use*_*421 6 php

在实际使用之前,我是否必须检查$_SERVER变量是否有密钥?REQUEST_METHOD$_SERVER['REQUEST_METHOD']

也就是说,总是检查一个键是否存在于数组变量中是否过于防守$_SERVER

dav*_*ell 5

由于您无法保证任何PHP数组所具有的密钥,因此您应该始终检查它们.这不是过于防守,而是你的好习惯.

为了其他具有类似问题的读者,您通常会选择这三种方法来检查数组:

array_key_exists("REQUEST_METHOD", $_SERVER)
Run Code Online (Sandbox Code Playgroud)

要么

isset($_SERVER['REQUEST_METHOD'])
Run Code Online (Sandbox Code Playgroud)

或者你应该用@来逃避警告:

$someVar = @$_SERVER['REQUEST_METHOD'];
Run Code Online (Sandbox Code Playgroud)

绝对不推荐最后一个选项,因为它往往会隐藏问题所以我坚持检查任何数组上是否存在键的做法,甚至是全局PHP数组.


joh*_*nkj 5

关于$ _SERVER变量的PHP-manual 说明如下:

无法保证每个Web服务器都能提供这些服务; 服务器可以省略一些,或提供此处未列出的其他服务器.也就是说,在»CGI/1.1规范中考虑了大量这些变量,因此您应该能够期待这些变量.

CGI/1.1规范有以下的说:

必须将REQUEST_METHOD元变量设置为
脚本应该用来处理请求的方法,如
4.3节所述.

REQUEST_METHOD元变量中提供的Request Method标识脚本在
生成响应时应用的处理方法.脚本作者可以选择实现
最适合特定应用程序的方法.如果
脚本收到带有方法但不支持它的请求,应该拒绝它并出现错误(参见第6.3.3节).

如果您没有进行任何CLI开发,则可能没有必要检查其存在性,并且脚本将仅从像Apache这样的服务器运行.你可以做到这一点,为了安全起见,但没有必要.