Image force download - проблемен код

Hous

Registered
Преди 1-2 седмици един от колегите тук сподели този код:
Код:
$file_extension = strtolower(substr(strrchr($filename,"."),1));
$path_down = "./imgs/";
if(isSet($_GET['image'])) {
        $filename = "{$path_down}{$_GET['image']}";
} else {
        $filename = "";
}
if(ini_get('zlib.output_compression')) {ini_set('zlib.output_compression', 'Off'); }
if(empty($filename)) {
        header("HTTP/1.0 404 Not Found");
}  elseif(!is_file($filename)) {
        die("This is not a file!");
} elseif (!file_exists($filename)) {
        header("HTTP/1.0 404 Not Found");
} else {
        $size = @getimagesize($filename);
        $fp = @fopen($filename, "rb");
        if ($size && $fp) {
                switch($file_extension) {
                        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");
                header("Expires: 0");
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                header("Cache-Control: private", false);
                header("Content-Type: {$ctype}");
                // change, added quotes to allow spaces in filenames, by Rajkumar Singh
                header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
                header("Content-Transfer-Encoding: binary");
                header("Content-Length: ".filesize($filename));
                readfile("$filename");
                exit();
        }
}
Като кода си работи ,и е защитен ,но като сваля файла и реално не мога да го preview с никаква програма,освен photoshop.Явно има някакъв проблем със filetype или и аз не знам,някой може ли да помогне?
 
Защо направо не го направиш този номер с 1 .htaccess файл?

Код:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^download$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .(jpe?g|gif|png)$ index.php?file=noFoundFilePage [L,NC]
RewriteCond %{QUERY_STRING} ^download$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .(jpe?g|gif|png)$ - [L,NC,T=application/octet-stream]
 
Като го поставя този код в htaccess как се ползва после не разбирам?
ps:Също така и аз имам rewrite И като поставя този код ,стария не работи...


:lol:
 
Нещо този код не работи... Махни замени го с този в .htaccess файла и готово :) Няма да ти трябва PHP кода..

Код:
<FilesMatch "\.(jpeg|png|gif|jpg)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>
 
И аз това мъча от одеве,опитах със директния htaccess фил и също поставих друг в директорията на картинките който искам да свалям и пак не става.
В смисъл той трябва да работи на принципа на линка до картинката,и вместо да я показва да я сваля нали така?
 
Нищо аз намерих друг метод:
Код:
mysql query to check if the id got with _GET from url is numberic ,bigger than 0 , and real id (existing in table)
	$path_down="imgs/";
	$fullimgpath = "{$path_down}{$picname}";
	$filename = $fullimgpath; // don't accept other directories 
	   $size = @getimagesize($filename); 
	   $fp = @fopen($filename, "rb"); 
	   if ($size && $fp) 
   { 
      header("Content-type: {$size['mime']}"); 
      header("Content-Length: " . filesize($filename)); 
      header("Content-Disposition: attachment; filename=$picname"); 
      header('Content-Transfer-Encoding: binary'); 
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');  
      fpassthru($fp); 
      exit; 
   } 
} 
header("HTTP/1.0 404 Not Found");
 

Back
Горе