webForumDet fria alternativet

Browser check

5 svar · 560 visningar · startad av BABBA

BABBAMedlem sedan feb. 2000280 inlägg
#1

Ser någon nåt direkt fel i denna kod:

---
<?
function check_browser()
{
$Browser_Name = strtok($HTTP_USER_AGENT, "/");
$Browser_Version = strtok( " ");
$ok = false;

   	  if(ereg( "MSIE", $HTTP_USER_AGENT)) 
	  { 
    	$Browser_Name = "MSIE"; 
    	$Browser_Version = strtok( "MSIE"); 
    	$Browser_Version = strtok( " "); 
    	$Browser_Version = strtok( ";"); 
	  }

  if(($Browser_Name=="Mozilla") && ($Browser_Version\>=4))
	$ok = true;

  if(($Browser_Name=="MSIE") && ($Browser_Version\>=4))
	$ok = true;
}
return $ok;

?>
---

Koden har jag i en fil som heter browser.php3
Sedan inkluderar jag den i varje sida och kollar om det är ok..:

require("browser.php3");
if(!check_browser()) header("Location:error.htm");

------------------
BABBA

http://www.babba.f2s.com

emissionMedlem sedan dec. 19996 721 inlägg
#2

Strtok() tycker inte om strängar som separator (i det här fallet "MSIE"), trots att det står så i dokumentationen. Explode fungerar dock.

Dessutom är det lite lustigt med ...

$Browser_Version = strtok( "MSIE");
$Browser_Version = strtok( " ");
$Browser_Version = strtok( ";");

Är det bara för att föra fram strtok-pekaren, eller?

BABBAMedlem sedan feb. 2000280 inlägg
#3

Det luriga är att koden funkar utmärkt i ett större script men ej i mitt fall.

Här är källan till scriptet:
http://px.sklar.com/code-pretty.html?code_id=10

Varför funkar inte min variant???

------------------
BABBA

http://www.babba.f2s.com

nicclasMedlem sedan feb. 20001 050 inlägg
#4

Hejsan,

Så här fungerar det bättre:

<?
function check_browser(){
  global $HTTP_USER_AGENT;
  $Browser_Name = strtok($HTTP_USER_AGENT, "/"); 
  $Browser_Version = strtok( " ");
  $ok = false;

  if(ereg( "MSIE", $HTTP_USER_AGENT)) { 
    $Browser_Name = "MSIE"; 
    $Browser_Version = strtok( "MSIE"); 
    $Browser_Version = strtok( " "); 
    $Browser_Version = strtok( ";"); 
  }

  if(($Browser_Name=="Mozilla") && ($Browser_Version>=4))
    $ok = true;

  if(($Browser_Name=="MSIE") && ($Browser_Version>=4))
    $ok = true;
  return $ok;
}
?>

<html>
<body>
test
<?
if(!check_browser()) echo "error";
?>
</body>
</html>

Jag identifierade två "fel" i din kod. 1) Variablen $HTTP_USER_AGENT är deklarerad i "huvudprogrammet" mens du använder den i din funktion, och alltså måste du deklarera den som "global" först i funktionen. 2) Din return-sats har hamnat utanför funktionen.

/nicclas @ http://www.nic-sys.se

BABBAMedlem sedan feb. 2000280 inlägg
#5

Hej ocj tack för hjälpen!

"return $ok;" som låg utanför funktionen var ett rent slarvfel när jag postade inlägget, men att HTTP_USER_AGENT skulle vara global var något nytt.

Tackar och bockar!

------------------
BABBA

http://www.babba.f2s.com

woodiMedlem sedan feb. 20001 270 inlägg
#6

Babba
Alla variabler som kommer utifrån in i en tabell måste vara globala..
Detta gäller även environment-variabler som $QUERY_STRING, $HTTP_USER_AGENT, $REMOTE_HOST m.fl.

------------------
Svenska FF1
www.johan-skog.nu
/W*

122 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)