İşe yarar bir şey

Şimdi daha işe yarar bir şey yapalım. Ziyaretçilerinizin hangi tarayıcıyı kullandığını tespit edelim. Bunun için, ziyaretçinizin tarayıcısı tarafından HTTP isteği ile birlikte gönderilen kullanıcı aracısı dizgesine bakacağız. Bu bilgi bir değişkende saklanır. Değişkenler PHP'de her zaman dolar işareti ile başlar. Bizim şu an için ilgilendiğimiz değişken $_SERVER['HTTP_USER_AGENT']'tir.

Bilginize:

$_SERVER PHP kullanımına ayrılmış özel bir değişken olup HTTP sunucusunun tüm bilgilerini içerir. Bu tür değişkenlere süper küreseller denir. Bu konuda daha ayrıntılı bilgiyi Süper küreseller bölümünde bulabilirsiniz. Bu özel değişkenler PHP » 4.1.0 sürümünden itibaren kullanılmaya başlanmıştır. Daha öncesinde, $HTTP_SERVER_VARS gibi eski $HTTP_*_VARS dizileri kullanılmaktaydı. Ömrünü doldurmuş olsa da, bu eski tarz değişkenler hala kullanılabilmektedir. (Eski kod bölümüne de bakınız.)

Bu değişkenin değerini görüntülemek için yapmanız gereken:

Örnek 1 - Bir değişkeni (dizi öğesini) yazdırmak

<?php echo $_SERVER['HTTP_USER_AGENT']; ?>

Bu betiğin çıktısı şöyle bir dizge olabilirdi:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

PHP'de birçok farklı değişken türü mevcuttur. Yukardaki örnekte bir diziye ait bir öğeyi yazdırdık. Diziler çok kullanışlı olabilirler.

$_SERVER PHP tarafından kullanımınıza özdevinimli olarak sunulan bir değişkendir. Kullanım kılavuzunun Öntanımlı Değişkenler bölümünden tümünün listesine ulaşabilirsiniz ya da önceki örnekte kullandığımız phpinfo() işlevi ile üretilen çıktıya bakarak bütün listeye ulaşabilirsiniz.

PHP etiketinin içine birden çok PHP komutu koyabilir ve tek bir echo komutundan daha fazlasını yapan küçük kod blokları oluşturabilirsiniz. Örneğin, ziyaretçinizin Internet Explorer kullanıp kullanmadığını şöyle öğrenebilirsiniz:

Örnek 2 - Denetim yapılarının ve işlevlerin kullanım örneği

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'Internet Explorer kullanmaktasınız.<br />';
}
?>

Bu betiğin çıktısı şöyle olabilirdi:

Internet Explorer kullanmaktasınız.<br />

Burada birkaç yeni kavramı devreye soktuk. Bir if deyimimiz var. Eğer C dilinde kullanılan temel sözdizimine aşinalığınız varsa, bu kullanım size tanıdık gelecektir. Aksi takdirde, giriş düzeyinde bir PHP kitabı almanız ve ilk birkaç bölümünü okumanız ya da kılavuzun Dil Başvuru Kılavuzu bölümünü okumanız faydalı olacaktır.

Devreye soktuğumuz ikinci kavram, strpos() işlevi ile yaptığımız çağrı oldu. strpos(), bir dizgeyi başka bir dizgenin içinde arayan yerleşik bir PHP işlevidir. Burada 'MSIE' dizgesini (iğne) $_SERVER['HTTP_USER_AGENT'] içinde (samanlık) arıyoruz. Eğer iğne samanlıkta bulunursa işlev iğnenin konumunu samanlığın başlangıcına göreli olarak döndürür. Aksi takdirde FALSE döner. if ifadesinin sonucu TRUE olduğu takdirde FALSE dönmez ve kaşlı ayraçlar arasındaki kod çalıştırılır. Aksi takdirde kod çalıştırılmaz. If, else gibi denetim yapıları ile strtoupper() ve strlen() gibi işlevleri kullanarak siz de benzer örnekler yazabilirsiniz. İlgili her kılavuz sayfası aynı zamanda örnekler de içermektedir. Bu işlevleri nasıl kullanmanız gerektiğinden emin değilseniz, kılavuzdaki bir işlev tanımı nasıl okunur ve PHP işlevleri bölümlerini okuyabilirsiniz.

Bunu bir adım öteye taşıyabilir ve bir PHP bloğunun tam ortasındayken bile PHP kipine nasıl girip çıkabileceğimize bakabiliriz:

Örnek 3 - HTML ve PHP kiplerini karıştırmak

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() false olmayan bir değer döndürmelidir</h3>
<p>Internet Explorer kullanmaktasınız</p>
<?php
} else {
?>
<h3>strpos() false döndürmelidir</h3>
<p>Internet Explorer kullanmıyorsunuz</p>
<?php
}
?>

Bu betikten elde edilebilecek sonuçlardan biri:

<h3>strpos() false olmayan bir değer döndürmelidir</h3>
<p>Internet Explorer kullanmaktasınız</p>

Bir çıktı üretmek için PHP echo komutunu kullanmak yerine, PHP kipinden çıktık ve sadece düz HTML gönderdik. Burada dikkat edilmesi gereken önemli nokta, betiğin mantıksal akışının değişmiyor olmasıdır. strpos() işlevinden edinilen sonuca göre HTML bloklarından yalnızca biri görüntüleyiciye gönderilmektedir. Başka bir deyişle, bu işleyiş MSIE değişkeninin bulunup bulunmamasına bağlıdır.

add a note add a note

User Contributed Notes 3 notes

up
190
Declan Kelly
3 years ago
Please note that Internet Explorer 11 no longer contains MSIE in its user agent string, for example on Windows 8 with IE11 I get the following:

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

So if you want to include a test for IE11, the code above changes to:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
   
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
    echo
'You are using Internet Explorer.<br />';
}
?>
up
20
Bilal S.
1 year ago
On Edge, the user agent string does not contain 'MSIE' neither 'Trident', but rather 'Edge'.
up
18
rfantin at coralwood dot com
10 years ago
While it's easy to get carried away mixing your logic and presentation together since it's so easy to do, you're better off using PHP within HTML only to fill in values, or include other source files.

Keep your actual processing in separate libraries that are called before you send any headers to the page. Try to avoid calling a script that retrieves or sets information, or manipulates it in the middle of your HTML. You'll find it's much easier to maintain.
To Top