perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法
perlやPHPを使って、ユーザーにWebブラウザから何らかのファイルをダウンロードしてもらうスクリプトというのは、作る機会も結構多いかと思います。
しかし、ダウンロードしてもらうファイルがjpegやpng、gif等の画像ファイルだったり、PDFやワード・エクセル等のファイルだったり、音声や動画ファイルだったり等、ブラウザでそのまま閲覧できるファイルだった場合、ローカルにダウンロードするダイアログが出ずに、そのままブラウザに表示されてしまうことがよくあります。
そういう場合、「『右クリック⇒対象をファイルに保存』でローカルに保存できます」なんて注意書きをつけて、そのCGIやPHPスクリプトにリンクを張ることも多いかもしれませんね。
この現象は、CGIやPHPからブラウザに送信するHTTPヘッダを少し変えることで、避けることが可能です。
(ただし、ブラウザによっては駄目かも……)
具体的には、以下のようなHTTPヘッダを送信します。
Content-Disposition: attachment; filename="sample.jpg"
「sample.jpg」の部分には、ファイルのダウンロードダイアログにデフォルトで表示される、保存先ファイル名を指定します。
これを踏まえて、perlである特定のjpeg画像を、ダウンロード確認ダイアログを表示させてダウンロードさせる場合は、以下のようになります。
#-- ダウンロードさせる元ファイル $source = '/home/tatsuya/data/img/00001.jpg'; #-- 保存時のファイル名(デフォルト) $filename = 'uetoaya.jpg'; #-- HTTPヘッダ送信 print qq|Content-type: image/jpeg\n|; print qq|Content-Disposition: attachment; filename="$filename"\n|; print qq|\n|; #-- ファイルを読み込んで出力 open(FILE,"$source"); while(<FILE>){print;} close(FILE);
PHPの場合は、以下のような感じ。
// ダウンロードさせる元ファイル $source = '/home/tatsuya/data/img/00002.jpg'; // 保存時のファイル名(デフォルト) $filename = 'aibusaki.jpg'; // HTTPヘッダ送信 header("Content-type: image/jpeg"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($source);
何らかのWebアプリケーションのバックアップデータなんかをダウンロードする場合とかは、保存時のファイル名を「ダウンロード時の日付.txt」みたいな感じにするようにしとくと便利かもですね。
- 関連するブログ記事
-
- カテゴリー
- PHP | perl/CGI
- タグ
- CGI | Content-Disposition | Content-type | HTTPヘッダ | perl | PHP | ダウンロード
- 現在位置
- TOP > Web制作技術 > perl/CGI > perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法
- 前のブログ記事
- PHPのmb_send_mail()関数で送信したメールが文字化けする際の対処法 [2007年10月10日 23:59]
- 次のブログ記事
- 「BANZAI」 - B'z [2007年10月12日 00:56]
コメント(34)
このサイトをとても気にっていますPHP初心者です。
tsvファイルのダウンロードを試しているのですが、ダウンロードしたファイルの後にviewのソースが含まれてしまって困っています。
何か解決策等、ご存知でしょうか?
> Nobunagaさん
viewのソースが含まれる、ということはCakePHPかなにかのフレームワークを使われているんでしょうか。
あの辺のフレームワークに関してはほとんど使ったことがないので正直よくわかりません……すいません。
readfile(); のあとに view が自動で出力されてるのかな、とは思いますが……。
Tatsuyaさん。
こんにちは。
CGIの初心者です。
今CGI経由でのPDFファイルをダウンロードするというプログラムを作っています。
ただ、ダウンロードしたファイルは開けなく、エラーが出ます。ファイルを確認すると0バイトです。よく分からないので、原因を分かれば教えてください。ありがとうございます。
コードです:
$filename = './data/sheet#pdf';
$source = $filena#e ;
print qq|Content-type: text/plain\n|;
print qq|Content-Disposition: attachment; filena#e="$filename"\n|;
print qq|\n|;
#-- ファイルを読み込んで出力
open(FILE,"$source");
binmode FILE;
binmode STDOUT;
while(read(FILE, $value, 4096)){
print $value;
}
close FILE;
ngqxbel http://paydayloansusapqj.com/ fast payday loan
qmzsyb http://paydayloansukprh.co.uk/ quick quid
good pos. i like it. thank you very much.
nike free shoes on sale at low price.
nike free tr fit 2 shoes on www.barefreerun.com
nike free tr fit 3 2014 latest shoes on sale now.
euqlziio http://paydayloansilm.com/ payday loans
qfhlsbz http://paydayloansrnx.com/ payday loans
penny trader I'll promptly grab ones feed because i can't to find your current mail request backlink and also e-newsletter services. Perform you could have almost any? You should allow me to recognize so that I may register. Many thanks.
ztwvcbr
yqxlpdu uutpobvq
eemcfp [url=http://dxzckm.com/]ctifwbg[/url]
satoxhh http://nhlrga.com/
gxycbqoo http://2012paydayloans.net/ payday loans
hyakiq http://paydayloans2ua.com/ payday loans online
Tray lined with satin material to help protect the sunglasses.
These are used to show off the Fashion oakley sunglasses and the inter station convenience store.
For example, if your forgery facilitated the taking of someones property, such as using a fake check to withdraw all of the funds from an unsuspecting persons bank account, you might also be charged with theft.
Thus, in situation your Oakley glasses are damaged throughout shipment, you will be sent a brand new pair.
The lasting exposure of RayBans does not preach only of good marketing savvy if it ever is.
Avon, Sharpie, Estee Lauder, Oakley sunglasses, Proctor and Gamble and just about everyone else has a product out this October contributing to the cause.
A well streamlines PPC campaign is the secret of multiplying web traffic and ROI.
Hello!
Hello!
Hello!
Hello!
Hello!
Most convictions for forgery in Florida are considered a third degree felony.
Now even if the paint is slightly worn off, authentic Oakley shades will have a raised lettering of the symbol.
Unfortunately, as with any successful name brand, there are dozens of Oakley impersonations on the market, and these knock offs do not possess the high quality of polarization that has come to be associated with Oakley sunglasses.
The purchase compliments Luxotticas Ray Ban, Chanel, Polo Ralph Lauren and Versace lines, among others.
コメントする