Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: загрузка файла с сервера (В Opera нормально, в FireFox - без расширения)
 
 автор: tyoma   (14.02.2008 в 01:13)   письмо автору
 
 

Пытаюсь использовать скрипт, найденный на 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($fdfilesize($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 все скачивается нормально). Как с этим можно бороться?

   
 
 автор: mihdan   (14.02.2008 в 10:50)   письмо автору
 
   для: tyoma   (14.02.2008 в 01:13)
 

Укажите в заголовке тип файла

   
 
 автор: tyoma   (14.02.2008 в 13:55)   письмо автору
 
   для: mihdan   (14.02.2008 в 10:50)
 

а как именно?

   
 
 автор: Gemorroj   (14.02.2008 в 20:53)   письмо автору
 
   для: 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); 
?>

   
 
 автор: Tyoma   (15.02.2008 в 14:00)   письмо автору
 
   для: Gemorroj   (14.02.2008 в 20:53)
 

Спасибо :)

   
 
 автор: Tyoma   (15.02.2008 в 14:55)   письмо автору
 
   для: Tyoma   (15.02.2008 в 14:00)
 

Может не в тему, но не подскажите как мне во время передачи файла вывести еще и обычную страницу. Пытаюсь вставить код в тот же php файл, но я получаю "Warning: Cannot modify header information - headers already sent..."

   
 
 автор: cheops   (15.02.2008 в 18:58)   письмо автору
 
   для: Tyoma   (15.02.2008 в 14:55)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
 
 автор: Trianon   (16.02.2008 в 11:42)   письмо автору
 
   для: Tyoma   (15.02.2008 в 14:55)
 

никак.

В ответ на один запрос по протоколу HTTP можно получить только один документ.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования