force download

16 отговора 661 прегледа
#1

force download

prez edin window.open podavam edin pdf s

header("Content-Type: Application/force-download");
header("Location: file.pdf");

no za syjalenie v zavisimost ot conf-a na user-a toi se downloadva ili se pokazva v djameka. Kak da go nakram da se download-va pri potrebitelia nezavisimo dali toi ima adobe acrobat, kak mu e konfiguriran i t.n...?

probvah i s header("Content-Disposition: attachment; filename=file.pdf"); no bez rezultata, na niakoi im se pokazva direktno v malkia djameka.

Отговор
в отговор на ivo #2

Re: force download

миме тайп апликейщън бин-хекс :-))))
header("Content-type: application/bin-hex");

E tuk ni6to niama :[линк]
Отговор
в отговор на ivo #3

Re: force download

Най сигурно: header("Content-type: application/octet-stream");

Everything louder than everything else...
Отговор
в отговор на ivo #5

няма 100% решение

принципно трябва да ти върши работа само [линк], но ако го ползваш в пълния вариант

принципно, трябва да ти върши работа само header("Content-type: application/octet-stream");, ама не за всички видове и версии браузери

да, ама не - различните видове браузери се държат по различен начин и имат различни бъгове, т.е. или си намери нещо, което работи (примерно виж в някоя CMS как го правят) или си напиши нещо самичък, което взима под внимание всички случаи

примерно
header("Content-type: application/force-download");
или
header("Content-type: application/octet-stream");
ако HTTP_USER_AGENT е MSIE
....
header("Content-Disposition: filename=$файл" . "%20");
....
иначе
....
header("Content-Disposition: attachment; filename=$файл");
....
енд

виж всички възможни преебавки, които могат да ти се случат, т.е. %20 е заради IE-то, но пък трябва да вземеш в предвид и session limiter-a, ако имаш и ползваш такъв и т.н. и т.н.
виж всички коментари на страницата в PHP документацията за header, там най-вероятно ще откриеш ценни идеи и работещата идея

успех!

Отговор
в отговор на ivo #6

Re: force download

Иво, я пробвай това:

header("Content-Disposition: attachment; filename=".$filename."\n");
header("Content-Transfer-Encoding: binary\n");

Отговор
в отговор на MrKnowltAll #7

izprobvano

пробвано е:

header("Content-Type: application/force-download");
header("Content-Type: application/x-msdownload");
header("Content-Type: Application/bin-hex");
header("Content-Type: Application/octet-stream");
header("Content-Transfer-Encoding: binary");

header("MimeType: Application/octet-stream");

header("Content-Disposition: attachment; filename=file.pdf");

$fh = fopen("file.pdf", "r");
header("Location: $fh");

i niama opravia

Отговор
в отговор на lvo #8

Re: force download

чрез ftp_get със сигурност ще се получи, но това го пробвай в краен варянт

Break The UnBreakable
Отговор
в отговор на lvo #9

Re: izprobvano

application/force-download
application/x-msdownload
application/bin-hex

такива MIME просто няма.

А и никой нормален броузър не би свалил и записал файл без знанието на потребителя. Нема начин. ;))

(не говорим за images JS swf..)

Отговор
в отговор на wiz #10

Re: izprobvano

neee, az iskam da pita, niama problem. daje tochno tova iskam. da pita kyde iskash da ia save as...a ne da ia otvaria direktno...

Отговор
в отговор на lvo #11

Re: izprobvano

Аха, моя грешка тогава.
Ами манипулирането на файлове е работа на потребителя, така че няма начин.
А и pdf е доста употребяван формат, което предполага, че потребителя вече е направил съответноте настройки, за това как браузъра да борави с такъв тип фаилове.

Отговор
в отговор на ivo #12

Re: force download

еех, ама що не се разтърси из нещата дето ти казахме ...

тва го извадих от phpBB-то, чийто даунлоад работи 100%, където и да съм го пробвал:

@ob_end_clean();
@ini_set('zlib.output_compression', 'Off');
header('Pragma: public');
header('Content-Transfer-Encoding: none');

header('Content-Type: ' . $attachment['mimetype'] . '; name="' . $attachment['real_filename'] . '"');

/тук $attachment['mimetype'] е application/octetstream за IE & Opera и application/octet-stream за останалите/

header('Content-Disposition: inline; filename="' . $attachment['real_filename'] . '"');

/тук можеш Inline-а да го смениш с attachment или каквото там пише в RFC-то/

$size = @filesize($filename);
if ($size)
{
header("Content-length: $size");
}
readfile($filename);

Отговор
в отговор на AcidMemory #13

Re: force download

Аз го правя така и ми работи :
header("Content-disposition: filename=".$name);
header("Content-type: application/bin-hex");
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
echo $DATA ;
die();

E tuk ni6to niama :[линк]
Отговор
в отговор на ro6avia #14

Re: force download

А случайно да си пробвал дали това работи на IE за Mac? Специално за IE ми трябва, щото на Mozilla всичко е ок. Проблем е, че при IE името на файла в кутията за Save As не е това, което му указваш с filename=".$filename ами си остава download.php или както си го кръстил там. Интересно ми е някой успял ли е да излъже IE за Mac.

Always Outnumbered - Never Outgunned
Отговор
в отговор на Lupi #15

Re: force download

пробва ли винаги да слагаш съответния

header("Content-type: application/application_type");

Отговор
в отговор на AcidMemory #16

Re: force download

Да, пробвах и не става. С IE под Windows няма проблеми, но на Mac не ще да работи. Изписва download.php и записва файла с това име. Самият файл си е наред, само дето не е с нужното име. Абе тия макове само проблеми създават, то само това да беше...

Always Outnumbered - Never Outgunned
Отговор
в отговор на Lupi #17

Re: force download

хм, а що не пробваш тогава да се изхитриш, примерно:

[линк]<file.ext>?file=<file.ext или ако ид, ако трябва да е нещо друго> или нещо от рода (целта е ие-то да подмине download.php и да захапе файл.разширение, а пък ти URI-то след него ще си го парснеш от download.php файла)

Отговор