2012-04-03 19 views
4

すべてのブラウザで作業するための簡単な解決策の後です。すべてのブラウザでファイルを強制保存 - ブラウザウィンドウで開くことはありません

特定のファイルタイプ、またはクラスを介したターゲットリンクについては、どのようにすれば、すべての主要なブラウザで強制的にダウンロードすることができますか?

私はapachceサーバーに最適なソリューションを見つけたと思っていました。これを.htaccessに追加することで実現しました。

http://css-tricks.com/snippets/htaccess/force-files-to-download-not-open-in-browser/

AddType application/octet-stream .csv 
AddType application/octet-stream .xls 
AddType application/octet-stream .doc 
AddType application/octet-stream .avi 
AddType application/octet-stream .mpg 
AddType application/octet-stream .mov 
AddType application/octet-stream .pdf 

FirefoxとSafariで動作しているようですが、(何かをテストしていない)、クロムまたはIEではない

いずれかのリンクを作成する方法についての解決策で私を助けてくださいすべてのブラウザに対して、ブラウザで開くのではなく、ファイルを強制的にダウンロードします。

私は完全なブラウザ証明ソリューションを見つけることができないようです。それは不可能ですか?

チュートリアルやスニペットへのリンクはすばらしいでしょう。

私のウェブサイトはPHPベースなので、もしそれが可能ならPHPで動作させることができます。

おかげで「添付ファイル」へのContent-Dispositionヘッダー、そう(PHPで)ように設定し

答えて

5

header('Content-Disposition: attachment'); 

を、それがものと異なる場合であっても(ダウンロード用のファイル名を提案することができます)URLで与えられた:

:あなたはApacheサーバで直接それをしたい場合は

header('Content-Disposition: attachment; filename=file.ext'); 

、これを試してみてくださいコンテンツ処分はそれなしで動作するかどうか

(あなたはFilesMatchパターンでより多くの拡張機能を追加すること)することができます場合は、アプリケーション/ octet-streamのヘッダーを使用しないようにする

てみてください、それが、あります。これは、一部のシステムが実際にContent-Typeに注意を払い、それをファイルとともに保存するためです。彼らのシステムが正しいMIMEタイプのファイルを見つけ出すことができるのであれば、通常、ユーザにとってはより良い方法です。

$file = 'file.gif'; // example 
$filesize=filesize($file); 

if ($filesize > 0) { 
header("Pragma: public"); // required 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/gif"); 
header("Content-Length: ".filesize($file)); 
header("Content-Disposition: attachment; filename=\"".basename($file)."\";"); 

readfile($file); 
} 

あなたがいないファイル構造(例えばアプリ/ iPhone)でのデバイスの問題に直面して行うが、あなたが削除することができます:$fileはHERESにあなたのファイルへのパス、私は多くの場合、これを行うために使用するスクリプトを保持していると仮定すると、

+0

こんにちは、あなたの助けをありがとう。私はこれを私のWordPressのウェブサイトに追加しています。私の一回のdownload.phpテンプレート(これは強制的なダウンロードが行われる場所です)では、このようなテンプレートにあなたの行を追加しました... '<?// /** * @packageワードプレス * @サブパッケージMyTheme */ get_header(); header( 'Content-Disposition:attachment'); ?> ' しかし、効果がないようですか?ありがとう – Joshc

+0

ブラウザに何かを出力する前にすべてのheader()コールを必ず実行してください。 get_header()関数が何かを出力する場合は、その前にheader()を呼び出します。 –

0

それを修正するContent-Disposition行。

+0

ありがとう、あなたの答えは本当に面白いようです。私はこれをwordpressの基本ループで簡単に動作させることができると思いますが、私のPHPの知識は非常に基本的です。ギャレーの短いコードを使ってこれを動作させようとしています...このカスタムギャラリー関数によって生成される 'do_shortcode( '[gallery customgal =" true "]');' ... https://gist.github .com/2300437 - ** $ fullsize_image **変数を強制的にダウンロードしたい、** line 108 **で使用する。どんなポインタでも大変感謝しています。ジョシュ – Joshc

0
<FilesMatch "\.(?i:pdf)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 

.htaccessファイル(あなたが欲しい方に変更PDF)にこれを追加 - これは、現在、私がテストしたすべてのブラウザで動作している(オペラやサファリをテストしていない)

関連する問題