PHP’nin get_headers fonksiyonu

PHP’nin get_headers fonksiyonu

PHP’nin get_headers fonksiyonu

Web üzerindeki pekçok işlem istemci-sunucu ilişkisi üzerine kuruludur. Sürekli istemci ile sunucu arasında bir iletişim vardır. Bu iletişimin ilk ayağını da Headers dediğimiz Başlık Bilgileri oluşturur. Sunucunun istemciye gönderdiği başlık bilgilerinde, kendisinden istenilen dosyanın var olup olmadığı, dosya varsa içerik türünün ne olduğu gibi önemli bilgiler yer alır. işte bu bilgilere PHP 5 ile kullanıma sunulan get_headers fonksiyonuyla kolayca erişebiliyoruz.

Kızılay Web Banner 728X090


1. get_headers fonksiyonunu tanıyalım


Diyelim ki tam adresi olan http://www.sitealanadi.uzantı/css_js/anasayfa.css olan bir CSS dosyasını çekmek istiyorsunuz. Başlangıçta şu iki bilgiyi kontrol etmeniz lâzım:


  1. Dosya gerçekten var mı?
  2. Dosya gerçekten bir css dosyası mı?


Bu iki bilgiyi kontrol etmek için, yazının giriş kısmında değindiğim başlık bilgilerine bakabiliriz. Bu işlem için get_headers fonksiyonunu şöyle kullanıyoruz:


<?php
$adres = 'http://www.sitebilgi.net/css_js/anasayfa.css';
$baslik = get_headers($adres, 1);
echo '<pre>';
print_r( $baslik );
echo ''; ?>


Bu kodu çalıştırdığımızda alttaki gibi bir çıktı alırsınız ki bu, sunucunun size gönderdiği başlık bilgileridir:



Bu çıktının ilk bilgisi ([0] => HTTP/1.1 200 OK) istekte bulunduğumuz dosyanın var olduğunu, son bilgisi ise ([Content-Type] => text/css) bu dosyanın içeririk türünün ne olduğunu belirtiyor.


2. get_headers fonksiyonunu geliştirelim


Bu fonksiyon gerçekten çok pratik fakat bazı eksiklikleri de yok değil. Örneğin bir adres başka bir adrese yönlendirilmişse sorun çıkartabiliyor. Ayrıca başında http:// eki olmayan adresleri sorgulayamıyor. ilk önce yönlendirme sorununa bakalım:


A) yönlendirme sorunu: Örneğin sitealandi.uzanti adresi, sitealandi.uzanti adresine yönlendirilmiştir. Eğer siz get_headers ile sitealandi.uzantix adresini sorgularsanız, sunucu size Location isimli bir başlık bilgisi daha gönderecektir ve bu bilgide hangi adrese yönlendirildiği yer alacaktır. Aynı durum SEO amacıyla yapılan yönlendirmelerde de geçerlidir. 



Öyleyse biz, Location bilgisinin olup olmadığını kontrol edelim. Eğer yönlendirme varsa yeni adresin başlık bilgilerini sorgulayalım. Bunu aşağıdaki kodlarla basit bir şekilde yapabiliriz:


<?php
$adres = 'http://www.sitealandi.uzanti/';
$baslik = get_headers($adres, 1);
// yönlendirilme olup olmadığını kontrol et
// yönlendirme varsa, yeni adresin başlık bilgilerini al
if( isset($baslik['Location']) ){$baslik = get_headers($baslik['Location'], 1);
}echo '<pre>';
print_r( $baslik );
echo ''; ?>


B) http:// sorunu: Sorgulama yaparken bu fonksiyonu get_headers('www.sitealandi.uzanti') şeklinde kullanırsanız hata verecektir. Bu hatayı da sorgulama öncesinde basit bir kontrol ile atlatabiliriz:


<?php
$adres = 'www.sitealandi.uzanti';
// http:// eki olup olmadığını kontrol et
if( !preg_match('|^(http://)|', $adres) ){$adres = 'http://'.$adres;
}$baslik = get_headers($adres, 1);
// yönlendirilme olup olmaduğını kontrol et
// yönlendirme varsa, yeni adresin başlık bilgilerini al
if( isset($baslik['Location']) ){$baslik = get_headers($baslik['Location'], 1);
}echo '<pre>';
print_r( $baslik );
echo ''; ?>


3. CURL varken neden get_headers kullanıyorsun?


CURL gerçekten çok muhteşem bir eklenti fakat her sunucuda kurulu olmayabiliyor. Kurulu olsa bile bazı sunucularda CURLOPT_FOLLOWLOCATION özelliğini kullanamayabiliyorsunuz. Bundan dolayı yönlendirilmiş adresleri takip edemiyorsunuz. Geçenlerde karşılaşmış olduğum bir hatayı aynen aktarıyorum:


Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/jstoolsn/public_html/curl.php on line 8