Суперглобальні змінні використовуються для передачі глобального стану додатку та 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 (до 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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk