PDA

View Full Version : سوال: مشکل این کد با گوگل کروم



navid3d_69
یک شنبه 13 فروردین 1391, 06:52 صبح
این کد مشکلش چی هست همه مرورگر هارو درست تشخیص میده ولی گوگل کروم رو apple safari تشخیص میده




function detect(){
$browser = array ("IE", "OPERA", "CHROME", "NETSCAPE", "FIREFOX", "SAFARI");
$info['browser'] = "OTHER";
foreach ($browser as $parent){
$s = strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), $parent);
$f = $s + strlen($parent);
$version = substr($_SERVER['HTTP_USER_AGENT'], $f, 5);
$version = preg_replace('/[^0-9,.]/','',$version);
if($s){
$info['browser'] = $parent;
$info['version'] = $version;
}
}

return $info;
}

MMSHFE
یک شنبه 13 فروردین 1391, 09:09 صبح
فایل ضمیمه رو دریافت کنید.
موفق باشید.

navid3d_69
یک شنبه 13 فروردین 1391, 09:32 صبح
با این شرط باید چک بشه دیگه درسته؟






$d = Detect();
switch ($d['browser']){

case 'MSIE':

echo $ie;
break;

case 'OPERA':

echo $op;
break;

case 'CHROME':

echo $gc;
break;

case 'NETSCAPE':

echo $net;
break;

case 'SAFARI':

echo $sa;
break;

case 'FireFox':

echo $ff;
break;

default:

echo '$other';
break;




}

MMSHFE
یک شنبه 13 فروردین 1391, 09:38 صبح
کدی که گذاشتم هم مرورگر و هم سیستم عامل رو اعلام میکنه. اگه فقط مرورگر رو لازم دارین، از جایی که متغیر os$ مقداردهی میشه تا return رو حذف کنید و return رو هم تغییر بدین تا فقط browser$ رو برگردونه. بعد با همین شرطی که نوشتین میتونید بررسی کنید. البته Bot و Konqueror و Lynx , WebTV رو جا انداختین. موفق باشید.

navid3d_69
یک شنبه 13 فروردین 1391, 09:45 صبح
خیلی عجیبه من کد رو به این حالت تغییر دادم ولی بازم مقدار default شرط رو نشون میده




function Detect() {
$agent = &$_SERVER['HTTP_USER_AGENT'];
if((preg_match('#Nav#', $agent) || preg_match('#Gold#', $agent) || preg_match('#X11#', $agent) || preg_match('#Netscape#', $agent)) && !preg_match('#MSIE#', $agent) && !preg_match('#Mozilla#', $agent) && !preg_match('#Konqueror#', $agent)) $browser = 'Netscape';
elseif((preg_match('#Mozilla#', $agent) || preg_match('#FireFox#i', $agent) || preg_match('#Bon\.Echo#i', $agent)) && !preg_match('#MSIE#', $agent)) $browser = 'FireFox';
elseif(preg_match('#MSIE#', $agent)) $browser = 'MSIE';
elseif(preg_match('#Lynx#', $agent)) $browser = 'Lynx';
elseif(preg_match('#Opera#', $agent)) $browser = 'Opera';
elseif(preg_match('#WebTV#', $agent)) $browser = 'WebTV';
elseif(preg_match('#Konqueror#', $agent)) $browser = 'Konqueror';
elseif(preg_match('#google#i', $agent)) $browser = 'Chrome';
elseif(preg_match('#bot#i', $agent) || preg_match('#Slurp#', $agent) || preg_match('#Scooter#', $agent) || preg_match('#Spider#i', $agent) || preg_match('#Infoseek#i', $agent)) $browser = 'Bot';
else $browser = 'Other';

return $browser;
}

MMSHFE
یک شنبه 13 فروردین 1391, 09:47 صبح
پارامتر switch رو d$ بگذارین نه ['d['browser$
موفق باشید.

navid3d_69
یک شنبه 13 فروردین 1391, 09:53 صبح
کار کرد ولی این دفه گوگل کروم رو فایر فاکس میشناسه :لبخند: کد منم سفری میشناخت ممکنه از گوگل کروم باشه ؟

MMSHFE
یک شنبه 13 فروردین 1391, 10:01 صبح
این درست کار میکنه:


<?php
function Detect() {
$agent = &$_SERVER['HTTP_USER_AGENT'];
if((preg_match('#Nav#', $agent) || preg_match('#Gold#', $agent) || preg_match('#X11#', $agent) || preg_match('#Netscape#', $agent)) && !preg_match('#MSIE#', $agent) && !preg_match('#Mozilla#', $agent) && !preg_match('#Konqueror#', $agent)) $browser = 'Netscape';
elseif((preg_match('#Mozilla#', $agent) || preg_match('#FireFox#i', $agent) || preg_match('#Bon\.Echo#i', $agent)) && !preg_match('#MSIE#', $agent) && !preg_match('#Chrome#i', $agent)) $browser = 'FireFox';
elseif(preg_match('#MSIE#', $agent)) $browser = 'MSIE';
elseif(preg_match('#Lynx#', $agent)) $browser = 'Lynx';
elseif(preg_match('#Opera#', $agent)) $browser = 'Opera';
elseif(preg_match('#WebTV#', $agent)) $browser = 'WebTV';
elseif(preg_match('#Konqueror#', $agent)) $browser = 'Konqueror';
elseif(preg_match('#chrome#i', $agent)) $browser = 'Chrome';
elseif(preg_match('#bot#i', $agent) || preg_match('#Slurp#', $agent) || preg_match('#Scooter#', $agent) || preg_match('#Spider#i', $agent) || preg_match('#Infoseek#i', $agent)) $browser = 'Bot';
else $browser = 'Other';
return $browser;
}
?>

navid3d_69
یک شنبه 13 فروردین 1391, 10:05 صبح
این دفعه هم مقدار default رو توی کروم نشون میده فکر کنم برای مرورگر کروم باشه چون چند تا کد رو امتحان کردم همه همین مشکل رو داشتن

MMSHFE
یک شنبه 13 فروردین 1391, 10:08 صبح
ولی من امتحانش کردم، Chrome میزد.

navid3d_69
یک شنبه 13 فروردین 1391, 10:11 صبح
برای من ورژن 17 هست الان چک کردم با




<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false)
{
echo navid;
}
?>



درست هست

MMSHFE
یک شنبه 13 فروردین 1391, 10:13 صبح
یکبار دیگه چک کنید. الآن ویرایش کردم کد رو. نسخه Chrome من هم 17 هست.

navid3d_69
یک شنبه 13 فروردین 1391, 10:13 صبح
الان این کاملا درسته




<?php
function Detect() {
$agent = &$_SERVER['HTTP_USER_AGENT'];
if((preg_match('#Nav#', $agent) || preg_match('#Gold#', $agent) || preg_match('#X11#', $agent) || preg_match('#Netscape#', $agent)) && !preg_match('#MSIE#', $agent) && !preg_match('#Mozilla#', $agent) && !preg_match('#Konqueror#', $agent)) $browser = 'Netscape';
elseif(strpos($agent, 'Chrome')!== false) $browser = 'Chrome';
elseif((preg_match('#Mozilla#', $agent) || preg_match('#FireFox#i', $agent) || preg_match('#Bon\.Echo#i', $agent)) && !preg_match('#MSIE#', $agent)) $browser = 'FireFox';
elseif(preg_match('#MSIE#', $agent)) $browser = 'MSIE';
elseif(preg_match('#Lynx#', $agent)) $browser = 'Lynx';
elseif(preg_match('#Opera#', $agent)) $browser = 'Opera';
elseif(preg_match('#WebTV#', $agent)) $browser = 'WebTV';
elseif(preg_match('#Konqueror#', $agent)) $browser = 'Konqueror';
elseif(preg_match('#bot#i', $agent) || preg_match('#Slurp#', $agent) || preg_match('#Scooter#', $agent) || preg_match('#Spider#i', $agent) || preg_match('#Infoseek#i', $agent)) $browser = 'Bot';
else $browser = 'Other';
return $browser;
}
?>




شما اینو چک کنید ببنین درسته؟

MMSHFE
یک شنبه 13 فروردین 1391, 10:18 صبح
بله درسته ولی بهتره از preg_match استفاده بشه یا حداقل stripos که نسبت به بزرگی و کوچکی حروف حساس نباشه چون بعضی وقتها اسم Chrome رو با حروف کوچک میزنه. موفق باشید.

MMSHFE
یک شنبه 13 فروردین 1391, 10:20 صبح
الآن آخرین کدی که دادم رو توی ورژن 18 هم تست کردم کار میکرد. موفق باشید.