我怎么能检测到哪个请求类型被使用(GET, POST, PUT或删除)在PHP?
当前回答
可以使用下面的代码片段检测HTTP方法或所谓的REQUEST method。
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST'){
// Method is POST
} elseif ($method == 'GET'){
// Method is GET
} elseif ($method == 'PUT'){
// Method is PUT
} elseif ($method == 'DELETE'){
// Method is DELETE
} else {
// Method unknown
}
如果你更喜欢这个而不是if-else语句,你也可以使用一个开关。
如果HTML表单中需要GET或POST以外的方法,则通常使用表单中的隐藏字段来解决这个问题。
<!-- DELETE method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="DELETE">
</form>
<!-- PUT method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="PUT">
</form>
关于HTTP方法的更多信息,我想参考下面的StackOverflow问题:
HTTP协议的PUT和DELETE及其在PHP中的使用
其他回答
PHP中的REST可以非常简单地实现。创建http://example.com/test.php(如下所示)。将此用于REST调用,例如http://example.com/test.php/testing/123/hello。这与Apache和Lighttpd一起开箱即用,不需要重写规则。
<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method) {
case 'PUT':
do_something_with_put($request);
break;
case 'POST':
do_something_with_post($request);
break;
case 'GET':
do_something_with_get($request);
break;
default:
handle_error($request);
break;
}
在core php中,你可以这样做:
<?php
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
//Here Handle GET Request
echo 'You are using '.$method.' Method';
break;
case 'POST':
//Here Handle POST Request
echo 'You are using '.$method.' Method';
break;
case 'PUT':
//Here Handle PUT Request
echo 'You are using '.$method.' Method';
break;
case 'PATCH':
//Here Handle PATCH Request
echo 'You are using '.$method.' Method';
break;
case 'DELETE':
//Here Handle DELETE Request
echo 'You are using '.$method.' Method';
break;
case 'COPY':
//Here Handle COPY Request
echo 'You are using '.$method.' Method';
break;
case 'OPTIONS':
//Here Handle OPTIONS Request
echo 'You are using '.$method.' Method';
break;
case 'LINK':
//Here Handle LINK Request
echo 'You are using '.$method.' Method';
break;
case 'UNLINK':
//Here Handle UNLINK Request
echo 'You are using '.$method.' Method';
break;
case 'PURGE':
//Here Handle PURGE Request
echo 'You are using '.$method.' Method';
break;
case 'LOCK':
//Here Handle LOCK Request
echo 'You are using '.$method.' Method';
break;
case 'UNLOCK':
//Here Handle UNLOCK Request
echo 'You are using '.$method.' Method';
break;
case 'PROPFIND':
//Here Handle PROPFIND Request
echo 'You are using '.$method.' Method';
break;
case 'VIEW':
//Here Handle VIEW Request
echo 'You are using '.$method.' Method';
break;
Default:
echo 'You are using '.$method.' Method';
break;
}
?>
博士TL;
true的“原生源”是$_SERVER全局变量。请求方法 保存在“REQUEST_METHOD”键下。
检查$_SERVER数组
$ _SERVER(“REQUEST_METHOD”)
PHP方法
但是您可以使用许多变通方法来获得方法。像filter_input: filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
填词 或者使用外部库,比如:
Symfony \ HttpFoundation \ \组件请求 \ Zend \ \ PhpEnvironment \ Http请求
结论
但最简单的方法是使用:$_SERVER['REQUEST_METHOD']。
可以使用下面的代码片段检测HTTP方法或所谓的REQUEST method。
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST'){
// Method is POST
} elseif ($method == 'GET'){
// Method is GET
} elseif ($method == 'PUT'){
// Method is PUT
} elseif ($method == 'DELETE'){
// Method is DELETE
} else {
// Method unknown
}
如果你更喜欢这个而不是if-else语句,你也可以使用一个开关。
如果HTML表单中需要GET或POST以外的方法,则通常使用表单中的隐藏字段来解决这个问题。
<!-- DELETE method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="DELETE">
</form>
<!-- PUT method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="PUT">
</form>
关于HTTP方法的更多信息,我想参考下面的StackOverflow问题:
HTTP协议的PUT和DELETE及其在PHP中的使用
您可以获得任何查询字符串数据,例如www.example.com?id=2&name=r
您必须使用$_GET['id']或$_REQUEST['id']获取数据。
Post数据意味着像form <form action= " method=' Post '>你必须使用$_POST或$_REQUEST。
推荐文章
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- Json_encode()转义正斜杠
- 如何在PHP中捕获cURL错误
- 如何要求一个分叉与作曲家?
- 如何在php中创建可选参数?
- 在文本文件中创建或写入/追加
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- 如何从一个查询插入多行使用雄辩/流利
- 在PHP单元测试执行期间,如何在CLI中输出?