PHP Manual

Суперглобальні змінні

01. 11. 2019

Суперглобальні змінні використовуються для передачі глобального стану додатку та HTTP-зв'язку.

Головною перевагою цих змінних є те, що вони завжди і всюди доступні. На практиці це масиви значень, де ми отримуємо доступ до конкретної інформації за індексом. У різних контекстах наявність ключів може відрізнятися (пояснюється нижче).

Типи суперглобальних змінних

Всі суперглобали в PHP є масивами і позначаються знаком долара з наступним підкресленням (крім $GLOBALS) і прописними символами.

У "ППН 7", зокрема, йдеться про наступне:

Змінна | Опис | Змінна | Опис |-------------|-------| | $_GET | Параметри URL відправлені методом GET | $_POST | Дані форми відправлені POST. Зверніть увагу, що може вести себе по-різному в ajax. | $_REQUEST | Дані форми відправляються будь-яким методом ($_GET, $_POST та $_REQUEST). | $_FILES | Технічна інформація про поточні завантажені файли, наприклад, через конструкцію <input type="file"> | $_SERVER | Налаштування веб-сервера, IP-адреса, конфігурація... змінюється в залежності від середовища (при виклику PHP-скрипта з Терміналу він буде містити різні значення і наприклад інформація про поточний запит буде відсутня). | $_COOKIE | Налаштовані кукі. | $_SESSION | Дані сесії (session), якщо вона існує і була встановлена в минулому. | $GLOBALS | Попередження, не містить підкреслення в назві! Це так звана глобальна змінна і альтернативне позначення для ключового слова global. Якщо у вашому додатку є глобальна змінна $variable, ви також можете отримати доступ до неї з допомогою конструкції $GLOBALS["variable"]. Однак, використання глобальних змінних є поганим і нечистим рішенням за своєю суттю, тому краще цього не робити. | $_ENV | Інформація про поточне середовище, в якому виконується PHP.

Перерахувати всі існуючі цінності дуже просто:

foreach ($_SERVER as $key => $value {
echo $key . ':' . $value . '<br>';
}

Примітка: Не всі індекси повинні існувати завжди (наприклад, якщо скрипт запускає cron в режимі CLI, то індекс з URL сторінки або IP-адресою запиту не буде існувати).

Доступ до змінних

Рекомендую зробити всі глобальні змінні (крім $_SESSION) доступними тільки для читання. Це пов'язано з тим, що вони містять глобальні дані програми і інший код може це враховувати (наприклад, інша встановлена бібліотека).

Ще одним недоліком глобального стану є те, що не завжди можна покладатися на точні значення, навіть якщо вони існують, тому завжди слід перевіряти їх ключі за допомогою конструкції isset().

Щоб зберегти новий файл cookie, використовуйте setcookie() і не вставляйте значення безпосередньо. Це пов'язано з тим, що він призначений лише для читання.

Вивчені уроки

Ніколи не довіряйте сліпо значенням надглобальних змінних!

Користувач може використовувати URL-адресу та надіслані заголовки, щоб впливати на те, як встановлюються значення. Всі вхідні дані завжди повинні бути ретельно перевірені.

Реєстрація глобалів - проблема старої версії PHP

У старій версії PHP (до 5.4.0) існувала спеціальна директива register-globals (налаштовується в php.ini), яка призводила до того, що всі передані параметри в URL автоматично реєструвалися як змінні.

Наприклад:

Користувач звернувся за адресою: https://example.com/script.php?var=24.

І PHP автоматично створив всередині скрипта змінну $var зі значенням 24.

Так що це спрацювало класично:

echo $var;

Таким чином, будь-хто міг вставити в скрипт будь-яку змінну і змінити її вміст. Очевидно, що безпека не завжди була пріоритетом. Не зовсім.

Інші джерела

Більш детальний опис дивіться в офіційній інструкції.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
6.
Status:
All systems normal.
2024