





Используя
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Для получения дополнительной информации см. документация для переменной $ _SERVER.
+1 к этому - если есть сомнения, var_dump ($ _ SERVER) и ответ часто лежит внутри.
Что произойдет, если вы отправите POST на mypage.php? Var = something?
Метод будет POST, но если вам нужно использовать $ _GET для получения этих переменных, я не уверен.
В случае, если nickf упоминает, вы также можете (возможно) использовать переменную $ _REQUEST. $ _REQUEST содержит значения post, get и cookie. Прочтите документацию на php.net/manual/en/reserved.variables.request.php
@nickf - переменная var из вашего примера будет в $_POST['var']
Если вы просто хотите проверить, опубликована ли форма, вы можете просто сделать if (!empty($_POST)) {.... Однако остерегайтесь $_REQUEST! Неосторожное использование добавляет немало уязвимостей CSRF.
@Paul Dixon print_r ($ _SERVER) лучше для этого: D
@NathanLong По моему опыту, это неверно. Если вы отправите POST на mypage.php? Var = something, тогда «something» будет в $_GET['var'].
$_POST и $_GET названы несколько неудачно. $_GET содержат переменные из компонента запроса URL, независимо от метода HTTP. $_POST будет содержать поля формы, если запрос был отправлен как application/x-www-form-urlencoded.
$ _SERVER ['REQUEST_METHOD'] что. что нам с этим делать?
@MujahedAKAS, вы можете проверить, какой метод используется. Это переменная, которая содержит используемый метод, то есть «GET», «HEAD», «POST», «PUT». Итак, вы можете сделать if ($_SERVER['REQUEST_METHOD'] == 'POST'){ echo "POST received"}.
@gnud, нужен ли нам ===, что будет, если я воспользуюсь ==?
@Kasun Ты конкретно не необходимость===, нет. Но нет никаких преимуществ в использовании ==, и это хорошая практика, чтобы привыкнуть к использованию === абсолютно везде.
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;
default:
handle_error($request);
break;
}
Если вы хотите, чтобы ваш API был доступен, не указывая, какой интерпретатор вы используете, добавьте файл .htaccess, содержащий RewriteEngine, в RewriteRule ^ api /(.*)$ api.php / $ 1. Предполагается, что ваш файл API называется api. php. Кроме того, поскольку вышеупомянутый блок кода был написан, разработчики PHP отказались от функции разделения. он отлично работает, если вы замените разделение на разнесение.
Что с @ перед $_SERVER['PATH_INFO']?
@Svish, какая замечательная деталь вы заметили! Он избавляется от PHP Notice: Undefined index: PATH_INFO в случае, если PATH_INFO отсутствует в $_SERVER. Я сразу добавляю это в свой набор хитростей! Это способ сказать: «Я знаю, что в этом массиве может не быть записи с таким названием, и я готов к этому, поэтому просто заткнись и делай то, что я тебе говорю». :) Спасибо, ребята, как за публикацию этого ответа, так и за то, что привлекли мое внимание к этому конкретному персонажу в нем.
Я обычно использую! Empty вместо @. Лучшая практика?
Как более краткий способ использования переменных методов: <?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
@Svish Знак @ - это средство подавления ошибок, и (из моего перевода) оно означает: «Не говорите мне, когда что-то не так, мистер PHP, потому что я знаю лучше и продумал все возможные варианты, и знать ничего не будет неправильно, и я когда-нибудь понадобится знать о "(без обид, neu242: D) Пишите хороший код, который не будет иметь никаких PHP-уведомлений из-за хорошего кода!
Сегодня воскресное утро, и, может быть, я сегодня немного тупой, но я не могу понять, в чем польза $ _SERVER ['PATH_INFO'], когда эта переменная не установлена Apache. Я попробовал, и он вернулся пустым!
Поскольку речь идет о 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');
Не то, что просил ОП. А также, OP нигде не упоминал REST.
@BrunoFerreira, вы хотите, чтобы я удалил ответ, потому что OP специально не использовал термин REST?
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
Таким же образом можно добиться и в zend framework 2. Спасибо.
Вы можете сделать в контроллере $ request = $ this-> getRequest (). А затем $ request-> isPost (). Также обратите внимание на $ request-> getMethod ().
Обнаружение метода 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:
Вы можете получить любые данные строки запроса, например www.example.com?id=2&name=r.
Вы должны получать данные с помощью $_GET['id'] или $_REQUEST['id'].
Публикация данных означает, что, как и в форме <form action='' method='POST'>, вы должны использовать $_POST или $_REQUEST.
Вы можете использовать функцию getenv и не работать с переменной $_SERVER:
getenv('REQUEST_METHOD');
Больше информации:
Мы также можем использовать input_filter для обнаружения метода запроса, а также обеспечить безопасность за счет очистки ввода.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
It is Very Simple just use $_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;
}
?>
Случай «DELETE» никогда не будет задействован, потому что это невозможно REQUEST_METHOD. Допустимые REQUEST_METHOD: «GET», «HEAD», «POST», «PUT». Прочтите документацию (указанную в многочисленных ответах на этой самой странице), прежде чем публиковать ответ.
@Patrick, на самом деле, случай «DELETE» получит попадание, когда метод запроса - DELETE; тем не менее в документации по PHP об этом не упоминается. Действительно, в $_SERVER['REQUEST_METHOD'] отражается любой метод, даже кастомизированный. Помните, что метод - это просто строка в заголовке запроса и наша задача - проверить его правильность.
@Patrick DELETE определен в RFC7231 и поддерживается во всех основных браузерах. tools.ietf.org/html/rfc7231#section-4.3.5 и $ _SERVER ["REQUEST_METHOD"] - это просто строка.
@IvanDePazCenteno Совершенно верно. Никогда не доверяйте вводу пользователя. Никогда не доверяйте вводу пользователя.
Когда метод был запрошен, у него будет array. Так что просто проверьте с помощью count().
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
В основном php вы можете сделать так:
<?php
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
//Here Handle GET Request
echo 'You are using '.$method.' Method';
break;
case 'POST':
//Here Handle POST Request
echo 'You are using '.$method.' Method';
break;
case 'PUT':
//Here Handle PUT Request
echo 'You are using '.$method.' Method';
break;
case 'PATCH':
//Here Handle PATCH Request
echo 'You are using '.$method.' Method';
break;
case 'DELETE':
//Here Handle DELETE Request
echo 'You are using '.$method.' Method';
break;
case 'COPY':
//Here Handle COPY Request
echo 'You are using '.$method.' Method';
break;
case 'OPTIONS':
//Here Handle OPTIONS Request
echo 'You are using '.$method.' Method';
break;
case 'LINK':
//Here Handle LINK Request
echo 'You are using '.$method.' Method';
break;
case 'UNLINK':
//Here Handle UNLINK Request
echo 'You are using '.$method.' Method';
break;
case 'PURGE':
//Here Handle PURGE Request
echo 'You are using '.$method.' Method';
break;
case 'LOCK':
//Here Handle LOCK Request
echo 'You are using '.$method.' Method';
break;
case 'UNLOCK':
//Here Handle UNLOCK Request
echo 'You are using '.$method.' Method';
break;
case 'PROPFIND':
//Here Handle PROPFIND Request
echo 'You are using '.$method.' Method';
break;
case 'VIEW':
//Here Handle VIEW Request
echo 'You are using '.$method.' Method';
break;
Default:
echo 'You are using '.$method.' Method';
break;
}
?>
Я использовал этот код. Он должен работать.
function get_request_method() {
$request_method = strtolower($_SERVER['REQUEST_METHOD']);
if ($request_method != 'get' && $request_method != 'post') {
return $request_method;
}
if ($request_method == 'post' && isset($_POST['_method'])) {
return strtolower($_POST['_method']);
}
return $request_method;
}
Этот код выше будет работать с REST calls, а также с html form.
<form method = "post">
<input name = "_method" type = "hidden" value = "delete" />
<input type = "submit" value = "Submit">
</form>
Также важно отметить, что PHP заполнит все параметры $_GET, даже если вы отправите правильный запрос другого типа.
Методы в приведенных выше ответах полностью верны, однако, если вы хотите дополнительно проверить параметры GET при обработке запроса POST, DELETE, PUT и т. д., Вам необходимо проверить размер массива $_GET.
не забывайте HEAD =) (также OPTIONS, TRACE и CONNECT, но я не думаю, что PHP когда-либо получит их).