2015-11-18 3 views
0

Я пытаюсь удалить файл на своем сервере, используя DELETE метод в моей форме html.Удаление файла на сервере методом DELETE формы

У меня есть файл, и URL для этого файла:

http://example.com/file2.php 

Я использую следующий код для удаления файла:

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

Когда я нажимаю "удалить файл" кнопку I перенаправить на «file2.php», но он не удаляет файл.

Сервер receving заголовок запроса в методе GET:

GET /file2.php HTTP/1.1 

вместо УДАЛИТЬ:

DELETE /file2.php HTTP/1.1 

Кто-то знает, почему метод удаления не работает? или как я могу удалить свой файл с помощью метода DELETE?

+1

Это нехороший метод, не все браузер поддерживает его. Лучше сделать это с помощью php – RiccardoC

+2

Большинство браузеров не отправят метод 'delete'. Он возвращается к 'get'. (Я предполагаю: поскольку 'delete' старен и не улавливается, поэтому браузеры перестали его поддерживать.) – developerwjk

ответ

3

Большинство браузеров не поддерживают DELETE как параметр метода для <form ...>. На самом деле это даже не часть HTML specification:

метод и formmethod атрибутов контента перечислены атрибуты со следующими ключевыми словами и заявляет:

  • Ключевое слово получить, отображение в состояние GET, указывающее метод HTTP GET.

  • Ключевое слово сообщение, отображение в состояние POST, что указывает на метод HTTP POST.

А вот какой-то explanation:

Кажется, что в настоящее время мы не понимаем, как PUT и DELETE будет полезно для HTML форм.

Для DELETE действительно легко создать полезный запрос. Однако серверные реализации обычно отвечают 200 и минимальным телом ответа («удалены») или 204 (без содержимого). Поэтому неясно, как это можно использовать в веб-приложении.

Для PUT, кажется, нет реального использования, если веб-страница не имеет полного контроля над полезной нагрузкой, а также может устанавливать тип содержимого.

Пожалуйста, подумайте об удалении этой функции, пока не появится более четкое представление о том, для чего это полезно.

Каркасы как laravel обеспечивают метод подмены:

<input type='_method' value='DELETE' /> 

Это будет переопределить метод запроса и будет - к примеру - называем разрушить функции:

Route::delete('/items/{id}', '[email protected]'); 

Если вы не используете фреймворк, вы можете попытаться воспроизвести это поведение:

if($_SERVER['REQUEST_METHOD'] === 'DELETE' || (isset($_REQUEST['_method'] && $_REQUEST['_method'] === 'delete') { 
... 
} 
+2

Это то, о чем я думал. Его часть спецификации HTTP, но была удалена из спецификации HTML. – developerwjk

2

Mozilla только specifies только GET и POST

У меня есть 2 рекомендации:

  • Используйте POST для передачи данных в PHP код и обрабатывать его оттуда

  • Дону Фактически удаляйте все, что просто. Создайте некоторую функцию, которая просто скажет, что она удалена до тех пор, пока вы действительно не уверены, что ее нужно убрать.