CakeFest 2024: The Official CakePHP Conference

Делаем что-нибудь полезное

Давайте сделаем что-нибудь полезное. К примеру, определим, какой браузер использует тот, кто смотрит в данный момент нашу страницу. Для этого мы проверим строку с именем браузера, посылаемую нам в HTTP-запросе. Эта информация хранится в переменной. Переменные в PHP всегда предваряются знаком доллара. Интересующая нас в данный момент переменная называется $_SERVER['HTTP_USER_AGENT'].

Замечание:

$_SERVER - специальная зарезервированная переменная PHP, которая содержит всю информацию, полученную от Web-сервера. Её также называют суперглобальной. Для более подробной информации смотрите раздел Суперглобальные переменные.

Для вывода данной переменной мы сделаем так:

Пример #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, то вы уже заметили что-то схожее. Если же вы не знаете C или подобного по синтаксису языка, то лучший вариант - взять какую-либо вводную книжку по PHP и прочитать первые пару глав. Другой вариант - почитать раздел Описание языка данного руководства.

Кроме этого, здесь присутствует вызов функции str_contains(). str_contains() - встроенная в PHP функция, которая определяет, содержит ли данная строка другую строку. В данном случае мы ищем строку 'Firefox' (так называемую "иголку" - needle) в $_SERVER['HTTP_USER_AGENT'] (в так называемом "сене" - haystack). Если "иголка" найдена внутри "сена", функция возвращает true. В противном случае она возвращает false. Если она вернёт true, то условие в if окажется истинным (true), и код в фигурных скобках ({ }) выполнится. В противном случае этот код не выполняется. Попробуйте создать аналогичные примеры с использованием команд if, else и других функций, таких, как strtoupper() и strlen(). Также подобные примеры содержатся во многих описаниях функций в данном руководстве. Если вы не знаете, как использовать функции, возможно, вам стоит прочесть страницу руководства о том, как читать определения функций и раздел о функциях в 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 для вывода, мы вышли из режима кода и просто послали содержимое HTML. Важный момент здесь то, что логическая структура кода PHP при этом не теряется. Только одна HTML-часть будет послана клиенту в зависимости от результата функции str_contains() (другими словами, в зависимости от того, найдена была строка Firefox или нет).

add a note

User Contributed Notes 2 notes

up
185
Declan Kelly
9 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
-77
Evan Z
2 years 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