Файл открывается вместо скачивания

1 234
Unlock
На сайте с 01.08.2004
Offline
782
#21

Проблема в том, что вроде уже все и везде прописано, но с моего сервера файл не скачивается, а с таким же расширением с другого сервера, качается без проблем. Воообще ничего не понимаю. Хостера озадачил, посмотрим что смогут сделать.

Есть желание, - тысяча способов; нет желания, - тысяча поводов! /Петр-I/.
Shtogrin
На сайте с 02.11.2006
Offline
95
#22
Unlock:

HTTP/1.1 200 OK
...
Content-Disposition: attachment; filename="download.mol"
Content-Type: chemical/x-mdl-molfile

У меня ответ сервера:
HTTP/1.1 200 OK
Content-Type: chemical/x-mdl-molfile

Было такое в каких-то версиях IE. Надо указать имя файла. И сразу, чтобы потом не было проблем с кешированием (если содержимое меняется), делайте ему уникальное имя, например

molecule_071126_0233.mol. IE предложит сохранить его как molecule_071126_0233.mol или открыть с помощью специальной программы.

mime-type оставьте в покое, вы сами формируете заголовок.

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
emzi
На сайте с 17.01.2007
Offline
46
#23
Shtogrin:
Было такое в каких-то версиях IE. Надо указать имя файла. И сразу, чтобы потом не было проблем с кешированием (если содержимое меняется), делайте ему уникальное имя, например
molecule_071126_0233.mol. IE предложит сохранить его как molecule_071126_0233.mol или открыть с помощью специальной программы.

mime-type оставьте в покое, вы сами формируете заголовок.

либо уникальное имя, либо время модификации должно быть проставлено соответствовать времени самогофайла либо времени вызова скрипта. И еще полезно target=_blank вставить в ссылку

<a href='file.mol' target=_blank >
Unlock
На сайте с 01.08.2004
Offline
782
#24

Роман, подкрепите пожалуйста Ваше высказывание кодом :) Я может еще не проснулся, но не совсем понял как это реализовать.

Здесь такой вариант давали:

header("Content-Disposition: attachment; filename=download.pdfl"); 

Оно?

Shtogrin
На сайте с 02.11.2006
Offline
95
#25

Да, только вместо download.pdfl надо свое название, т.е. что-то типа

$filename="molecule_".date('Ymd_His').'.mol';

header("Content-Disposition: attachment; filename={$filename}");

В IE было (наверно и еще остались) много проблем Content-Disposition

http://www.google.com.ua/search?imgsz=xxlarge&num=20&hl=ru&q=Content-Disposition%3A+attachment+site%3Asupport.microsoft.com&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&meta=

S
На сайте с 08.02.2007
Offline
185
#26

Была аналогичная проблема с расширением *.pps

Решил добавлением в .htaccess следующего кода:

<Files file.pps>

Order Allow,Deny

Deny from all

</Files>

Где file.pps - имя моего файла

Размещаем статьи на новых посещаемых порталах (/ru/forum/966433)
Shtogrin
На сайте с 02.11.2006
Offline
95
#27
Soccerlive:
Была аналогичная проблема с расширением *.pps
Решил добавлением в .htaccess следующего кода:
<Files file.pps>
Order Allow,Deny
Deny from all
</Files>
Где file.pps - имя моего файла

Soccerlive, вы или не тот htaccess скопировали или темой ошиблись.

S
На сайте с 08.02.2007
Offline
185
#28
Shtogrin:
Soccerlive, вы или не тот htaccess скопировали или темой ошиблись.

Да, действительно, не оттуда скопировал

Вот так верно:

<Files file.pps>

ForceType application/octet-stream

</Files>

Unlock
На сайте с 01.08.2004
Offline
782
#29
Shtogrin:
В IE было (наверно и еще остались) много проблем Content-Disposition
http://www.google.com.ua/search?imgsz=xxlarge&num=20&hl=ru&q=Content-Disposition%3A+attachment+site%3Asupport.microsoft.com&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&meta=

Роман, проблему Вы как всегда верно указали :) Только опять мое не знание PHP не дает возможность реализовать Вашу подсказку. Надо ведь чтобы header такой отдавался если файл пытаются скачать, а я без условия впихнул ваш код и естественно скрипт вообще не работает. Подскажите пожалуйста как будет выглядеть полная реализация.

Я нашел такое:

function downloadFile ($file, $mimetype)

{
$status = 0;
if (($file != NULL) && file_exists($file)) {
if(isset($_SERVER['HTTP_USER_AGENT']) &&
preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']))
{
// IE Bug in download name workaround
ini_set( 'zlib.output_compression','Off' );
}
// header ('Content-type: ' . mime_content_type($file)
header ('Content-type: ' . $mimetype);
header ('Content-Disposition: attachment; filename="'.basename($file).'"');
header ('Expires: '.gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y"))).' GMT');
header ('Accept-Ranges: bytes');
// Use Cache-control: private not following:
// header ('Cache-control: no-cache, must-revalidate');
header("Cache-control: private");
header ('Pragma: private');

$size = filesize($file);
if(isset($_SERVER['HTTP_RANGE'])) {
list($a, $range) = explode("=",$_SERVER['HTTP_RANGE']);
//if yes, download missing part
str_replace($range, "-", $range);
$size2 = $size-1;
$new_length = $size2-$range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range$size2/$size");
}
else
{
$size2=$size-1;
header("Content-Range: bytes 0-$size2/$size");
header("Content-Length: ".$size);
}

if ($file = fopen($file, 'r')) {
while(!feof($file) and (connection_status()==0)) {
print(fread($file, 1024*8));
flush();
}
$status = (connection_status() == 0);
fclose($file);
}
}
return($status);
}

Но не знаю как адаптировать это код к моему случаю.

dkameleon
На сайте с 09.12.2005
Offline
386
#30

Unlock,

если у вас все те файлы лежать в одной папке, то попробуйте такое готовое решение:

Просто поместите эти два файла в ту же папку.

Ваши файлы станут выдаваться через мод_реврайт этим скриптом.

zip dl.zip
Дизайн интерьера (http://balabukha.com/)
1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий