技術資料

WebからファイルをダウンロードさせるPHP・Perlスクリプトの書き方

2007.10.11

error この記事は最終更新日から17年以上が経過しています。

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(){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でファイルパーミッションを変更する方法(chmod関数)

2024.11.16

PHPとPerlには、ファイルのパーミッションを変更するためのchmod関数が標準で用意されています。この記事では、PHPとPerlそれぞれのchmod関数を使ったファイルパーミッション変更の基本的な使い方を紹介します。

Perl PHP

URLエンコード・デコードの実装方法(Perl、PHP、JavaScript対応)

2009.12.02

URLに2バイト文字を含めるためのエンコード・デコード方法を、Perl、PHP、JavaScriptの3言語でまとめました。各言語のシンプルな関数を使った実装例を紹介し、文字列を正しく処理する方法を解説します。

JavaScript Perl PHP

perlとPHPでのCookie操作—書き込みと読み込みの基本

2009.11.15

CookieをHTTPヘッダに書き込む方法と、書き込んだCookieを読み込む方法について、perlとPHPのコード例を交えて解説します。具体的な設定項目や、複数のCookieを扱う方法も紹介し、簡単に使える方法を学べます。

Cookie Perl PHP

perlとPHPで使える、フォーム入力のエラーチェックに役立つ正規表現集

2009.03.28

フォームからのデータ送信はWebアプリケーションの基礎ですが、ユーザーが入力する内容が想定通りであるかを確認するためのエラーチェックは重要です。この記事では、perlとPHPでフォームデータをバリデートするための正規表現を具体例とともに紹介します。

Perl PHP 正規表現

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP