PHPでリンククリックしてファイルをダウンロード
今日、きゅうりを一本収穫しました。つやつやです。
「あ、今日できてる!」とか「明後日には食べれるかな~」とか言ってる今が一番楽しいです。
ちなみに去年は1苗から200本近く採れてしまい、配布や消費に勤しみました。まさにきゅうり地獄。
トランスビットの外の人は、「きゅうりの食べ過ぎで体が緑色になった気がする」とか言っていましたが……おかしいな。
補色の関係にあるトマトもたくさん食べたのに。
ということで、今日はブラウザでの収穫作業の話です。
画像に貼ったリンクをクリックすると、通常ブラウザで画像が開いてしまいます。
開かずにダウンロードさせるので思いつく方法といえば、右クリックメニューから「名前をつけてリンク先を保存」とかかな。
リンククリックで直接ダウンロードさせたい場合、PHPで画像をDLさせることができます。
download.phpを下記のような内容で作っておき、ダウンロードさせたいリンクにdownload.phpを指定&URLクエリストリングで画像ファイル名とかを渡してやれば、再利用可能でラブリーというわけです。
//ファイルのパス $fpath = $_GET["ps"]; $fpath = $fpath.'.jpg'; //ファイル名 $fname = $_GET["fn"]; $fname = $fname.'.jpg'; //IE空DL対策 $data = file_get_contents($fpath) or die('ERROR:cannot get'); //いらんかも mb_output_handler($fpath);// 文字化け対策 mb_output_handler($fname);// 文字化け対策 header('Cache-Control: public'); header('Pragma: public'); header('Content-Type:application/octet-stream'); header('Content-Disposition: attachment; filename="'. rawurlencode($fname) .'"');// 文字化け対策 header('Content-Length: '. strlen($data));// IE空DL対策。 ob_end_clean(); // これがないとファイルが破損して悲しいことになる readfile($fpath);
今回は、WordpressでLitebox的なプラグインを使っていたので、URLに[.jpg]が入っていると問答無用で別ウインドウが開いてしまうため、拡張子を削ったファイルのパスをURLに渡しました。ついでにファイル名用の文字列(日本語・文字化け注意)も渡してます。それがpsとfnですね。拡張子は必要だから後で両方に付け足し。
いやー……久しぶりにIEに滅多打ちにされました。一時はどうなることかと。
参考にしたサイトはこちら。いつもながら、えらい人たちに助けられてます。
PHPのファイルダウンロードでファイル破損を防ぐ方法!
PHPでダウンロードしたファイルが0kbになってしまいます
Filed under: php