Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Fopen'ı fsockopen yapma

Konu, 'PHP' kısmında mesaclin tarafından paylaşıldı.

  1. mesaclin

    mesaclin Yeni Üye

    Kayıt:
    25 Nisan 2008
    Mesajlar:
    2
    Beğenilen Mesajlar:
    0
    Hosting şirketim fopen'a izin vermediği için sitemdeki bazı kodları yavaş yavaş değiştiriyorum. Ancak şu altta verdiğime bir çözüm bulamadım. Yardım etmek isteyenlerin durumumu görmeleri için altta kendi denememi de bulabilirsiniz.

    $file_source ve $file_target benim sunucuma atmak istediğim resim dosyası ve sunucumda hangi klasörde bulunduğu.

    fopen ile eski sunucuda çalışan kodum
    Kod:
    function download($file_source, $file_target) {
            $rh = fopen($file_source, 'rb');
            $wh = fopen($file_target, 'wb');
            if ($rh===false || $wh===false) {
    // error reading or opening file
               return false;
            }
            while (!feof($rh)) {
                if (fwrite($wh, fread($rh, 1024)) === FALSE) {
                       // 'Download error: Cannot write to file ('.$file_target.')';
                       return false;
                   }
            }
            fclose($rh);
            fclose($wh);
            // No error
            return true;
        }
    fsockopen ile yeni sunucudaki patetik denemem :)
    Kod:
    function download($file_source, $file_target) {
                
                $rh = fsockopen("localhost", 80, $errno, $errstr, 30);
                $wh = fsockopen("localhost", 80, $errno, $errstr, 30);
    
             if ($rh===false || $wh===false) {
                // error reading or opening file
               return false;
            }
            else {
            
            $data1 = "GET $file_source HTTP/1.0\r\n";
            $data1 .= "Host: localhost\r\n";
            $data1 .= "\r\n"; 
        
            $data2 = "GET $file_target HTTP/1.0\r\n";
            $data2 .= "Host: localhost\r\n";
            $data2 .= "\r\n"; 
            
            fputs ($rh, $data1);
            //while (!feof($rh)) { echo fgets ($,4096);    }
            fclose ($rh);
            
            fputs ($wh, $data2);
            //while (!feof($wh)) { echo fgets ($,4096);    }
            fclose ($wh);
            
               
            while (!feof($rh)) {
                if (fwrite($wh, @fgets($rh, 4096)) === FALSE) {
                       // 'Download error: Cannot write to file ('.$file_target.')';
                       return false;          }
            }
            fclose($rh);
            fclose($wh);
            // No error
            return true;
        }    
    }
    Konuya hakim olmadığım için hatamı da göremiyorum :(
     
  2. Bay_Oz

    Bay_Oz Üye

    Kayıt:
    5 Nisan 2008
    Mesajlar:
    66
    Beğenilen Mesajlar:
    0
    Meslek:
    E-Ticaret Web Geliştirici
    Şehir:
    izmir
    curl ile dosya çekme

    PHP:
    function dosya_indir($link,$name=null)
          {
           
          
    $link_info pathinfo($link);  //Yol bilgilerini değişkene atıyoruz.
          
    $uzanti strtolower($link_info['extension']); //Dosyanın uzantısını değişkene atıyoruz.
          
    $file = ($name) ? $name.'.'.$uzanti $link_info['basename']; //Eğer kayıt edilmek üzere dosya adı girilmişse, girilen dosya adını değişkene atıyouruz, girilmemişse orjinal adını değişkene atıyoruz.
           
          
    $curl curl_init($link);
          
    $fopen fopen($file,'w');
           
          
    curl_setopt($curlCURLOPT_HEADER,0);
          
    curl_setopt($curlCURLOPT_RETURNTRANSFER,1);
          
    curl_setopt($curlCURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);
          
    curl_setopt($curlCURLOPT_FILE$fopen);

          
    curl_exec($curl);
          
    curl_close($curl);
          
    fclose($fopen);
           
          }
    fonksiyonun kullanımı :
    PHP:
    $link http://www.ornek.com/resim.jpg;
    $kayit "./resimler/yeniresim.jpg";
    dosya_indir("$link","$kayit");
     
    //$link deki adresteki resim dosyasını $kayitta verilen adrese verilen isimle kayıt eder.
    dosya çekmek curl iyi bir alternatif ben bu kodu kullanıyorum oldukça hızlı.

    (*kodu geliştiren arkadaşa teşekkürü borç bilirim.)
     
  3. mesaclin

    mesaclin Yeni Üye

    Kayıt:
    25 Nisan 2008
    Mesajlar:
    2
    Beğenilen Mesajlar:
    0
    Alakanıza teşekkürler, ama ben fopen'a izin verilmediğini belirtmiştim. Gerçi curl'e de izin verilmiyor hostingim tarafından maalesef. Niye buradasın demeyin :)
     
  4. furkane

    furkane Üye

    Kayıt:
    21 Ağustos 2007
    Mesajlar:
    79
    Beğenilen Mesajlar:
    0