Php ile link kontrolu.!

Php ile baska bir sitede bulunan dosyanin olup-olmadigini kontrol etmek!

Merhaba arkadaslar. Gecenlerde bana lazim olan bir uygulama icin gelistirme yapiyordum. Ve baska bir sitede bulunan dosyanin durumunu yani olup olmadigini kontrol ettirmem gerekiyordu. Bir kac arastirmadan sonra ilk aklima gelen dosyanin header bilgilerini alma sekli cevizde yonetici olan Raiden arkadasimin onerisi uzerine ele almaya karar verdim. Ne kadar stabil emin degilim ama yaptigim testlerde son derece guzel sonuclar aldim. Isterseniz sizde baslamadan once php’nin bu konudaki fonksiyonunu (get_headers) buradan kontrol edebilirsiniz.

Konuda anlatilan uygulamanin ornek calisan halini buradan test edebilirsiniz: sizde deneme yapmak icin dosya linkini id= den sonra yazarak devam edin.

/baska_sitede_dosya_kontrol_et.php?id=http://a.piclect.com/upload/e2eb3941.png

Burada anlatacaklarim baska sitelerde olan dosyalarin kontrolu icindir arkadaslar, eger kendi sitenizde bulunan dosyalarini kontrol ettirmek isterseniz buradaki yazimi (file_exists) okuyabilirsiniz..

Islemler basit, oncelikle baska sitede bulunan dosya linkini fonksiyona gonderiyoruz ve cikan http header bilgilerine gore islem yapiyoruz, sonucda bizim istedigimiz yani dosyanin olup olmadigi durumunu ogrenmis oluyoruz.

Oncelikle yukarida link olarak ekledigim php sayfasindan asagidaki fonksiyonu sectim ve kullaniyorum. Ayrica bu konuda kullanacagimiz fonksiyondur, :not alin

if(!function_exists('get_headers')) {
   /**
   * @return array
    * @param string $url
    * @param int $format
    * @desc Fetches all the headers
    * @author cpurruc fh-landshut de
    * @modified by dotpointer
    * @modified by aeontech
    */
    function get_headers($url,$format=0) {
        $url_info=parse_url($url);
        $port = isset($url_info['port']) ? $url_info['port'] : 80;
        $fp=fsockopen($url_info['host'], $port, $errno, $errstr, 30);
        if($fp) {
            $head = "HEAD ".@$url_info['path']."?".@$url_info['query'];
            $head .= " HTTP/1.0\r\nHost: ".@$url_info['host']."\r\n\r\n";
            fputs($fp, $head);
            while(!feof($fp)) {
                if($header=trim(fgets($fp, 1024))) {
                    if($format == 1) {
                        $h2 = explode(':',$header);
                        // the first element is the http header type, such as HTTP/1.1 200 OK,
                        // it doesn't have a separate name, so we have to check for it.
                        if($h2[0] == $header) {
                            $headers['status'] = $header;
                        }
                        else {
                            $headers[strtolower($h2[0])] = trim($h2[1]);
                        }
                    }
                    else {
                        $headers[] = $header;
                    }
                }
            }
            return $headers;
        }
        else {
            return false;
        }
    }
}

Yukaridaki fonksiyonu daha sonra ilerde isterseniz belirttiginiz link’in header bilgilerini almak icinde kullanabilirsiniz. Bunlar sitenin webserver ismini, server, son degisiklik v.s gibi durumlardir.

Simdi size fonksiyonu calistirarak dosya kontrolu yaptiracagimiz kodlarimi paylasiyorum

$dosya="http://a.piclect.com/l/upload/e2esb3941.png"; // [1]

$response = get_headers($dosya, 1); //  [2]

if (!$response) { // [3]

    echo 'Unable to initiate connection.';

} else { // [4]

$ext = end(explode(' ', $response[0])); // [5]

if($ext == 'OK'){ // [6]

echo "DOSYA VAR"; // [7]

 } else { 

echo "DOSYA YOK"; //  [8]

}

}

Sirayla kodlarin aciklamalarini yapacagim, yanlarindaki numaralardan hanki kismi anlattigimi anlayabilirsiniz.

  • [1] // Dosya yolunu belirtiyoruz.
  • [2] // Fonksiyona dosya yolunu bildiriyoruz.
  • [3] // if kontrolu ile fonksiyonun calisabilirligini belirleyip devam ediyoruz.
  • [4] // eger fonksiyonda sorun yoksa $response[0] degiskeni ile ilk gelen HTTP bilgisini aliyoruz.
  • [5] // explode ile en sondaki bosluktan itibaren boluyoruz. dosya varsa normal cikti bu sekilde olur: HTTP/1.1 200 OK – Ama yoksa bu sekilde olacaktir: HTTP/1.1 404 Not Found.
  • [6] // ext degiskenindeki deger eger OK ise Dosya var demektir. Ancak farkli bir kelime ise yok demektir ve else ilede dosya yoktur yazdiracagiz.
  • [7] // Dosya var ise burasi aktif olacaktir.
  • [8] // Dosya yoksa burasi aktif olacaktir.

Evet bu kadar, ben kodlari yazdim, gelistirmek sizin elinizde. Guvenlik icin siz extradan dosya icin kod ekleyebilirsiniz, bunuda tavsiye ederim. Herzaman guvenligi elde tutmak mantikli olacaktir.

Atladigim yada yanlis bir yer varsa yorum olarak duserseniz yaziyi guncellerim arkadaslar. Simdiden iyi kodlamalar :)

1 Yorum

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

This site uses Akismet to reduce spam. Learn how your comment data is processed.