Определение типа запроса в PHP (GET, POST, PUT или DELETE)

Как я могу определить, какой тип запроса был использован (GET, POST, PUT или DELETE) в PHP?

Используя

 $_SERVER['REQUEST_METHOD'] 

пример

 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // The request is using the POST method } 

Для получения дополнительной информации см. Документацию для переменной $ _SERVER .

REST в PHP можно сделать довольно просто. Создайте 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; case 'HEAD': do_something_with_head($request); break; case 'DELETE': do_something_with_delete($request); break; case 'OPTIONS': do_something_with_options($request); break; default: handle_error($request); break; } 

Обнаружение метода 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 } 

Вы также можете сделать это, используя switch если вы предпочитаете это над оператором 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

Поскольку это относится к REST, просто получить метод запроса с сервера недостаточно. Вам также необходимо получить параметры маршрута RESTful. Причина разделения параметров RESTful и GET / POST / PUT заключается в том, что для идентификации ресурса должен быть свой собственный уникальный URL.

Вот один из способов реализации маршрутов RESTful в PHP с использованием Slim:

https://github.com/codeguy/Slim

 $app = new \Slim\Slim(); $app->get('/hello/:name', function ($name) { echo "Hello, $name"; }); $app->run(); 

И настройте сервер соответственно.

Вот еще один пример использования AltoRouter:

https://github.com/dannyvankooten/AltoRouter

 $router = new AltoRouter(); $router->setBasePath('/AltoRouter'); // (optional) the subdir AltoRouter lives in // mapping routes $router->map('GET|POST','/', 'home#index', 'home'); $router->map('GET','/users', array('c' => 'UserController', 'a' => 'ListAction')); $router->map('GET','/users/[i:id]', 'users#show', 'users_show'); $router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); 

Очень просто использовать $ _SERVER ['REQUEST_METHOD'];

Пример:

 <?php $method = $_SERVER['REQUEST_METHOD']; switch ($method) { case 'GET': //Here Handle GET Request break; case 'POST': //Here Handle POST Request break; case 'DELETE': //Here Handle DELETE Request break; case 'PUT': //Here Handle PUT Request break; } ?> 

Вы можете использовать функцию getenv и не должны работать с переменной $_SERVER :

 getenv('REQUEST_METHOD'); 

Больше информации:

http://php.net/manual/en/function.getenv.php

 $request = new \Zend\Http\PhpEnvironment\Request(); $httpMethod = $request->getMethod(); 

Таким образом, вы также можете достичь и в zend framework 2. Благодарю.

Мы также можем использовать input_filter для обнаружения метода запроса, а также обеспечения безопасности посредством входной санитарии.

 $request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED); 

Когда запрос был запрошен, он будет иметь array . Поэтому просто проверьте с count() .

 $m=['GET'=>$_GET,'POST'=>$_POST]; foreach($m as$k=>$v){ echo count($v)? $k.' was requested.':null; } 

3v4l.org/U51TE

Вы можете получить любые данные строки запроса, например www.example.com?id=2&name=r

Вы должны получить данные с помощью $_GET['id'] или $_REQUEST['id'] .

Почтовые данные означают, что форма <form action='' method='POST'> вы должны использовать $_POST или $_REQUEST .