|
|
|
| Пытаюсь использовать скрипт, найденный на http://www.codenet.ru/webmast/php/faq/index18.php:
<?php
$cd = ".";
$fn = "file.zip";
$filename = $cd."/".$fn;
if (!file_exists($filename))
{
header ("HTTP/1.0 404 Not Found");
exit;
}
$fsize = filesize($filename);
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if (!$fd){
header ("HTTP/1.0 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, filesize($filename));
fclose($fd);
if ($range) {
header("HTTP/1.1 206 Partial Content");
}
else {
header("HTTP/1.1 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;
?>
|
Но Firefox загружает его без расширения (причем в IE и Opere все скачивается нормально). Как с этим можно бороться? | |
|
|
|
|
|
|
|
для: tyoma
(14.02.2008 в 01:13)
| | Укажите в заголовке тип файла | |
|
|
|
|
|
|
|
для: mihdan
(14.02.2008 в 10:50)
| | а как именно? | |
|
|
|
|
|
|
|
для: tyoma
(14.02.2008 в 13:55)
| |
<?php
$ext = strtolower(strrchr($fn,'.'));
if($ext == '.jad')
{$mime = 'text/vnd.sun.j2me.app-descriptor';}
elseif($ext == '.jar')
{$mime = 'application/java-archive';}
elseif($ext == '.txt')
{$mime = 'text/plain';}
elseif($ext == '.sis')
{$mime = 'application/vnd.symbian.install';}
elseif($ext == '.cab')
{$mime = 'application/vnd.ms-cab-compressed';}
elseif($ext == '.zip')
{$mime = 'application/x-zip';}
elseif($ext == '.gz')
{$mime = 'application/x-gzip';}
elseif($ext == '.tgz')
{$mime = 'application/x-gzip';}
elseif($ext == '.bz')
{$mime = 'application/x-bzip';}
elseif($ext == '.bz2')
{$mime = 'application/x-bzip';}
elseif($ext == '.7z')
{$mime = 'application/x-7z-compressed';}
elseif($ext == '.rar')
{$mime = 'application/x-rar-compressed';}
elseif($ext == '.doc')
{$mime = 'application/msword';}
elseif($ext == '.pdf')
{$mime = 'application/pdf';}
elseif($ext == '.mp3')
{$mime = 'audio/mpeg';}
elseif($ext == '.wav')
{$mime = 'audio/x-wav';}
elseif($ext == '.wma')
{$mime = 'audio/x-ms-wma';}
elseif($ext == '.avi')
{$mime = 'video/x-msvideo';}
elseif($ext == '.3gp')
{$mime = 'video/3gpp';}
elseif($ext == '.wmv')
{$mime = 'video/x-ms-wmv';}
elseif($ext == '.mpg')
{$mime = 'video/mpeg';}
elseif($ext == '.gif')
{$mime = 'image/gif';}
elseif($ext == '.jpg')
{$mime = 'image/jpeg';}
elseif($ext == '.jpe')
{$mime = 'image/jpeg';}
elseif($ext == '.jpeg')
{$mime = 'image/jpeg';}
else
{$mime = 'application/octet-stream';}
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: '.$mime);
exit($content);
?>
|
| |
|
|
|
|
|
|
|
для: Gemorroj
(14.02.2008 в 20:53)
| | Спасибо :) | |
|
|
|
|
|
|
|
для: Tyoma
(15.02.2008 в 14:00)
| | Может не в тему, но не подскажите как мне во время передачи файла вывести еще и обычную страницу. Пытаюсь вставить код в тот же php файл, но я получаю "Warning: Cannot modify header information - headers already sent..." | |
|
|
|
|
|
|
|
для: Tyoma
(15.02.2008 в 14:55)
| | Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12 | |
|
|
|
|
|
|
|
для: Tyoma
(15.02.2008 в 14:55)
| | никак.
В ответ на один запрос по протоколу HTTP можно получить только один документ. | |
|
|
|