Я хочу сделать себе два сайта в одном, когда на сайт заходит Броузер, то показываем ему основной сайт, когда заходит Мобильный телефон, то Wap версию. Как мне это сделать? Наверное у хорошего сайта должно быть две его версии, Обычная и WAP - для сотовых телефонов. Сам сделал себе недавно эту вещь.
Вопрос не праздный, действительно, а как это сделать, ранее мы обсуждали функцию, которая определяет, Броузеры и Роботы, теперь добавим к ней ещё определение Сотовых телефонов. Итак, введём четыре базы данных: броузеры, роботы, системы и базу мобильных телефонов:
Теперь приведём саму функцию:
<?php
$base_browser = "base_browser.dat";
if (! @file_exists ($base_browser)){
@touch ($base_browser);
$fp = fopen ($base_browser, "w");
fwrite ($fp, 'opera
firefox
firebird
debian
epiphany
konqueror
netscape
lynx
webtv
links
avantgo
avant
cool-brouser
camino
galeon
icab
isilox
k-meleon
omniweb
seamonkey
safari
shiira
ibrowse
explorer
phoenix
chimera
thunderbird
songbird
webcapture
minefield
bonecho
aol
waterunicorn
fedora
multizilla
desktop/lx
netpositive
blazer
powertv
powermarks
browsex
acorn browse
granparadiso
sylera
oregano
amaya
sunplex
chrome
shiretoko
iceweasel
');
fclose ($fp);
}
$base_robot = "base_robot.dat";
if (! @file_exists ($base_robot)){
@touch ($base_robot);
$fp = fopen ($base_robot, "w");
fwrite ($fp, 'rambler
googlebot
aport
yahoo
msnbot
turtle
mail.ru
omsktele
yetibot
picsearch
sape.bot
sape_context
gigabot
snapbot
alexa.com
megadownload.net
askpeter.info
igde.ru
ask.com
qwartabot
yanga.co.uk
scoutjet
similarpages
oozbot
shrinktheweb.com
aboutusbot
followsite.com
dataparksearch
google-sitemaps
appEngine-google
feedfetcher-google
liveinternet.ru
xml-sitemaps.com
agama
metadatalabs.com
h1.hrn.ru
googlealert.com
seo-rus.com
yaDirectBot
yandeG
yandex
yandexSomething
Copyscape.com
AdsBot-Google
domaintools.com
Nigma.ru
bing.com
dotnetdotcom
');
fclose ($fp);
}
$base_system = "base_system.dat";
if (! @file_exists ($base_system)){
@touch ($base_system);
$fp = fopen ($base_system, "w");
fwrite ($fp, 'linux
mac
unix
freebsd
openbsd
os/2
irix
sunos
beos
netbsd
solaris
hpux
hp-ux
risc
aix
symbianos
cygwin
darwin
amigaos
webtv
powertv
openvms
dragonfly
symbian os
libwww
applewebkit
');
fclose ($fp);
}
$base_mobile = "base_mobile.dat";
if (! @file_exists ($base_mobile)){
@touch ($base_mobile);
$fp = fopen ($base_mobile, "w");
fwrite ($fp, 'ˆasus
ˆalcatel
ˆblackBerry
sonyEricsson
ˆericsson
ˆfly
ˆkddi
ˆklondike
ˆlge
ˆlg
ˆlenovo
m3Gate
maui
ˆmitsu
mobileExplorer
mobilePhone
ˆmot
smartphone
netFront
nokia
noki
ieMobile
mobile
opera Mini
opera Mobi
ˆphilips
ˆpanasonic
ˆsagem
ˆsamsung
ˆsec
sharp
ˆsie
sony cmd
up.Browser
wap
ˆxplore
ˆHTC
ˆpcl
176x220
');
fclose ($fp);
}
function _Replace_Bad_simbol ($path){
$path = @trim ( preg_replace ("/[ˆ\x20-\xFF]/","", @strval ($path)));
$path = str_replace ("'", '' ,$path);
$path = str_replace ('"', '' ,$path);
$path = str_replace ('<', '<',$path);
$path = str_replace ('>', '>',$path);
return trim ( preg_replace ("~[ ]+~s"," ",$path) );
}
// дополнительная функция, выводящая контент из конфиг. файлов
function base_for_search ($path){
$path = str_replace ("\r","", @trim ( @implode ("", @file ($path))));
return "~(" . str_replace ("\n","|", preg_quote ($path,"~")) . ")~i";
}
// применим её
$base_for_search_browser = base_for_search ($base_browser);
$base_for_search_robot = base_for_search ($base_robot);
$base_for_search_system = base_for_search ($base_system);
$base_for_search_mobile = base_for_search ($base_mobile);
$base_for_search_mobile = str_replace ('\ˆ','ˆ', substr ($base_for_search_mobile,0,-2));
$base_for_search_mobile = str_replace ('176x220','[0-9]{3}x[0-9]{3}',$base_for_search_mobile);
$base_for_search_mobile = $base_for_search_mobile."[ /-]?([a-z0-9]*)[ ]?[/]?[ ]?([a-zA-Z]*)(.*)~i";
function _Detect_browser($path=''){
global $base_for_search_browser, $base_for_search_system, $base_for_search_robot, $base_for_search_mobile;
$BName=$Brobot=$BVersion=$BPlatform='';
if (empty($path)){$path = _Replace_Bad_simbol ($_SERVER['HTTP_USER_AGENT']); }
$path = preg_replace ("~[\(;\)]+~",'',$path);
$path = preg_replace ("~[ ]+~"," ",$path);
if (preg_match($base_for_search_mobile,$path,$match)){
$BName = ucfirst ($match[1]);
if (preg_match("~ˆmot$~i",$BName)){ $BName = "Motorola";}
if (preg_match("~ˆsie$~i",$BName)){ $BName = "Siemens";}
if (preg_match("~ˆnokia|pcl$~i",$BName) and strlen ($match[2])>4){$match[2] = substr ($match[2],0,4); }
$BVersion = $match[2];
$BPlatform = 'MobilePhone';
$Brobot = 'Browser';
}
if (empty($BName)){
if (preg_match($base_for_search_robot, $path, $arr_r)){
$Brobot = ucfirst ($arr_r[0]);
$BName = 'Robot';
$BVersion = 'non';
$BPlatform = 'non';
}
}
if (empty($BName)){
$base_for_search_browser = trim ( str_replace (")~i", "", $base_for_search_browser));
if (preg_match($base_for_search_browser.")[0-9]{0,1}[ ]?[-]?[/]?[ ]?[v]?([0-9]{0,3}[\.]?[0-9]{0,1})~i",$path,$match)){
$BName = ucfirst ($match[1]);
$BVersion = $match[2];
}
elseif (preg_match("~ms[ ]?ie[ ]?([0-9]{0,1}[\.]?[0-9]{0,1})~i", $path, $match)){
$BName = "Explorer";
$BVersion = str_replace (' .','',$match[1]);
}
elseif (preg_match("~mozilla[0-9]{0,1}[ ]?[/]?[ ]?([0-9]{0,3}[\.]?[0-9]{0,1})~i",$path,$match)){
$BName = "Mozilla";
$BVersion = $match[1];
}
if (empty($BName)){$BName = 'Unknown'; $BVersion='Unknown';}
}
if ($BPlatform != 'MobilePhone'){
if (preg_match("~win[dows]{0,4}[ ]{0,1}(nt|xp|me|ce|9x|95|98|2000|32|3\.1)[ ]?[0-9]{0,1}[\.]?[0-9]{0,1}~i",$path,$matches)){
$matches[0] = preg_replace ("~[ ]+~i",'', trim ($matches[0]));
$matches[0] = preg_replace ("~dows~i",'',$matches[0]);
if (preg_match("~win(9x|98)~i",$matches[0])){$matches[0]='Win32';}
$BPlatform = $matches[0];
}
elseif (preg_match("~windows~i",$path)){ $BPlatform = 'Win32'; }
elseif (preg_match($base_for_search_system,$path,$matches)){
if (preg_match("~mac~i",$matches[0])){$matches[0]='MacOS';}
$BPlatform = $matches[0];
}
if (empty($BPlatform)){$BPlatform = 'Unknown';}
}
if ($BName!='Robot' and $BVersion!='Unknown' and $BPlatform!='Unknown'){$Brobot = 'Browser';}
else { $BVersion='non'; $BPlatform='non'; $BName='Robot'; if (empty($Brobot)){$Brobot='Unknown';} }
if ($BName!='Robot' and $BPlatform!='MobilePhone'){
$_array = array ();
if (! empty ($_SERVER['HTTP_ACCEPT'])) { $_array[] = 1; }
if (! empty ($_SERVER['HTTP_ACCEPT_ENCODING'])){ $_array[] = 2; }
if (! empty ($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $_array[] = 3; }
if (! empty ($_SERVER['HTTP_CONNECTION'])) { $_array[] = 4; }
if (count($_array) < 3){
$BVersion = "bad; ACCEPT="._Replace_Bad_simbol ($_SERVER['HTTP_ACCEPT']).
"; ENCODING="._Replace_Bad_simbol ($_SERVER['HTTP_ACCEPT_ENCODING']).
"; LANGUAGE="._Replace_Bad_simbol ($_SERVER['HTTP_ACCEPT_LANGUAGE']).
"; CONNECTION="._Replace_Bad_simbol ($_SERVER['HTTP_CONNECTION']);
}
}
return array ($BName,$BVersion,$BPlatform,$Brobot);
}
// $user_agent - строка о броузере
$user_agent = $_SERVER["HTTP_USER_AGENT"];
// применим основную функцию
$user_arr = _Detect_browser($user_agent);
// имя броузера
$BName = $user_arr[0];
// версия
$BVersion = $user_arr[1];
// платформа
$BPlatform = $user_arr[2];
// имя робота
$Brobot = $user_arr[3];
// Плохой броузер
if ( preg_match ("~bad~", $BVersion)){
$BName = 'Robot';
$Brobot = 'Unknown';
$user_agent = $BVersion;
}
if ($Brobot == "Unknown"){
// печатаем пользователю, что он плохой
print "Вы неопределённый Робот!";
// останавливаем программу
exit ;
}
elseif ($BName == "Robot"){
// если робот хороший
print "Вы Робот по имени $Brobot";
// даём индексировать весь сайт
}
elseif ($BPlatform == 'MobilePhone'){
// если на сайт мобилный телефон
print "Вы мобилный телефон по имени $BName $BVersion<br>";
// далее идёт WAP версия сайта
exit ;
}
elseif ($Brobot == "Browser"){
// если на сайт зашёл броузер
print "Вы броузер по имени $BName $BVersion<br>";
print "Ваша операционка $BPlatform";
}
// дальше основной скрипт
?>
Чего мы достигли: если на сайте Робот, проверяем его, если он плохой, то не даём ему ничего скачивать, если на сайте Сотовый телефон, то отдаём ему WAP версию сайта, если Броузер, то отдаём обычную версию сайта.
Зайдите на наш сайт через Мобильный Телефон, чтобы проверить как это работает. Если программа не определит Ваш сотовый телефон, просьба сообщить об этом на наш Емайл. Всем удачи в создании WAP сайтов.