X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Кнопка для загрузки картинки
Anatoly_mw
Anatoly_mw
Topic Starter сообщение 28.12.2009, 1:37; Ответить: Anatoly_mw
Сообщение #1


Привет, форумчане! У меня есть такой вопрос, который уже несколько месяцев мучает меня.

Как можно сделать кнопку для загрузки картинки, если кто знает, как на сайте http://www.telpics.ru/image.php?id=15725&c=21

Ведь, если сделать просто ссылку на картинку, то она и будет открываться без всякого предложения скачать ее себе на комп.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 30.12.2009, 1:35; Ответить: ZiTosS
Сообщение #2


Anatoly, запросто :(
Нужно выдать её не на экран, а побайтово(файл upload.php):
[php]<?php

$down_size = filesize($_GET['path_download']); // получаем размер закачиваемого файла
$down_file = basename($_GET['path_download']); // получаем имя закачиваемого файла
header("Content-Length: {$down_size}"); // передаём в заголовки размер закачки
header("Content-Disposition: attachment; filename={$down_file}"); // Content-disposition — это расширение протокола MIME, указывающее агенту пользователя MIME, как отображать вложенный файл
header("Content-type: application/x-force-download; name=\"{$down_file}\""); // сообщаем о том, что собираемся отдавать файл
readfile($_GET['path_download']); // выдаём файл побайтово

}

?>[/php]

Страница с ссылкой на скачку:
<html>
...
<a href="upload.php?path_download=[путь до файла от upload.php]">Закачать картинку</a>
...
</html>


Внимание: Данный пример примитивен, он просто показывает как можно выдать картинку на закачку, но он совсем не защищен!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 13.3.2010, 4:13; Ответить: gaaarfild
Сообщение #3


Вот неплохой скрипт закачки. С докачкой. =)

[php]<?php
function downloadFile($filename) {
if (!file_exists($filename)) die("Файл <B>{$filename}</b> не найден");

$from=$to=0; $cr=NULL;

if (isset($_SERVER['HTTP_RANGE'])) {
$range=substr($_SERVER['HTTP_RANGE'], strpos($_SERVER['HTTP_RANGE'], '=')+1);
$from=strtok($range, '-');
$to=strtok('/'); if ($to>0) $to++;
if ($to) $to-=$from;
header('HTTP/1.1 206 Partial Content');
$cr='Content-Range: bytes ' . $from . '-' . (($to)?($to . '/' . $to+1):filesize($filename));
} else header('HTTP/1.1 200 Ok');

$etag=md5($filename);
$etag=substr($etag, 0, 8) . '-' . substr($etag, 8, 7) . '-' . substr($etag, 15, 8);
header('ETag: "' . $etag . '"');

header('Accept-Ranges: bytes');
header('Content-Length: ' . (filesize($filename)-$to+$from));
if ($cr) header($cr);

header('Connection: close');
header('Last-Modified: ' . gmdate('r', filemtime($filename)));
$f=fopen($filename, 'r');
header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
if ($from) fseek($f, $from, SEEK_SET);
if (!isset($to) or empty($to)) {
$size=filesize($filename)-$from;
} else {
$size=$to;
}
$downloaded=0;
while(!feof($f) and !connection_status() and ($downloaded<$size)) {
echo fread($f, 512000);
$downloaded+=512000;
flush();
}
fclose($f);
}
?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
bestolloch
bestolloch
сообщение 27.6.2010, 11:03; Ответить: bestolloch
Сообщение #4


А код вставляется непосредственно в index.php? просто php для меня закрытая книга. А кнопку охото.)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 27.6.2010, 13:55; Ответить: ZiTosS
Сообщение #5


bestolloch, код можно вставить в тот файл, где данная функция будет использоваться. Вообще всё зависит от вашей системы, как вы её разработали...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 27.6.2010, 20:40; Ответить: gaaarfild
Сообщение #6


Вот код, который лучше, чем предыдущий, ибо он не ограничивает размера файла и исправляет одну ошибку, которая есть в предыдущем коде. В опере все файлы предлагает скачать как html. В новом коде, такого нет.

[php]function downloadFile($filepath, $mimetype = 'text/plain') {
$fsize = filesize($filepath); // берем размер файла
$ftime = date('D, d M Y H:i:s T', filemtime($filepath)); // определяем дату его модификации

$fd = @fopen($filepath, 'rb'); // открываем файл на чтение в бинарном режиме

if (isset($_SERVER['HTTP_RANGE'])) { // поддерживается ли докачка?
$range = $_SERVER['HTTP_RANGE']; // определяем, с какого байта скачивать файл
$range = str_replace('bytes=', '', $range);
list($range, $end) = explode('-', $range);

if (!empty($range)) {
fseek($fd, $range);
}
} else { // докачка не поддерживается
$range = 0;
}

if ($range) {
header($_SERVER['SERVER_PROTOCOL'].' 206 Partial Content'); // говорим браузеру, что это часть какого-то контента
} else {
header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); // стандартный ответ браузеру
}

// прочие заголовки, необходимые для правильной работы
header('Content-Disposition: attachment; filename='.basename($filepath));
header('Last-Modified: '.$ftime);
header('Accept-Ranges: bytes');
header('Content-Length: '.($fsize - $range));
if ($range) {
header("Content-Range: bytes $range-".($fsize - 1).'/'.$fsize);
}
header('Content-Type: '.$mimetype);

fpassthru($fd); // отдаем часть файла в браузер (программу докачки)
fclose($fd);

exit;
}[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Osip_mw
Osip_mw
сообщение 31.7.2010, 8:56; Ответить: Osip_mw
Сообщение #7


там не ошибка, там просто MIME тип явно не указывается, т.е. в твоем скрипте вот эта строчка "решает" )

[php]header('Content-Type: '.$mimetype); //$mimetype в данном случае text/plain[/php]

так что в тот скрипт который был выше просто header() добавить =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 31.7.2010, 17:11; Ответить: gaaarfild
Сообщение #8


ну, по-моему это, как раз таки, ошибка. =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
CashMagnat_mw
CashMagnat_mw
сообщение 5.8.2010, 2:06; Ответить: CashMagnat_mw
Сообщение #9


Учитывайте максимальное количество байт. См в рнр.ини
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 7.8.2010, 13:22; Ответить: gaaarfild
Сообщение #10


Данный вопрос касается только upload'a.
На скачку, насколько я знаю, ограничений нет.


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Обучение Email Рассылкам + Софт Для Автоматизации (100к в сутки с сервера)
9 zennoboss 4574 Сегодня, 21:03
автор: 100ftd
Открытая тема (нет новых ответов) Посоветуйте массажер для спины и шеи
9 Boymaster 868 Сегодня, 13:56
автор: Vmir
Открытая тема (нет новых ответов) Какой % отказов нормален для сайта?
14 Aloof 3371 Сегодня, 13:50
автор: Vmir
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыЛюблю творить! Статьи для вас
Копирайтинг- моя жизнь!
312 Zoya83 190666 Сегодня, 7:51
автор: DimonX
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыСовременный сервис для быстрого и безопасного обмена валют.
15 CryptoTims 4950 Вчера, 22:32
автор: CryptoTims


 



RSS Текстовая версия Сейчас: 23.4.2024, 23:37
Дизайн