• 16-07-2014, 16:53:45
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba arkadaşlar,

    php .header fonksiyonu ile dosya indirmeye çalışıyorum. Fakat indirdiğim dosyalar hep bozuk açılıyor.(Manuel olarak dosyayı açtıgımda sorun yok)

    Kullandığım kod ;

    $filename = "1.jpg";
    $myFile = "/upload/1.jpg";
    
    $mm_type="application/octet-stream";
    
    header("Cache-Control: public, must-revalidate");
    header("Pragma: hack"); // WTF? oh well, it works...
    header("Content-Type: " . $mm_type);
    header("Content-Length: " .(string)(filesize($myFile)) );
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Transfer-Encoding: binary\n");
    
    readfile($myFile);
    Nerede hata yapıyorum? Teşekkürler.
  • 16-07-2014, 17:08:38
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    my_file degiskenin basindaki slashi kaldırıp vede filesize i string e çevirmeden denermisin?

    $filename = "1.jpg";
    $myFile = "upload/1.jpg";
    *
    $mm_type="application/octet-stream";
    *
    header("Cache-Control: public, must-revalidate");
    header("Pragma: hack"); // WTF? oh well, it works...
    header("Content-Type: " . $mm_type);
    header("Content-Length: " .(filesize($myFile)) );
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Transfer-Encoding: binary\n");
    *
    readfile($myFile);
  • 16-07-2014, 17:23:10
    #3
    WebTasarimLive adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar,

    php .header fonksiyonu ile dosya indirmeye çalışıyorum. Fakat indirdiğim dosyalar hep bozuk açılıyor.(Manuel olarak dosyayı açtıgımda sorun yok)

    Kullandığım kod ;

    $filename = "1.jpg";
    $myFile = "/upload/1.jpg";
    
    $mm_type="application/octet-stream";
    
    header("Cache-Control: public, must-revalidate");
    header("Pragma: hack"); // WTF? oh well, it works...
    header("Content-Type: " . $mm_type);
    header("Content-Length: " .(string)(filesize($myFile)) );
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Transfer-Encoding: binary\n");
    
    readfile($myFile);
    Nerede hata yapıyorum? Teşekkürler.

    Hocam indirmeye çalıştığınız dosya örnekteki gibi jpg resmi ise mime type'ınızda sorun var bu örnekte resim olarak değilde application yani exe olarak indirmeye çalışıyorsunuz resmi,
    sorunu çözmek için indireceğiniz dosya tipi jpg veya jpeg ise $mm_type değişkenini "image/jpg" , png ise "image/png" veya gif ise "image/gif" olarak değiştirin yok ben birden fazla dosya türü indirtmek istiyorum diyorsanız internetten bulduğum bir örneği kullanabilirsiniz. Sayfayı download.php olarak kaydedin ve indirmek istediğiniz dosyayı download.php?file=resim1.jpg olarak link verin

    Bu Arada Verdiğim örneği buradabulabilirsiniz. http://stackoverflow.com/questions/2...nload-on-click

    Örnekte olmayan bir dosya türü indirtmek isterseniz buradan tüm mime tiplerini bulup örneğe ekleyebilirsiniz... http://www.sitepoint.com/web-foundat...complete-list/
    <?php
    
    $file = $_GET['file'];
    
    download_file($file);
    
    function download_file( $fullPath ){
    
      // Must be fresh start
      if( headers_sent() )
        die('Headers Sent');
    
      // Required for some browsers
      if(ini_get('zlib.output_compression'))
        ini_set('zlib.output_compression', 'Off');
    
      // File Exists?
      if( file_exists($fullPath) ){
    
        // Parse Info / Get Extension
        $fsize = filesize($fullPath);
        $path_parts = pathinfo($fullPath);
        $ext = strtolower($path_parts["extension"]);
    
        // Determine Content Type
        switch ($ext) {
          case "pdf": $ctype="application/pdf"; break;
          case "exe": $ctype="application/octet-stream"; break;
          case "zip": $ctype="application/zip"; break;
          case "doc": $ctype="application/msword"; break;
          case "xls": $ctype="application/vnd.ms-excel"; break;
          case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
          case "gif": $ctype="image/gif"; break;
          case "png": $ctype="image/png"; break;
          case "jpeg":
          case "jpg": $ctype="image/jpg"; break;
          default: $ctype="application/force-download";
        }
    
        header("Pragma: public"); // required
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false); // required for certain browsers
        header("Content-Type: $ctype");
        header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".$fsize);
        ob_clean();
        flush();
        readfile( $fullPath );
    
      } else
        die('File Not Found');
    
    }
    ?>
  • 16-07-2014, 17:28:31
    #4
    RooTsGhosT adlı üyeden alıntı: mesajı görüntüle
    Hocam indirmeye çalıştığınız dosya örnekteki gibi jpg resmi ise mime type'ınızda sorun var bu örnekte resim olarak değilde application yani exe olarak indirmeye çalışıyorsunuz resmi,
    sorunu çözmek için indireceğiniz dosya tipi jpg veya jpeg ise $mm_type değişkenini "image/jpg" , png ise "image/png" veya gif ise "image/gif" olarak değiştirin yok ben birden fazla dosya türü indirtmek istiyorum diyorsanız internetten bulduğum bir örneği kullanabilirsiniz. Sayfayı download.php olarak kaydedin ve indirmek istediğiniz dosyayı download.php?file=resim1.jpg olarak link verin

    Bu Arada Verdiğim örneği buradabulabilirsiniz. http://stackoverflow.com/questions/2...nload-on-click

    Örnekte olmayan bir dosya türü indirtmek isterseniz buradan tüm mime tiplerini bulup örneğe ekleyebilirsiniz... http://www.sitepoint.com/web-foundat...complete-list/
    <?php
    
    $file = $_GET['file'];
    
    download_file($file);
    
    function download_file( $fullPath ){
    
      // Must be fresh start
      if( headers_sent() )
        die('Headers Sent');
    
      // Required for some browsers
      if(ini_get('zlib.output_compression'))
        ini_set('zlib.output_compression', 'Off');
    
      // File Exists?
      if( file_exists($fullPath) ){
    
        // Parse Info / Get Extension
        $fsize = filesize($fullPath);
        $path_parts = pathinfo($fullPath);
        $ext = strtolower($path_parts["extension"]);
    
        // Determine Content Type
        switch ($ext) {
          case "pdf": $ctype="application/pdf"; break;
          case "exe": $ctype="application/octet-stream"; break;
          case "zip": $ctype="application/zip"; break;
          case "doc": $ctype="application/msword"; break;
          case "xls": $ctype="application/vnd.ms-excel"; break;
          case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
          case "gif": $ctype="image/gif"; break;
          case "png": $ctype="image/png"; break;
          case "jpeg":
          case "jpg": $ctype="image/jpg"; break;
          default: $ctype="application/force-download";
        }
    
        header("Pragma: public"); // required
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false); // required for certain browsers
        header("Content-Type: $ctype");
        header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".$fsize);
        ob_clean();
        flush();
        readfile( $fullPath );
    
      } else
        die('File Not Found');
    
    }
    ?>
    Bu kod işime yaradı. Allah razı olsun teşekkür ederim.

    Yardım eden herkese teşekkürler.