我正在乱搞PHP中的REST,我知道我可以捕获请求方法vi $_SERVER['REQUEST_METHOD']
。但是如何在不使用cURL的情况下在PHP中触发PUT / DELETE请求?
我想使用默认PHP安装的功能来执行此操作。
我无法想象更改form标签的method属性以指定除GET或POST之外的方法可以在所有浏览器上运行...加上HTML标准无法识别它。
顺便说一下,我使用的是PHP 5.2.6。
感谢。
答案 0 :(得分:5)
通常这是由隐藏的表单字段完成的,并在应用程序中处理(而不是网络服务器)。
<input type="hidden" name="_method" value="put" />
因此,在这种情况下,您将使用一组简单的if-else语句来确定是否覆盖_method
变量(当然是有效的)。我会使用类似的东西:
$method = 'get';
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST['_method']
&& ($_POST['_method'] == 'PUT' || $_POST['_method'] == 'DELETE')) {
$method = strtolower($_POST['_method']);
} else {
$method = 'post';
}
}
这是确定应用程序或框架的请求类型的简单方法。
答案 1 :(得分:1)
fopen
将执行HTTP,但我相信它只会执行GET请求。如果您使用fsockopen
,则需要自己处理HTTP协议,生成标题等。
您可以使用HTTPRequest(php_http
扩展名)或PEAR。
更新
如果你真的在谈论将发送到你的PHP脚本,而不是来自,那么这个问题可能会引起关注:
Are the PUT, DELETE, HEAD, etc methods available in most web browsers?
答案 2 :(得分:0)
如果你想使用PHP的内置函数,而不是cURL,那么你很容易使用fsockopen()等等,
或充其量是围绕这些功能构建的库,例如Snoopy
答案 3 :(得分:0)
您可能需要查看WebDav(PHP WebDav slide show)。它是为PUSH,DELETE,Etc而构建的......当然,你所针对的服务器需要接受PUSH和DELETE,这意味着Apache正在使用mod_webdav或类似的东西。否则,将需要更低级别的解决方案(正如其他人指出的那样)