| |||||||||||||||||||||||||||||||||
Атомная энергетика. Ядерные реакторы АЭС. Атомный флот. Ядерное оружие |
|||
| РБМК-1000 | |||
| Гражданский суда | |||
| Авиация | |||
Высшая математика |
|||
| Задачи | |||
| Практикум | |||
| Карта сайта | |||
Проект: идентификация браузера |
Каждый программист, пытающийся создать удобный web-сайт, должен учитывать различия в форматировании страниц при просмотре сайта в разных браузерах и операционных системах. Хотя консорциум W3 (http://www.w3.org) продолжает публиковать стандарты, которых должны придерживаться программисты при создании web-приложений, разработчики браузеров любят дополнять эти стандарты своими маленькими <усовершенствованиями>, что в конечном счете вызывает хаос и путаницу. Разработчики часто решают эту проблему, создавая разные страницы для каждого типа браузера и операционной системы - при этом объем работы значительно увеличивается, но зато итоговый сайт идеально подходит для любого пользователя. Результат - хорошая репутация сайта и уверенность в том, что пользователь посетит его снова. Чтобы пользователь мог просматривать страницу в формате, соответствующем специфике его браузера и операционной системы, из входящего запроса на получение страницы извлекается информация о браузере и платформе. После получения необходимых данных пользователь перенаправляется на нужную страницу. Приведенный ниже проект (sniffer.php) показывает, как использовать функции РНР для работы с регулярными выражениям с целью получения информации по запросам. Программа определяет тип и версию браузера и операционной системы, после чего выводит полученную информацию в окне браузера. Но прежде чем переходить к непосредственному анализу программы, я хочу представить один из главных ее компонентов - стандартную переменную РНР $HTTP_USER_AGENT. В этой переменной в строковом формате хранятся различные сведения о браузере и операционной системе пользователя - именно то, что нас интересует. Эту информацию можно легко вывести на экран всего одной командой: <? echo $HTTP USER_AGENT; ?> При работе в Internet Explorer 5.0 на компьютере с Windows 98 результат будет выглядеть так: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) Для Netscape Navigator 4.75 выводятся следующие данные: Mozilla/4.75 (Win98; U) Sniffer.php извлекает необходимые данные из $HTTP_USER_AGENT при помощи функций обработки строк и регулярных выражений. Алгоритм программы на псевдокоде: Определить две функции для идентификации
браузера и операционной системы: browser_info( ) и opsys_info( ). Начнем с псевдокода
функции browser_info( ).
/* Файл : sniffer.php Назначение: Идентификация типа/версии браузера и платформы Автор: В. Дж. Гилмор Дата : 24 августа 2000 г. */ // Функция: browser_info // Назначение: Возвращает тип и версию браузера function browser_info ($agent) { // Определить тип браузера // Искать сигнатуру Internet Explorer if (ereg('MSIE ([0-9].[0-9]{1,2})', $agent, $version)) $browse_type = "IE"; $browse version = $version[1]; // Искать сигнатуру Opera elseif (ereg( 'Opera ([0-9].[0-9]{1,2})'. $agent, $version)): $browse_type = "Opera": $browse_version = $version[1]: // Искать сигнатуру Netscape. Проверка браузера Netscape // *должна* выполняться после проверки Internet Explorer и Opera, // поскольку все эти браузеры любят сообщать имя // Mozilla вместе с настоящим именем. elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})'. $agent, $version)) : $browse_type = "Netscape"; $browse_version = $version[1]; // Если это не Internet Explorer, Opera или Netscape. // значит, мы обнаружили неизвестный браузер, else : $browse_type = "Unknown"; $browse_version = "Unknown"; endif: // Вернуть тип и версию браузера в виде массива return array ($browse_type, $browse_version); } // Конец функции browser_info // Функция: opsys_info // Назначение: Возвращает информацию об операционной системе пользователя function opsys_info($agent) { // Идентифицировать операционную систему // Искать сигнатуру Windows if ( strstr ($agent. 'win') ) : $opsys = "windows"; // Искать сигнатуру Linux elseif ( strstr($agent, 'Linux') ) : $opsys = "Linux"; // Искать сигнатуру UNIX elseif ( strstr (Sagent, 'Unix') ) : $opsys = "Unix"; // Искать сигнатуру Macintosh elseif ( strstr ($agent, 'Mac') ) : $opsys = "Macintosh"; // Неизвестная платформа else : $opsys = "Unknown"; endif; // Вернуть информацию об операционной системе return $opsys; } // Конец функции opsys_info // Сохранить возвращаемый массив в списке list ($browse_type. $browse_version) = browser_info ($HTTP_USER_AGENT); Soperating_sys = opsysjnfo ($HTTP_USER_AGENT); print "Browser Type: $browse_type <br>"; print "Browser Version: $browse_version <br>"; print "Operating System: $operating_sys <br>": ?> Вот и все! Например, если пользователь работает в браузере Netscape 4.75 на компьютере с системой Windows, будет выведен следующий результат: Browser Type: Netscape Browser Version: 4.75 Operating System: Windows В следующей главе вы научитесь осуществлять переходы между страницами и даже создавать списки стилей (style sheets) для конкретных операционной системы и браузера. Итоги В этой главе был изложен довольно обширный материал. Какой прок от языка программирования, если в нем нельзя работать с текстом? Мы рассмотрели следующие темы: общие
сведения о регулярных выражениях в стилях POSIX и Perl; |
| На главную |