通过DELETE表单方法删除服务器上的文件

时间:2015-11-18 16:33:50

标签: php html

我正在尝试使用html表单中的 DELETE 方法删除服务器上的文件。

我有一个文件,该文件的网址是:

 http://example.com/file2.php

我使用以下代码删除文件:

<form action="file2.php"method="DELETE">
<input type="submit"value="delete file">
</form>

当我按&#34;删除文件&#34;按钮我被重定向到&#34; file2.php&#34;但它没有删除文件。

服务器正在GET方法中接收请求标头:

GET /file2.php HTTP/1.1

而不是DELETE:

DELETE /file2.php HTTP/1.1

有人知道删除方法无效的原因吗?或者如何使用DELETE方法删除我的文件?

2 个答案:

答案 0 :(得分:3)

大多数浏览器不支持DELETE作为<form ...>的方法参数。实际上,它甚至不是HTML specification的一部分:

  

方法 formmethod 内容属性是具有以下关键字和状态的枚举属性:

     
      
  • 关键字 get ,映射到状态 GET ,表示HTTP GET方法。

  •   
  • 关键字 post ,映射到状态 POST ,表示HTTP POST方法。

  •   

这是某种explanation

  

似乎我们目前还不了解PUT和DELETE如何对HTML表单有用。

     

对于DELETE,创建有用的请求确实很容易。但是,服务器实现通常以200和最小响应体(&#34;删除&#34;)或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') {
...
}

答案 1 :(得分:2)

仅限Mozilla specifies using (var context = PrimaryConnection.returnNewConnection()) { var groupedData = context.s84_Schedule.AsExpandable() .Where(predicate) .GroupBy(c => new { c.CustomerID, c.s84_Customer.CustomerName, c.SubdivisionID, c.s84_Subdivision.SubdivisionName, c.LotNumber }) .Select(grouped => new s84_Report_Project_POCO { CustomerID = grouped.Key.CustomerID, CustomerName = grouped.Key.CustomerName, SubdivisionID = grouped.Key.SubdivisionID, SubdivisionName = grouped.Key.SubdivisionName, LotNumber = grouped.Key.LotNumber, Products = grouped .Select(x => new s84_Report_Project_Product { ProductID = x.ProductID, ProductName = x.s84_Product.ProductName, ProductDate = x.CustomerExpectedDate, FieldRepID = x.FieldRepID, FieldRepName = x.s84_FieldRep.FieldRepName, InstallerID = x.InstallerID, InstallerName = x.s84_Installer.InstallerName, StatusID = x.StatusID, StatusColor = x.s84_Status.StatusColor, StatusName = x.s84_Status.StatusName, Completed = x.Completed }).Orderby(t => t.CustomerExpectedDate).ToList() }); var finalList = groupedData.ToList().Where(x => x.Products.Last().Completed == false).ToList(); List<s84_Report_Project_POCO> lst = finalList.OrderBy(x => x.Products.First().ProductDate).ToList(); GET

我有两条建议:

  • 使用POST将数据发送到PHP代码并从那里处理

  • 实际上并没有删除那么简单的东西。创建一些只会说它被删除的功能,直到你确定它已经消失为止