DANFA

PHP: Как определить тип HTTP-запроса (POST или GET)

Определить тип HTTP-запроса (POST или GET) в PHP можно несколькими способами:

Основные способы определения метода запроса



Использование суперглобального массива $_SERVER
$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'GET') {
    // Обработка GET-запроса
} elseif ($method === 'POST') {
    // Обработка POST-запроса
}

Использование константы PHP_SAPI (менее надёжный способ)
if (php_sapi_name() === 'cgi-fcgi' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    // POST-запрос
}

Через функцию filter_input
$method = filter_input(INPUT_SERVER, 'REQUEST_METHOD');

Практическое применение


switch ($_SERVER['REQUEST_METHOD']) {
    case 'GET':
        // Обработка GET-запроса
        $data = $_GET;
        break;
    
    case 'POST':
        // Обработка POST-запроса
        $data = $_POST;
        break;
    
    default:
        http_response_code(405); // Метод не разрешён
        echo 'Метод запроса не поддерживается';
        break;
}

Дополнительные методы проверки



Проверка наличия данных POST
if (!empty($_POST)) {
    // Вероятно, POST-запрос
}

Проверка через php_input
if (fopen('php://input', 'r')) {
    // Возможно POST-запрос
}

Рекомендации по использованию


  • Основной способ — использование $_SERVER['REQUEST_METHOD'].
  • Валидация данных всегда должна производиться дополнительно, независимо от метода запроса.
  • Безопасность: не доверяйте только типу запроса, проверяйте все входные данные.
  • Обработка ошибок: всегда предусматривайте обработку неизвестных методов запроса.

Пример полного обработчика


<?php

// Определяем метод запроса
$method = $_SERVER['REQUEST_METHOD'];

// Проверяем допустимость метода
if (!in_array($method, ['GET', 'POST'])) {
    http_response_code(405);
    exit('Метод запроса не поддерживается');
}

// Обработка в зависимости от метода
switch ($method) {
    case 'GET':
        $data = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
        // Логика обработки GET
        break;
    
    case 'POST':
        $data = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
        // Логика обработки POST
        break;
}


Автор:  5 часов назад