Сваляне на картинка?

purko

Registered
Как мога да направя така, че като някой цъкне на даден бутон да отвори картинката примерно http://sait.com/pic.jpg в нов прозорец и да започне да я сваля?
 
talevtehnology каза:
Код:
<a target=_blank href="http://sait.com/pic.jpg"></a>
Така ще ти я оваря в нова страница
Е това го знам ама как да започне и да я сваля?
 
Единственния вариянт за който се сещам е снимките да са ти в архив и тогава няш ядове :?:
 
talevtehnology каза:
Единственния вариянт за който се сещам е снимките да са ти в архив и тогава няш ядове :?:
това не ме устройва
 
Не знам какви са тези глупости дето са ми в главата, но имаше май някакви такива неща:

Код:
header('Content-type: image/JPEG');
header('Content-Disposition: attachment; filename="file.jpg";'); 
readfile(http://site.com/file/);

Ако се сетя как точно ставаше номера ще ти драсна кода, но мисля защото беше нещо от тоя сорт :)
 
Код:
<?php
$file = 'angry.jpg';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
8e98576233d454e8.JPG
 
Код:
 <?php
$file = $_GET['kartinka'];
?>
<img src="<? echo $file; ?>" />
<?
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
Да, ама не става...
Само показва картинката на страницата.
 
Код:
<?php
     if ($_POST['getfile'])
    {
        $file = $_POST['getfile'];
     }


$save_as_name = basename($file);   
ini_set('session.cache_limiter', '');
header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
header("Content-Type: application/octet-stream");
header("Content-Disposition: disposition-type=attachment; filename=\"$save_as_name\"");

readfile($file);

?>
 
purko каза:
Код:
 <?php
$file = $_GET['kartinka'];
?>
<img src="<? echo $file; ?>" />
<?
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
Да, ама не става...
Само показва картинката на страницата.
Я махни <img src="<? echo $file; ?>" />

Направи го така:

Код:
<?php
$file = $_GET['kartinka'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
 
Внимавайте с този начин на download, че може да ви download-нат и php файловете.

Също така, използвайте base64_encode например, за да укажете пътя до снимката, ако не искате да имате странни прехвърляния и грешки.
 
akolevutd каза:
Внимавайте с този начин на download, че може да ви download-нат и php файловете.

Също така, използвайте base64_encode например, за да укажете пътя до снимката, ако не искате да имате странни прехвърляния и грешки.
Е няма ли да е достатъчно само от директорията на картинките да го направя да се сваля?
 
Просто внимавай да не се получи така, че могат да ти свалят php файловете. Тоест прави проверка на избрания файл :)
 
Между другото, това се казва force download.
Доста нещо има изписано за него в нета.
 
Код:
<?php

// Сваляне на файлове
$file = $_GET['kartinka']; 

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Content-Type: application/force-download");
header( "Content-Disposition: attachment; filename=".basename($file));

header( "Content-Description: File Transfer");
@readfile($file);

?>
 
Има напредък. Това започва да дваля файла ама като го свали той е само 2 байта и е бял. :D :D :D
 
Е това вече работи!
Код:
<?php
$file = $_GET["kartinka"]; 
   $extensions = array("jpg");//позволени типове
$extension_file = end(explode(".",$file));
$extension_file = strtolower($extension_file);
if(!in_array($extension_file,$extensions)){
echo "Непозволен тип файл";
exit;
}
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/jpg');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
 

Back
Горе