Суперглобальні змінні використовуються для передачі глобального стану додатку та HTTP-зв'язку.
Головною перевагою цих змінних є те, що вони завжди і всюди доступні. На практиці це масиви значень, де ми отримуємо доступ до конкретної інформації за індексом. У різних контекстах наявність ключів може відрізнятися (пояснюється нижче).
Всі суперглобали в PHP є масивами і позначаються знаком долара з наступним підкресленням (крім $GLOBALS
) і прописними символами.
У "ППН 7", зокрема, йдеться про наступне:
Змінна | Oпис | Змінна | Oпис |
---|---|---|---|
$_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"] . Oднак, використання глобальних змінних є поганим і нечистим рішенням за своєю суттю, тому краще цього не робити. |
||
$_ENV |
Інформація про поточне середовище, в якому виконується PHP. |
Перерахувати всі існуючі цінності дуже просто:
foreach ($_SERVER as $key => $value {echo $key . ':' . $value . '<br>';}
Примітка: Не всі індекси повинні існувати завжди (наприклад, якщо скрипт запускає cron в режимі CLI, то індекс з URL сторінки або IP-адресою запиту не буде існувати).
Рекомендую зробити всі глобальні змінні (крім $_SESSION
) доступними тільки для читання. Це пов'язано з тим, що вони містять глобальні дані програми і інший код може це враховувати (наприклад, інша встановлена бібліотека).
Ще одним недоліком глобального стану є те, що не завжди можна покладатися на точні значення, навіть якщо вони існують, тому завжди слід перевіряти їх ключі за допомогою конструкції isset()
.
Щоб зберегти новий файл cookie, використовуйте setcookie()
і не вставляйте значення безпосередньо. Це пов'язано з тим, що він призначений лише для читання.
Ніколи не довіряйте сліпо значенням надглобальних змінних!
Користувач може використовувати URL-адресу та надіслані заголовки, щоб впливати на те, як встановлюються значення. Всі вхідні дані завжди повинні бути ретельно перевірені.
У старій версії PHP (до 5.4.0
) існувала спеціальна директива register-globals
(налаштовується в php.ini
), яка призводила до того, що всі передані параметри в URL автоматично реєструвалися як змінні.
Наприклад:
Користувач звернувся за адресою: https://example.com/script.php?var=24
.
І PHP автоматично створив всередині скрипта змінну $var
зі значенням 24
.
Так що це спрацювало класично:
echo $var;
Таким чином, будь-хто міг вставити в скрипт будь-яку змінну і змінити її вміст. Oчевидно, що безпека не завжди була пріоритетом. Не зовсім.
Більш детальний опис дивіться в офіційній інструкції.
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:
Články píše Jan Barášek © 2009-2025 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk