perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法

2007年10月11日 01:17 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」みたいな感じにするようにしとくと便利かもですね。

Twitterつぶやく
阿部辰也へのお仕事のご依頼・お問合せはこちら

Twitter始めました。Followはお気軽にどうぞ。

関連するブログ記事
スポンサード リンク
カテゴリー
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]

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメント(34)

Nobunaga [2010年2月26日 17:41]

このサイトをとても気にっていますPHP初心者です。

tsvファイルのダウンロードを試しているのですが、ダウンロードしたファイルの後にviewのソースが含まれてしまって困っています。

何か解決策等、ご存知でしょうか?

Tatsuya [2010年2月28日 18:49]

> Nobunagaさん

viewのソースが含まれる、ということはCakePHPかなにかのフレームワークを使われているんでしょうか。
あの辺のフレームワークに関してはほとんど使ったことがないので正直よくわかりません……すいません。
readfile(); のあとに view が自動で出力されてるのかな、とは思いますが……。

take79vnjp [2012年2月14日 17:20]

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;

fast payday loan [2013年12月19日 04:11]

ngqxbel http://paydayloansusapqj.com/ fast payday loan

quick quid [2014年3月14日 21:29]

qmzsyb http://paydayloansukprh.co.uk/ quick quid

nike free 4.0 v2 [2014年7月14日 17:35]

good pos. i like it. thank you very much.

nike free 5.0 [2014年7月14日 17:37]

nike free shoes on sale at low price.

nike free tr fit 2 [2014年7月14日 17:38]

nike free tr fit 2 shoes on www.barefreerun.com

nike free tr fit 3 [2014年7月14日 17:38]

nike free tr fit 3 2014 latest shoes on sale now.

payday loans [2014年9月16日 16:22]

euqlziio http://paydayloansilm.com/ payday loans

payday loans [2015年3月21日 07:39]

qfhlsbz http://paydayloansrnx.com/ payday loans

penny trader [2015年5月 1日 05:44]

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.

oybfpx [2015年5月19日 05:41]

ztwvcbr

hello [2015年5月20日 17:27]

yqxlpdu uutpobvq

hello [2015年5月20日 20:08]

eemcfp [url=http://dxzckm.com/]ctifwbg[/url]

hello [2015年5月20日 22:50]
payday loans [2015年6月27日 18:27]

gxycbqoo http://2012paydayloans.net/ payday loans

payday loans online [2015年8月16日 08:34]

hyakiq http://paydayloans2ua.com/ payday loans online

nike free 5.0 orange and blue mens [2016年1月28日 06:14]

Tray lined with satin material to help protect the sunglasses.

nike free run 3 v4 womens [2016年1月28日 06:15]

These are used to show off the Fashion oakley sunglasses and the inter station convenience store.

nike free 3.0 womens uk [2016年1月28日 06:17]

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.

nike 2 [2016年5月 7日 11:18]

The lasting exposure of RayBans does not preach only of good marketing savvy if it ever is.

nike 0 [2016年5月 7日 11:19]

Avon, Sharpie, Estee Lauder, Oakley sunglasses, Proctor and Gamble and just about everyone else has a product out this October contributing to the cause.

nike 0 [2016年5月 7日 11:19]

A well streamlines PPC campaign is the secret of multiplying web traffic and ROI.

cialis [2016年7月 9日 15:00]

Hello!

cialis [2016年7月 9日 15:00]

Hello!

generic [2016年7月 9日 15:01]

Hello!

purchase_viagra [2016年7月 9日 15:01]

Hello!

fast [2016年7月 9日 15:02]

Hello!

air max 2015 uae [2016年9月 5日 07:48]

Most convictions for forgery in Florida are considered a third degree felony.

air max 2015 reflective silver [2016年9月 5日 07:50]

Now even if the paint is slightly worn off, authentic Oakley shades will have a raised lettering of the symbol.

air max 2015 game royal [2016年9月 5日 07:51]

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.

air max 2016 australia [2016年9月 5日 07:52]

The purchase compliments Luxotticas Ray Ban, Chanel, Polo Ralph Lauren and Versace lines, among others.

コメントする


画像の中に見える文字を入力してください。

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム