От автора: в этой статье мы рассмотрим, как взаимодействует с PHP веб. В частности, как PHP может предоставлять динамический контент в зависимости от типа браузера, произвольно сгенерированных чисел или данных, введенных пользователем. А также расскажем о перенаправлении браузера клиента.
Идентификация браузера и платформы
PHP создает ряд переменных среды, их можно найти на странице phpinfo.php, которая использовалась для настройки среды PHP.
Одна из переменных среды, установленных PHP — HTTP_USER_AGENT, она идентифицирует браузер пользователя и операционную систему.
PHP предоставляет функцию getenv() для доступа к значению всех переменных среды. Информация, содержащаяся в переменной среды HTTP_USER_AGENT, может использоваться для создания динамического контента, соответствующего браузеру. В следующем примере показано, как вы можете определить браузер клиента и операционную систему.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
<html> <body> <?php function getBrowser() { $u_agent = $_SERVER['HTTP_USER_AGENT']; $bname = 'Unknown'; $platform = 'Unknown'; $version = ""; //Сначала определяем платформу? if (preg_match('/linux/i', $u_agent)) { $platform = 'linux'; }elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { $platform = 'mac'; }elseif (preg_match('/windows|win32/i', $u_agent)) { $platform = 'windows'; } // Далее получаем имя агента пользователя if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) { $bname = 'Internet Explorer'; $ub = "MSIE"; } elseif(preg_match('/Firefox/i',$u_agent)) { $bname = 'Mozilla Firefox'; $ub = "Firefox"; } elseif(preg_match('/Chrome/i',$u_agent)) { $bname = 'Google Chrome'; $ub = "Chrome"; }elseif(preg_match('/Safari/i',$u_agent)) { $bname = 'Apple Safari'; $ub = "Safari"; }elseif(preg_match('/Opera/i',$u_agent)) { $bname = 'Opera'; $ub = "Opera"; }elseif(preg_match('/Netscape/i',$u_agent)) { $bname = 'Netscape'; $ub = "Netscape"; } // в конце получаем корректный номер версии $known = array('Version', $ub, 'other'); $pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; if (!preg_match_all($pattern, $u_agent, $matches)) { // совпадающие номера не были найдены, просто продолжаем } // смотрим, сколько у нас есть $i = count($matches['browser']); if ($i != 1) { // мы получим два раза, так как еще не использовали аргумент 'other' //проверяем указана ли версия до или после имени if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){ $version= $matches['version'][0]; }else { $version= $matches['version'][1]; } }else { $version= $matches['version'][0]; } // проверяем, получили ли мы номер if ($version == null || $version == "") {$version = "?";} return array( 'userAgent' => $u_agent, 'name' => $bname, 'version' => $version, 'platform' => $platform, 'pattern' => $pattern ); } // теперь пробуем это $ua = getBrowser(); $yourbrowser = "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent']; print_r($yourbrowser); ?> </body> </html> |
На моем компьютере этот код дает следующий результат. На вашем компьютере результат может быть другим.
1 2 3 |
Your browser: Google Chrome 54.0.2840.99 on windows reports: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 |
Отображение изображений в случайном порядке
Функция PHP rand() используется для генерации случайного числа. Эта функция может генерировать числа в пределах заданного диапазона. Генератор случайных чисел следует сделать более непредсказуемым, чтобы не допустить генерации чисел по регулярному шаблону. Это достигается с помощью функции srand(), которая определяет начальное число генератора случайных чисел. Следующий пример демонстрирует, как вы можете показывать разные изображения каждый раз, выбирая одно из четырех изображений —
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<html> <body> <?php srand( microtime() * 1000000 ); $num = rand( 1, 4 ); switch( $num ) { case 1: $image_file = "/php/images/logo.png"; break; case 2: $image_file = "/php/images/php.jpg"; break; case 3: $image_file = "/php/images/logo.png"; break; case 4: $image_file = "/php/images/php.jpg"; break; } echo "Random Image : <img src=$image_file />"; ?> </body> </html> |
Этот код дает следующий результат:
Использование HTML-форм
Самое важное, что следует учитывать при работе с HTML-формами и PHP, это то, что любой элемент формы на HTML-странице будет автоматически доступен для PHP-скриптов. В приведенном ниже примере, попробуйте поместить исходный код в скрипт test.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php if( $_POST["name"] || $_POST["age"] ) { if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) { die ("invalid name and name should be alpha"); } echo "Welcome ". $_POST['name']. "<br />"; echo "You are ". $_POST['age']. " years old."; exit(); } ?> <html> <body> <form action = "<?php $_PHP_SELF ?>" method = "POST"> Name: <input type = "text" name = "name" /> Age: <input type = "text" name = "age" /> <input type = "submit" /> </form> </body> </html> |
Этот код даёт следующий результат:
Переменная PHP по умолчанию $_PHP_SELF используется для имени скрипта PHP, и когда вы нажимаете кнопку «отправить», будет вызываться тот же PHP-скрипт, что влечен за собой следующее:
Для отправки пользовательских данных в скрипт на сервере используется метод «POST». В общем существуют два метода отправки данных в скрипт на сервере, они рассмотрены в статье Методы GET & POST.
Перенаправление браузера
Функция PHP header() предоставляет необработанные заголовки HTTP в браузер — она может использоваться для редиректа в другое место. Скрипт редиректа должен размещаться в самом верху страницы, чтобы не допустить загрузку любой другой части страницы.
Место назначения редиректа указано в заголовке Location: как аргумент функции header(). После вызова этой функции можно использовать функцию exit() для прекращения парсинга остальной части кода.
В следующем примере показано, как можно перенаправить запрос браузера на другую веб-страницу. Попробуйте поместить исходный код в скрипт test.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php if( $_POST["location"] ) { $location = $_POST["location"]; header( "Location:$location" ); exit(); } ?> <html> <body> <p>Choose a site to visit :</p> <form action = "<?php $_SERVER['PHP_SELF'] ?>" method ="POST"> <select name = "location">. <option value = "//www.tutorialspoint.com"> Tutorialspoint.com </option> <option value = "//www.google.com"> Google Search Page </option> </select> <input type = "submit" /> </form> </body> </html> |
Этот код даёт следующий результат:
Отображение диалогового окна «Загрузка файла»
Иногда нам бывает нужно предоставить пользователю следующую возможность — чтобы при нажатии ссылки ему отображалось диалоговое окно «Загрузка файла», а не фактический контент. Это можно очень легко сделать с помощью HTTP-заголовка.
HTTP заголовок будет отличаться от фактического заголовка, в котором мы отправляем Content-Type со значением text/html\n\n. В этом случае тип контента будет — application / octet-stream, а к нему будет добавлено фактическое имя файла.
Например, если вы хотите сделать файл FileName загружаемым по данной ссылке, то это делается с помощью следующего синтаксиса.
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/perl # HTTP Header print "Content-Type:application/octet-stream; name=\"FileName\"\r\n"; print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n"; # Actual File Content open( FILE, "<FileName" ); while(read(FILE, $buffer, 100) ){ print("$buffer"); } |
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.