PHP 8.4.2 Released!

Дещо корисне

А тепер зробімо щось корисне. Ми збираємось перевірити, який саме браузер використовує відвідувач. Для цього ми перевіримо рядок, який відправляє браузер як частину HTTP запиту. Ця інформація зберігається в змінній. В PHP змінні завжди починаються зі знака долара. Зараз нам цікава змінна $_SERVER['HTTP_USER_AGENT'].

Зауваження:

$_SERVER - це спеціальна зарезервована змінна PHP, що містить всю інформацію отриману від вебсервера. Її також називають суперглобальною. Докладніша інформація є на сторінці Суперглобальні змінні.

Давайте подивимось на значення цієї змінної:

Приклад #1 Друк змінної (елемент масива)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

Скрипт надрукує приблизно таке:

Mozilla/5.0 (Linux) Firefox/112.0

В PHP існує багато типів змінних. В попередньому прикладі ми друкували елемент зі змінної-масиву. Масиви можуть бути дуже корисними.

$_SERVER є однією зі змінних, яку PHP автоматично створює для вас. Довший список таких змінних можна проглянути в розділі Зарезервовані змінні, або ж ви можете роздрукувати весь їхній список, викликавши функцію phpinfo(), яку ми вже використовували в попередньому абзаці.

Можна вкладати декілька рядків коду всередині тегів PHP та створювати невеликі блоки коду, що можуть робити більше, ніж простий виклик echo. Наприклад, якщо ви хочете створити перевірку для Firefox, це можна зробити так:

Приклад #2 Використання структур контролю та функцій

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo
'Ви використовуєте Firefox.';
}
?>

Результат цього скрипта може бути таким:

Ви використовуєте Firefox.

Тут використовується кілька нових понять. По-перше, це вираз if. Якщо ви знайомі з базовим синтаксисом, що використовується в мові C, то цей вираз буде для вас теж знайомим. В іншому випадку, вам ймовірно слід підібрати підручник з PHP для початківців та прочитати перші кілька розділів, або прочитати главу Довідник з PHP даного посібника.

Друге поняття, яке ми ввели - це виклик функції str_contains(). Функція str_contains() вбудована в PHP, вона визначає наявність одного рядка всередині іншого. У даному випадку ми шукаємо підрядок 'Firefox' (т. зв. needle, "голку") всередині значення змінної $_SERVER['HTTP_USER_AGENT'] (у т. зв. haystack, "копиці сіна"). І якщо підрядок буде знайдено, то функція поверне true. Якщо ні — false. Якщо ж вона повертає true, вираз if буде оцінено як true (істина) та виконається код всередині {фігурних дужок}. А інакше код запускатись не буде. Спробуйте створити аналогічні приклади, використовуючи if, else, та інші функції такі як strtoupper() та strlen(). В даному посібнику є ще багато прикладів, майже для кожної функції. Якщо ви не впевнені як використовувати функції, то можна прочитати як читати визначення функцій та розділ про функції PHP.

Ми можемо піти ще далі та показати як можна входити і виходити з режиму PHP навіть всередині виразу PHP:

Приклад #3 Змішаний код HTML та PHP

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() повернула true</h3>
<p>Ви використовуєте Firefox</p>
<?php
} else {
?>
<h3>str_contains() повернула false</h3>
<p>Ви не використовуєте Firefox</p>
<?php
}
?>

Приклад виводу скрипта:

<h3>str_contains() повернула true</h3>
<p>Ви використовуєте Firefox</p>

Замість того, щоб використовувати в PHP вираз echo для виведення чогось, ми вийшли з режиму PHP та безпосередньо відправляємо код HTML. Тут дуже важливо відзначити, що таким чином не змінюється логічна структура скрипта. У підсумку лише один з блоків HTML буде відправлено в браузер, в залежності від результату, поверненого функцією str_contains(). Іншими словами, це залежить від того, чи буде знайдено рядок Firefox.

add a note

User Contributed Notes 1 note

up
170
Declan Kelly
10 years ago
Please note that Internet Explorer 11 no longer contains MSIE in its user agent string, for example on Windows 8 with IE11 I get the following:

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

So if you want to include a test for IE11, the code above changes to:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
echo
'You are using Internet Explorer.<br />';
}
?>
To Top