Дещо Корисне

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

Зауваження:

$_SERVER - це спеціальна зарезервована змінна PHP, що містить всю інформацію отриману від веб-сервера. Її також називають суперглобальною. Детальніша інформація знаходиться на сторінці суперглобальні змінні. Ці спеціальні змінні з'явились в PHP починаючи з версії » 4.1.0. Раніше, з цією метою ми використовували масиви $HTTP_*_VARS, такі як $HTTP_SERVER_VARS. Не дивлячись на те, що ці масиви вже застарілі, вони до цих пір існують. (Прогляньте також зауваження стосовно старого коду.)

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

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

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

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


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

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

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

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

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

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
    echo 
'Ви використовуєте Internet Explorer.<br />';
}
?>

Видача цього скрипта може бути такою:

Ви використовуєте Internet Explorer.<br />

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

Друге поняття, яке ми ввели - це виклик функції strpos(). Дана функція вбудована в PHP, вона шукає підрядок (частину рядка) в наданому рядку. В даному випадку ми шукаємо підрядок 'Trident' всередині значення змінної $_SERVER['HTTP_USER_AGENT']. І якщо підрядок буде знайдено, то функція поверне його положення відносно початку рядка. В противному разі, вона поверне FALSE (хибний). Якщо ж вона не повертає FALSE, вираз if буде оцінено як TRUE (дійсний), та виконається код всередині {фігурних дужок}. В противному разі, код запускатись не буде. Спробуйте створити аналогічні приклади, використовуючи if, else, та інші функції такі як strtoupper() та strlen(). В даному посібнику є ще багато прикладів, майже по кожній функції. Якщо ви не впевнені як використовувати функції, то можна прочитати сторінки як читати визначення функцій та розділ про функції PHP.

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

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

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
?>
<h3>strpos() повернула не false</h3>
<p>Ви використовуєте Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() повертає false</h3>
<p>Ви не використовуєте Internet Explorer</p>
<?php
}
?>

Приклад видачі скрипта:

<h3>strpos() повернула не false</h3>
<p>Ви використовуєте Internet Explorer</p>

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

add a note add a note

User Contributed Notes 3 notes

up
228
Declan Kelly
7 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 />';
}
?>
up
7
safisiddiqui6 at gmail dot com
1 year ago
In 2021, when we output the HTTP_USER_AGENT using IE, we get :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45

So In order to look for IE in 2021, we write:

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

Or If we want to include old IEs we can use Declan's Support:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
   
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) ||
   
strpos($_SERVER['HTTP_USER_AGENT'], 'Edg') !== FALSE {
    echo
'You are using Internet Explorer.<br />';
}
?>
up
0
Evan Z
9 months ago
Hi. Edge is a different browser from IE. You cannot use the condition to judge it is an Internet Explorer. On the contrary, it means this is an Edge browser.

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