[php] Browser detectie en hierop redirect

Pagina: 1
Acties:
  • 118 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Hey,

Momenteel maak ik gebruik van JavaScript voor browser detectie, maar gezien dit client-side is, wil ik dit graag in .php hebben.

Ik heb hier een daar rond gekeken, maar kom eigenlijk niet zo 123 uit die scriptjes, en bij testen bleken er toch foutjes in te zitten. Die rommel heb ik dus weggegooid. Ik hoop eigenlijk dat er hiero iemand is die al eens zoiets gemaakt heeft en het zou willen delen, of dat we gezamelijk een script in elkaar kunnen zetten.

De bedoeling voor de site is simpel.

Als browser IE 5, 5.5, 6.* is, dan page.html (en andere versies van IE krijgen page1.html)
Als browser NS 6.* is, dan page.html (en andere versies van NS krijgen page1.html)
Als browser Opera 6.* is, dan page.html (en andere versies van Opera krijgen page1.html)
Als browser Mozilla 0.9.* is, dan page.html (en andere versies van Mozilla krijgen page1.html)
Is de browser niet een van de bovenstaande, dan page1.html

(extra vraag: is het eigenlijk mogelijk om met PHP te checken of iemand coockies accepteerd of niet?)
(extra vraag (nog1): is het eigenlijk mogelijk om met PHP te checken of iemand javascript accept, of niet?)


Ik weet in ieder geval wel dat ik "$HTTP_USER_AGENT" nodig heb en 'if then else'.

if ($HTTP_USER_AGENT,'Opera') {
versie check hier {
laad page.html;
en anders page1.html;
}
}

Ik ga zo nog even nadenken, maar .. zie sterretjes.

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?
global $HTTP_USER_AGENT, $BName, $BVersion, $BPlatform; 
function detect_browser() 
{ 
global $HTTP_USER_AGENT, $BName, $BVersion, $BPlatform; 

// Browser 
if(eregi("(opera)
([0-9]{1,2}.[0-9]{1,3}){0,1}",$HTTP_USER_AGENT,$match) ||
eregi("(opera/)([0-9]{1,2}.[0-9]{1,3}){0,1}",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "Opera"; $BVersion=$match[2]; 
} 
elseif(eregi("(konqueror)/([0-9]{1,2}.[0-9]{1,3})",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "Konqueror"; $BVersion=$match[2]; 
} 
elseif(eregi("(lynx)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "Lynx "; $BVersion=$match[2]; 
} 
elseif(eregi("(links)
\(([0-9]{1,2}.[0-9]{1,3})",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "Links "; $BVersion=$match[2]; 
} 
elseif(eregi("(msie)
([0-9]{1,2}.[0-9]{1,3})",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "MSIE "; $BVersion=$match[2]; 
} 
elseif(eregi("(netscape6)/(6.[0-9]{1,3})",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "Netscape "; $BVersion=$match[2]; 
} 
elseif(eregi("mozilla/5",$HTTP_USER_AGENT)) 
{ 
$BName = "Netscape"; $BVersion="Unknown"; 
} 
elseif(eregi("(mozilla)/([0-9]{1,2}.[0-9]{1,3})",$HTTP_USER_AGENT,$match)) 
{ 
$BName = "Netscape "; $BVersion=$match[2]; 
} 
elseif(eregi("w3m",$HTTP_USER_AGENT)) 
{ 
$BName = "w3m"; $BVersion="Unknown"; 
} 
else{$BName = "Unknown"; $BVersion="Unknown";} 

// System 
if(eregi("linux",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "Linux"; 
} 
elseif(eregi("win32",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "Windows"; 
} 
elseif((eregi("(win)([0-9]{2})",$HTTP_USER_AGENT,$match)) ||
(eregi("(windows) ([0-9]{2})",$HTTP_USER_AGENT,$match))) 
{ 
$BPlatform = "Windows $match[2]"; 
} 
elseif(eregi("(winnt)([0-9]{1,2}.[0-9]{1,2}){0,1}",$HTTP_USER_AGENT,$match)) 
{ 
$BPlatform = "Windows NT $match[2]"; 
} 
elseif(eregi("(windows nt)(
){0,1}([0-9]{1,2}.[0-9]{1,2}){0,1}",$HTTP_USER_AGENT,$match)) 
{ 
$BPlatform = "Windows NT $match[3]"; 
} 
elseif(eregi("mac",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "Macintosh"; 
} 
elseif(eregi("(sunos)
([0-9]{1,2}.[0-9]{1,2}){0,1}",$HTTP_USER_AGENT,$match)) 
{ 
$BPlatform = "SunOS $match[2]"; 
} 
elseif(eregi("(beos)
r([0-9]{1,2}.[0-9]{1,2}){0,1}",$HTTP_USER_AGENT,$match)) 
{ 
$BPlatform = "BeOS $match[2]"; 
} 
elseif(eregi("freebsd",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "FreeBSD"; 
} 
elseif(eregi("openbsd",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "OpenBSD"; 
} 
elseif(eregi("irix",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "IRIX"; 
} 
elseif(eregi("os/2",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "OS/2"; 
} 
elseif(eregi("plan9",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "Plan9"; 
} 
elseif(eregi("unix",$HTTP_USER_AGENT) ||
eregi("hp-ux",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "Unix"; 
} 
elseif(eregi("osf",$HTTP_USER_AGENT)) 
{ 
$BPlatform = "OSF"; 
} 
else{$BPlatform = "Unknown";} 

/* 
echo $HTTP_USER_AGENT; 
echo $BName; 
echo $BVersion; 
echo $BPlatform; 
*/ 
} 
?>

http://www.php.net/manual/en/function.get-browser.php <-- hier staat genoeg leesvoer, als je dat allemaal bekijkt en ff een beetje bestudeert kun je het binnen 1 uur in elkaar knutstelen.

Het enige dat je moet weten zijn alle strings die hij retourneert, en daar staan er iig een hoop! :)

Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Heel erg bedankt, maar momenteel krijg ik een witte pagina. Die echo die hij moet geven komt niet naar boven.

Voor get_browser() moet browscap.ini goed staan, ik wil hier niet vanuit gaan.

Als bovenstaande code werkt, nog even de redirect regelen, maar dat moet wel te doen zijn.

BBL

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
dennisdotcom heeft al een goede link gegeven, dus ik heb ff wat geknipt in je quote.
Op vrijdag 28 december 2001 08:14 schreef xiphoid het volgende:
(extra vraag: is het eigenlijk mogelijk om met PHP te checken of iemand coockies accepteerd of niet?)
Ja, maar het werkt dan niet echt fijn(dit is volgens mij de makkelijkste oplossing):
Page1.php -> setcookie, header('Location: Page2.php')
Page2.php -> uitlezen cookie vars, als ie niet bestaat dan is er geen cookieondersteuning. Dit zou je dan misschien in een sessie op kunnen slaan, zodat je niet elke keer hoeft te redirecten hiervoor.
(extra vraag (nog1): is het eigenlijk mogelijk om met PHP te checken of iemand javascript accept, of niet?)
Ja en nee.
Ja, met de link van dennisdotcom, dan kun je per browser bekijken of die het wel aankan, maar dan weet je nog steeds niet of die aanstaat. Ik denk dat je dan in Page1 wat JS gooit die Page2 aanroept met wat secret vars voor JS-enabled en anders heb je geen JS. Dit kan je dan weer in een sessie gooien.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
Op vrijdag 28 december 2001 08:25 schreef xiphoid het volgende:
Heel erg bedankt, maar momenteel krijg ik een witte pagina.
Dan moet je ff de echo's uncommenten. :+

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
Op vrijdag 28 december 2001 08:28 schreef Taradino het volgende:
Dan moet je ff de echo's uncommenten. :+
:D

Btw, ik moet zelf ook nog zo'n script hebben voor mn site, dus ik ga zelf ook ff er wat mee klooien, want het komt me zelf goed van pas :)

Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Ik zie dat dennis de code heeft van de link die hij gaf, en ik zie nu pas idd dat echo commented staat, niet slim van me,.. zo zie je maar.. waarom 9/10 test.php's niet werken bij mij .. zie op gegeven moment niet meer waar ik mee bezig ben. zucht. Tijd om maar eens naar bed te gaan?

Nee, we code lekker verder. Volgens mij heb ik nu werkende versie. bbl *again

Fnx guys !


[update]
Uncommented, nog steeds wit! >:)

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
Op vrijdag 28 december 2001 08:37 schreef xiphoid het volgende:
[update]
Uncommented, nog steeds wit! >:)
detect_browser() ff aanroepen wil ook wel helpen.

dennis: waarom eigenlijk voor het begin van de functie dit:
code:
1
global $HTTP_USER_AGENT, $BName, $BVersion, $BPlatform;

:?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Momenteel heb ik mijn test.php hiero: test.php

en de source code hiero:
test.phps

Deze lijkt wel goed te werken, ook gevonden via php.net (eindelijk) en nu nog even laten redirecten (en eerst even filteren wat overbodig is)

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
Op vrijdag 28 december 2001 08:43 schreef Taradino het volgende:
dennis: waarom eigenlijk voor het begin van de functie dit:
code:
1
global $HTTP_USER_AGENT, $BName, $BVersion, $BPlatform;

:?
Geen idee, ik heb het ook maar gecopy-paste van die link naar php.net die ik gaf :+

Trouwens, ik kwam deze net tegen: http://sourceforge.net/project/showfiles.php?group_id=26044&release_id=66612

Daar heb je echt een hoop aan!!!

Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
Hé kijk :+
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$user_agent = array(
'Mozilla/3.0 (compatible; Opera/3.0; Windows 95/NT4)',
'Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 5.11  [en]',
'Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)',
'Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0)',
'Mozilla/4.5 [en] (Win95; U)',
'Mozilla/4.5 (Macintosh; U; PPC)',
'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9+) Gecko/20010509',
'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; m18) Gecko/20010131 Netscape6/6.01',
'Opera/5.11 (Windows 2000; U)  [en]',
'NCSA Mosaic/2.6b1 (X11;UNIX_SV 4.2MP R4000) libwww/2.12 modified',
'Lynx/2.7 libwww-FM/2.14',
'amaya/V4.3.2 libwww/5.3.1',
'Mozilla/4.0 (compatible; MSIE 5.5; Mac_PowerPC; OmniWeb/4.0)',
'mozilla/4.0 (compatible; msie 5.0; linux 2.4.16 i686) opera 5.0  [en]',
'mozilla/5.0 (compatible; konqueror/2.2.1; linux)',
'mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; q312461)',
'mozilla/4.0 (compatible; msie 5.5; windows 98; win 9x 4.90)');
?>

*D

Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Maar dan 'preset' je ze dus.
Wat nu als er iemand ie6 op win98 runt? .. (als dat kan)

Ook leuk om te zien, waarom is nt 5.0 wel mozilla 5.0 met ie6 en nt 5.1 met ie6 maar 4.0 ?

Das off topic :)


Iig wel tof om de mogelijkheden even te zien!


[update]

met lynx:

Agent: Lynx/2.8.3rel.1 libwww-FM/2.14
IE:
Version: 0
Agent: OTHER

Geen versie, maar wel in agent. .. mijn test.php oops?


met mozilla 0.9.7:

Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.7) Gecko/20011221
IE:
Version: 5.0
Agent: MOZILLA

lijkt me goed!


met winxp ie6:

Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)
IE: 1
Version: 6.0
Agent: IE

lijkt me ook goed.

heb ik aan AGENT & VERSION genoeg om te bepalen wat iemand gebruikt?

als agent =
of IE
of NS
of Opera
en versie =
5.* of hoger
dan page.html
anders page1.html

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
Nu moet hiero dus nog komen .. als browser is ie en versie is 6 dan laden page.html en als browser is ns en versie 6 dan laden page.html en als opera versie 6 dan page.html en anders page1.html
Moeten we nou echt _alles_ voorkauwen? Je hebt de browser met je scriptje, je hebt de versie, je kan nu toch zelf wel een if statement verzinnen om hierop te checken?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
xiphoid: check die link die ik net hierboven gaf, daar staat een programma die alles goed controleert!

[edit]
Enige bug die ik daarin bespeur is dat de browser (dus niet de agent) versies van Mozilla niet worden weergegeven.

Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Op vrijdag 28 december 2001 09:00 schreef Taradino het volgende:

[..]

Moeten we nou echt _alles_ voorkauwen? Je hebt de browser met je scriptje, je hebt de versie, je kan nu toch zelf wel een if statement verzinnen om hierop te checken?
Dat was niet voor jullie hoor :)
Meer voor mezelf, zo van, als dit bovenste werkt, dan hiero dus die code stoppen. Die if statements ben ik nu aan het maken.

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
Op vrijdag 28 december 2001 09:08 schreef xiphoid het volgende:
Dat was niet voor jullie hoor :)
Meer voor mezelf, zo van, als dit bovenste werkt, dan hiero dus die code stoppen. Die if statements ben ik nu aan het maken.
Ga jij straks je code nog publiek maken :?
Want ik ben wel benieuwd hoe je het gaat doen :)

Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Yeah sure, ik had venster open gelaten,
maar moest wel even ontbijtje maken voor mijn vrouw en we gaan nu boodschappen doen enzo. Vanavond weer denk ik.

http://mrfloris.com


Acties:
  • 0 Henk 'm!

  • xiphoid
  • Registratie: Augustus 2000
  • Laatst online: 10-10-2023

xiphoid

I am just me

Topicstarter
Tot nu toe nog geen tijd gehad !! Te veel vrije tijd die ik besteed IRL ..

http://mrfloris.com

Pagina: 1