我正试图使用html表单中的delete方法删除服务器上的文件。
我有一个文件,该文件的url是:
http://example.com/file2.php
我正在使用以下代码删除文件:
<form action="file2.php"method="DELETE">
<input type="submit"value="delete file">
</form>
当我按下"删除文件"按钮时,我会被重定向到"file2.php",但它并没有删除文件。
服务器正在接收GET方法中的请求标头:
GET /file2.php HTTP/1.1
而不是DELETE:
DELETE /file2.php HTTP/1.1
有人知道为什么删除方法不起作用吗?或者如何使用delete方法删除我的文件?
大多数浏览器不支持DELETE
作为<form ...>
的方法参数。事实上,它甚至不是HTML规范的一部分:
方法和formmethod内容属性是具有以下关键字和状态的枚举属性:
关键字get,映射到状态get,指示HTTP get方法。
关键字post,映射到状态post,指示HTTP post方法。
这里有一些解释:
我们目前似乎还不了解PUT和DELETE对HTML表单的用处。
对于DELETE,创建一个有用的请求确实很容易。然而,服务器实现通常以200和最小响应主体("已删除")或204(无内容)进行响应。因此,目前还不清楚如何在web应用程序中使用它。
对于PUT,似乎没有真正的用例,只要网页不能完全控制有效负载,也可以设置内容类型。
请考虑删除此功能,直到更清楚地了解它的好处。
像laravel这样的框架提供方法欺骗:
<input type='_method' value='DELETE' />
这将覆盖请求的方法,并将(例如)调用destroy函数:
Route::delete('/items/{id}', 'ItemController@destroy');
如果你不使用框架,你可以尝试模仿这种行为:
if($_SERVER['REQUEST_METHOD'] === 'DELETE' || (isset($_REQUEST['_method'] && $_REQUEST['_method'] === 'delete') {
...
}
Mozilla仅指定GET
和POST
我有两个建议:
-
使用POST将数据发送到PHP代码,并从那里进行处理
-
不要真的删除那么简单的东西。创建一些函数,只会说它被删除,直到你真的确定它必须离开