Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 20.06.2008, 22:03   #1
Ваnnеd
 
Аватар для V!rus
 
Регистрация: 07.07.2007
Адрес: нет? :) Танцысбубном: да
Сообщений: 1,967
Вес репутации: 279
V!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущее
Отправить сообщение для V!rus с помощью ICQ
По умолчанию Как организовать докачку на пхп?

Я не могу понять, есть у кого рабочий скрипт?
PHP код:
function downloadFile($filename$mimetype='application/octet-stream') {
    if (!
file_exists($filename)) die('Файл не найден');

    
$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($etag08) . '-' substr($etag87) . '-' substr($etag158);
    
header('ETag: "' $etag '"');

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

    
header('Connection: close');
    
header('Content-Type: ' $mimetype);
    
header('Last-Modified: ' gmdate('r'filemtime($filename)));
    
$f=fopen($filename'r');
    
header('Content-Disposition: attachment; filename="' basename($filename) . '";');
    if (
$fromfseek($f$fromSEEK_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($f512000);
        
$downloaded+=512000;
        
flush();
    }
    
fclose($f);
}

downloadFile($file); 
это должно работать, но в моем случае не работает, почему хз. Мэнеджер пишет, что размер файла изменился

Добавлено через 3 минуты
вопрос снят, вот рабочий скрипт:
Цитата:
$fn = $HTTP_GET_VARS['name'];
$filename = $file;


$fsize = filesize($filename);
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if(!$fd)
{
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if($HTTP_SERVER_VARS["HTTP_RANGE"])
{
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if($range)
fseek($fd, $range);
}
$content = fread($fd, $fsize);
fclose($fd);

if($range)
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 206 Partial Content");
else
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 200 OK");

header("Content-Disposition: attachment; filename=$fn");
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: " . ($fsize-$range) );
header("Content-Range: bytes $range-".($fsize -1). "/" . $fsize);
header("Content-Type: application/octet-stream");
print $content;
exit;
Добавлено через 4 минуты
может поможет кому
__________________
Помогаю рефералам.
Осуществляю поддержку сайтов с OpenCart, Bitrix, Wordpress, DLE, Drupal, WebAsyst и пр. Скайп agriboed

Последний раз редактировалось V!rus; 20.06.2008 в 22:08. Причина: Добавлено сообщение
V!rus вне форума   Ответить с цитированием
Старый 20.06.2008, 23:03   #2
Вредина
 
Аватар для Jooz
 
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 432
Jooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущее
По умолчанию

Покороче и по производительнее раз в 300
PHP код:
$cmd "wget -O /usr/home/.../file.exe --http-user=364 --http-password=2zmv \"http://site/big.file\""
@
exec($cmd); 
(писал прямо тут могут быть помарки)
__________________
Чтобы произошло чудо нужно обязательно дунуть. Если не дунуть - чуда не произойдет!
Jooz вне форума   Ответить с цитированием
Старый 24.06.2008, 17:18   #3
Ваnnеd
 
Аватар для V!rus
 
Регистрация: 07.07.2007
Адрес: нет? :) Танцысбубном: да
Сообщений: 1,967
Вес репутации: 279
V!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущее
Отправить сообщение для V!rus с помощью ICQ
По умолчанию

можно чуть подробнее с wget?
__________________
Помогаю рефералам.
Осуществляю поддержку сайтов с OpenCart, Bitrix, Wordpress, DLE, Drupal, WebAsyst и пр. Скайп agriboed
V!rus вне форума   Ответить с цитированием
Старый 24.06.2008, 20:26   #4
Особый статус
 
Регистрация: 23.03.2008
Адрес: localhost
Сообщений: 2,594
Вес репутации: 322
Ufaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущееUfaweb - прекрасное будущее
Отправить сообщение для Ufaweb с помощью ICQ
По умолчанию

Цитата:
Сообщение от Jooz Посмотреть сообщение
Покороче и по производительнее раз в 300
PHP код:
$cmd "wget -O /usr/home/.../file.exe --http-user=364 --http-password=2zmv \"http://site/big.file\""
@
exec($cmd); 
(писал прямо тут могут быть помарки)
а если !@exec($cmd) ?)))
Рассказывать - так уж все =)
Ufaweb вне форума   Ответить с цитированием
Старый 24.06.2008, 20:46   #5
Специалист
 
Аватар для mnemonic
 
Регистрация: 29.10.2007
Адрес: Планета Земля
Сообщений: 231
Вес репутации: 214
mnemonic - просто великолепная личностьmnemonic - просто великолепная личностьmnemonic - просто великолепная личностьmnemonic - просто великолепная личностьmnemonic - просто великолепная личностьmnemonic - просто великолепная личностьmnemonic - просто великолепная личностьmnemonic - просто великолепная личность
По умолчанию

exec на большинстве хостингов запрещен в целях безопасности.
__________________
Гипножабу - в президенты!
mnemonic вне форума   Ответить с цитированием
Старый 24.06.2008, 21:30   #6
Эксперт
 
Аватар для seocore
 
Регистрация: 18.06.2007
Адрес: Картофель
Сообщений: 2,417
Вес репутации: 356
seocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Jooz Посмотреть сообщение
Покороче и по производительнее раз в 300
PHP код:
$cmd "wget -O /usr/home/.../file.exe --http-user=364 --http-password=2zmv \"http://site/big.file\""
@
exec($cmd); 
(писал прямо тут могут быть помарки)
пример-то хороший - но он же спрашивает не про это, он видимо хочет отдавать скриптом файл, при этом чтобы работала докачка

кстати - приведенный выше огромадный код в принципе рабочий, не работает он скорее всего из-за каких-то модулей типа eAccelerator либо на фронте стоит nginx

да бяка по видимому в header('HTTP/1.1 206 Partial Content'); т.е. декларирование HTTP/1.1, а при 1.1 Апач может "чанковать" принтуемый ПХП-скриптом контент, т.е. подмешиваются специальные служебные символы, при этом реальный размер данных уже не соответствует объявленному в хэде Content-Length'у
seocore вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как организовать блог на WP? Метками или категориями? vic306 Вопросы от новичков 0 04.03.2008 21:36


Часовой пояс GMT +3, время: 08:50.