CakeFest 2024: The Official CakePHP Conference

İşe yarar bir şey

Bu kez kod daha işe yarar bir şey yapsın. Ziyaretçinin hangi tarayıcıyı kullandığı tespit edilebilir. Bunun için, ziyaretçinin tarayıcısı tarafından HTTP isteği ile birlikte gönderilen kullanıcı aracısı dizgesine bakılır. Bu bilgi bir değişkende saklanır. Değişkenler PHP'de her zaman dolar imi ile başlar. Şu an için ilgilenilen 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ı bilgi Süper Küreseller bölümünde bulunabilir.

Bu değişkenin değerinin görüntülenmesi için yapılacaklar:

Ö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/5.0 (Linux) Firefox/112.0

PHP'de birçok farklı değişken türü mevcuttur. Yukardaki örnekte bir diziye ait bir öğe yazdırıldı. Diziler çok daha kullanışlı olabilir.

$_SERVER PHP tarafından kullanıma otomatik 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şılabilir ya da önceki örnekte kullanılan phpinfo() işlevi ile üretilen çıktıya bakarak bütün listeye ulaşılabilir.

PHP etiketinin içine birden çok PHP komutu konabilir ve tek bir echo komutundan daha fazlasını yapan küçük kodlar oluşturulabilir. Örneğin, ziyaretçin Firefox kullanıp kullanmadığı şöyle saptanabilir:

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

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo
'Firefox kullanıldığı saptandı';
}
?>

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

Firefox kullanıldığı saptandı.

Burada birkaç yeni kavram devreye sokuldu. Örneğin, if deyimi; C dilinde kullanılan temel sözdizimine aşinalık varsa, bu kullanım tanıdık gelecektir. Aksi takdirde, giriş düzeyinde bir PHP kitabı edinilmesi ve ilk birkaç bölümünün okunması ya da kılavuzun Dil Başvuru Kılavuzu bölümünün okunması faydalı olacaktır.

Devreye sokulan ikinci kavram, str_contains() işlevi ile yapılan çağrı oldu. str_contains(), bir dizgeyi başka bir dizgenin içinde arayan yerleşik bir PHP işlevidir. Burada $_SERVER['HTTP_USER_AGENT'] içinde (samanlık) 'Firefox' dizgesi (iğne) aranıyor. İğne samanlıkta bulunursa true, aksi takdirde false döner. if ifadesinin sonucu true olduğu takdirde 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şlevler kullanılarak benzer örnekler yazılabilir. İlgili her kılavuz sayfası aynı zamanda örnekler de içermektedir. Bu işlevlerin nasıl kullanması gerektiğinden emin olunamıyorsa, kılavuzdaki bir işlev tanımı nasıl okunur ve PHP işlevleri bölümleri okunabilir.

Bu bir adım öteye taşınabilir ve bir PHP kodunun tam ortasındayken bile HTML kipine nasıl girilip çıkılabileceği gösterilebilir:

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

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() false döndürmemiş olmalı</h3>
<p>Firefox kullanıldığı saptandı.</p>
<?php
} else {
?>
<h3>str_contains() false döndürmüş olmalı</h3>
<p>Firefox kullanılmadığı saptandı.</p>
<?php
}
?>

Bu betikten elde edilebilecek sonuçlardan biri:

<h3>str_contains() false döndürmemiş olmalı</h3>
<p>Firefox kullanıldığı saptandı.</p>

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

add a note

User Contributed Notes 2 notes

up
185
Declan Kelly
9 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
-77
Evan Z
2 years ago
Hi. Edge is a different browser from IE. You cannot use the condition to judge it is an Internet Explorer. On the contrary, it means this is an Edge browser.

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Edg') !== FALSE {
echo
'You are using Edge.<br />';
}
?>
To Top