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]



コメント(0)
コメントする