PHPやPerlで、画像などをそのまま表示せず、ファイル保存ダイアログを出させる方法。

↓こういうヘッダをかき出す。

Content-Disposition: attachment; filename="sample.jpg"

Perl

#-- ダウンロードさせる元ファイル
$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);

参考:http://www.abe-tatsuya.com/web_prog/perl_cgi/content_disposition.php