Avenus
Under Glory Yield
Как организовать возможность докачки с удаленного хоста?
Необходимо, чтобы с сайта пользователь мог скачивать файл по динамической ссылке. Файлы при этом лежат на удаленном хосте.
C локального хоста работает при:
$file_dir=dirname($_SERVER['HTTP_HOST']).'/files/';
Не могу никак разобраться как то же самое сделать с удаленного хоста с FTP.
Спасибо за ответы или за ссылки, где наиболее близкими будут подсказки для вариантов решения.
Необходимо, чтобы с сайта пользователь мог скачивать файл по динамической ссылке. Файлы при этом лежат на удаленном хосте.
C локального хоста работает при:
$file_dir=dirname($_SERVER['HTTP_HOST']).'/files/';
Не могу никак разобраться как то же самое сделать с удаленного хоста с FTP.
PHP:
// все файлы архивы ZIP
$filename='file.zip';
// предположим, что известен... Либо определим через ftp_size
$filesize='1024000';
// на удаленном хосте файлы находятся в files
$file_dir='ftp://login:[email protected]/files/';
// также в папке files лежит .htaccess с запретом прямой загрузки для всех
// order deny,allow
// deny from all
// необходимо изменить имя файла при закачке
$title='load_file.zip';
define('FILE_PART_SIZE',1024*4*1);
ignore_user_abort(false);
$h=fopen($file_dir.$filename,'r');
header("Content-Type: application/octet-stream");
header('Accept-Ranges: bytes');
if(isset($_SERVER['HTTP_RANGE'])){
preg_match_all('/bytes=([0-9]*)-([0-9]*)/',$_SERVER['HTTP_RANGE'],$out);
header("HTTP/1.1 206 Partial Content");
$rlow=$out[1][0];
$rhigh=$out[2][0];
if(empty($rhigh)) $rhigh=$filesize-1;
header("Content-Range: bytes $rlow-$rhigh/$filesize");
$filesize=$rhigh-$rlow+1;
}
header("Content-Disposition: attachment; filename=$title");
header("Content-Length: $filesize");
set_time_limit(0);
if(isset($rhigh)) fread($h,$rlow);
while(!feof($h)) echo fread($h,FILE_PART_SIZE);
fclose($h);