Что такое суперглобальные массивы ($_GET, $_POST, $_SESSION)?php-6

Суперглобальные массивы — это специальные встроенные переменные в PHP, которые доступны в любой области видимости (глобальной, функциональной, классовой) без необходимости использования ключевого слова global. Они содержат информацию о сервере, окружении, пользовательских данных и состоянии сессии.

Основные суперглобальные массивы

  1. $_GET - параметры URL

    // Для URL: page.php?id=123&action=edit
    $id = $_GET['id']; // 123
    $action = $_GET['action']; // 'edit'
    
  2. $_POST - данные формы (method="POST")

    // Для формы с <input name="username">
    $username = $_POST['username'];
    
  3. $_REQUEST - объединяет GET, POST и COOKIE данные (не рекомендуется к использованию из-за неочевидного источника данных)

  4. $_SESSION - данные сессии

    session_start();
    $_SESSION['user_id'] = 123; // Запись в сессию
    $userId = $_SESSION['user_id']; // Чтение
    
  5. $_COOKIE - данные cookies

    $theme = $_COOKIE['theme'] ?? 'light'; // Чтение с fallback
    
  6. $_SERVER - информация о сервере и запросе

    $ip = $_SERVER['REMOTE_ADDR'];
    $method = $_SERVER['REQUEST_METHOD'];
    
  7. $_FILES - загруженные файлы

    $file = $_FILES['userfile'];
    move_uploaded_file($file['tmp_name'], '/uploads/'.$file['name']);
    
  8. $_ENV - переменные окружения

Особенности работы

  1. Автоматическая глобальная доступность:

    function test() {
        $getParam = $_GET['param']; // Доступ без global
    }
    
  2. Всегда существуют - не нужно проверять isset() перед доступом (но нужно проверять элементы)

  3. Модифицируемы - но изменять их не рекомендуется

Безопасность при работе

  1. Всегда проверяйте существование ключей:

    $page = $_GET['page'] ?? 'home'; // Null coalescing operator
    
  2. Фильтруйте входные данные:

    $clean_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
    
  3. Для сессий - валидация данных:

    if (!isset($_SESSION['user_authenticated'])) {
        die('Access denied');
    }
    

Практические примеры

  1. Обработка формы:

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $name = htmlspecialchars($_POST['name']);
        // Обработка данных
    }
    
  2. Пагинация через URL:

    $page = max(1, (int)($_GET['page'] ?? 1));
    
  3. Авторизация через сессию:

    $_SESSION['user'] = [
        'id' => 123,
        'name' => 'John Doe'
    ];
    

Резюмируем:

суперглобальные массивы — это мощный инструмент PHP для работы с внешними данными и состоянием приложения. Они требуют аккуратного обращения, валидации и фильтрации входных данных для обеспечения безопасности приложения.