П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3503 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6104 раз(а).

Учебник HTML.
Просмотров 3267 раз(а).

Руководство по PHP5.
Просмотров 5486 раз(а).

Хостинг через призму DNS.
Просмотров 4125 раз(а).

Подборка текстов стандартных документов.
Просмотров 55763 раз(а).

Учебник PHP - Самоучитель
Просмотров 3078 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5487 раз(а).

Внешние атаки...
Просмотров 3824 раз(а).

Учебник PHP.
Просмотров 2819 раз(а).

SSI в примерах.
Просмотров 37454 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





ГЛАВА 8. Строки и регулярные выражения

Проект: идентификация браузера

Каждый программист, пытающийся создать удобный 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().
  • Определить тип браузера, используя функцию егед(). Хотя эта функция работает медленнее упрощенных строковых функций типа strstr(), в данном случае она удобнее, поскольку регулярное выражение позволяет определить версию браузера.
  • Воспользоваться конструкцией if/elseif для идентификации следующих браузеров и их версий: Internet Explorer, Opera, Netscape и браузер неизвестного типа.
  • Вернуть информацию о типе и версии браузера в виде массива.
  • Функция opsys_info() определяет тип операционной системы. На этот раз используется функция strstr(), поскольку тип ОС определяется и без применения регулярных выражений.
  • Воспользоваться конструкцией if/elseif для идентификации следующих систем: Windows, Linux, UNIX, Macintosh и неизвестная операционная система.
  • Вернуть информацию об операционной системе.

Листинг 8.3. Идентификация типа браузера и операционной системы клиента

<?
/*
Файл : 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); 

$operating_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) для конкретных операционной системы и браузера.

Назад | Содержание раздела | Общее Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru