Помощник
|
Кнопка для загрузки картинки |
Anatoly_mw
|
Сообщение
#1
|
||
|
|
||
|
|||
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 |
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 |
27.6.2010, 11:03;
Ответить: bestolloch
Сообщение
#4
|
|
А код вставляется непосредственно в index.php? просто php для меня закрытая книга. А кнопку охото.)
|
|
|
ZiTosS |
27.6.2010, 13:55;
Ответить: ZiTosS
Сообщение
#5
|
|
bestolloch, код можно вставить в тот файл, где данная функция будет использоваться. Вообще всё зависит от вашей системы, как вы её разработали...
|
|
|
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 |
31.7.2010, 8:56;
Ответить: Osip_mw
Сообщение
#7
|
|
там не ошибка, там просто MIME тип явно не указывается, т.е. в твоем скрипте вот эта строчка "решает" )
[php]header('Content-Type: '.$mimetype); //$mimetype в данном случае text/plain[/php] так что в тот скрипт который был выше просто header() добавить =) |
|
|
gaaarfild |
31.7.2010, 17:11;
Ответить: gaaarfild
Сообщение
#8
|
|
ну, по-моему это, как раз таки, ошибка. =)
|
|
|
CashMagnat_mw |
5.8.2010, 2:06;
Ответить: CashMagnat_mw
Сообщение
#9
|
|
Учитывайте максимальное количество байт. См в рнр.ини
|
|
|
gaaarfild |
7.8.2010, 13:22;
Ответить: gaaarfild
Сообщение
#10
|
|
|
Данный вопрос касается только upload'a.
На скачку, насколько я знаю, ограничений нет.
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Обучение 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 |
Текстовая версия | Сейчас: 23.4.2024, 23:37 |