Curl ile bir adrese bağlanabilir, POST ile bilgi gönderebilir, hatta dosya bile yükleyebilirsiniz. Ancak biz Curl'i bir web adresinden dönen header (başlık) bilgilerini okumak ve yorumlamak için kullanacağız. Biliyorsunuz, bir web sayfasına bağlandığınızda eğer sayfa bulunamazsa 404 hatası alırsınız. Bu kod da header bilgisi olarak istemciye gönderilir. Bizim yapacağımız da Curl ile sayfanın header bilgisi içerisinde bu kodu aramak olacak. Kullanacağımız kod aşağıda olup, açıklamalara yorum olarak ulaşabilirsiniz.
- $url = "http://www.makaledunyasi.net";
- //Kontrol edeceğimiz adres
- $ch = curl_init();
- //Curl uzantısını çağırıyoruz
- curl_setopt($ch, CURLOPT_URL, $url);
- //Bağlantı adresini tanımlıyoruz
- curl_setopt($ch, CURLOPT_HEADER, true);
- //Header bilgisini istiyoruz
- curl_setopt($ch, CURLOPT_NOBODY, true);
- //Body bilgisini istemiyoruz
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- //Değerlerin alınmasını sağlıyoruz
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
- //Eğer yönlendirme varsa 10 kez takip etsin
- $data = curl_exec($ch);
- //Veriyi çekiyoruz
- curl_close($ch);
- //Bağlantıyı kesiyoruz
- //Gelen header bilgisi içerisindeki hata kodunu ayıklıyoruz
- //Hata kodunu alıyoruz. Eğer yönlendirme varsa en sonuncu adresinkini alıyoruz
- if(!$data) {
- //Veri yoksa adrese ulaşılamamıştır
- echo "Alan adı bulunamadı";
- } else {
- if($code==200) {
- //200 sayfanın var olduğunu belirtir
- echo "Sayfa Bulundu";
- } elseif($code==404) {
- //404 sayfanın bulunamadığını belirtir
- echo "Sayfa Bulunamadı";
- }
- }
Eğer kod içerisinde $data değişkenini yazdırmış olsaydık, aşağıdaki gibi bir header bilgisi alacaktık.
HTTP/1.1 200 OK Date: Wed, 31 May 2009 12:25:26 GMT Server: Apache X-Powered-By: PHP/5.1.2 X-Pingback: http://www.makaledunyasi.net/xmlrpc.php Status: 200 OK Content-Type: text/html; charset=UTF-8
Eğer sayfa bulunamasaydı Status: 200 yerine Status: 404 ifadesi dönecekti. Gelen bu header bilgisini ayıklamamız gerekecek. Bunun için ise aşağıdaki kodu kullandık:
Koddaki preg_match fonksiyonundan dönen $matches değişkenini yazdırdığımızda aşağıdaki gibi bir ekran çıktısı alırız:
Array ( [0] => Status: 200 [1] => 200 )
Çıktıdan da anlaşılacağı üzere gelen durum kodu $matches[1] içerisinde saklı. Eğer yönlendirme varsa bu dizinin boyutu daha da artacağından, dizinin son elemanını aldık, gerisi de basit karşılaştırmalar yapmaktan ibaret.
Hiç yorum yok:
Yorum Gönder