スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] ファイルをPHPスクリプトを介してダウンロードさせたい

たいして技術的に面倒なことではないものの、ちょいちょい使われるものなのでメモ。

function putFile( $f ){
$len = filesize( $f );
header( 'Content-Disposition: attachment; filename='.$f );
header( 'Content-Length:'.$len );
header( 'Content-Type: application/octet-stream' );
readfile( $f );
}
$f = isset( $_GET['f'] ) ? $_GET['f'] : "";
putFile( $f );


ヘッダ「Content-Disposition」を利用します。

HTTP 非標準ヘッダ - Content-Disposition
http://studyinghttp.net/header#Content-Disposition

使うシーンとしては、ログインが必要な会員サイトとかにあるファイルを
直アクセスされたくはないんだけれど、ダウンロードさせたいなという時に。
ファイルの本体を http でアクセスできない場所に置くとか、ダミーのBASIC認証の
かかった場所に置くとか、.htaccess でアクセス制御するとかして、
そのファイルを読みだして出力することでダウンロードさせるわけです。

上記の書き方だとこのスクリプトと同じディレクトリのものしかダウンロード
できないので、実用では関数にパスを渡して、関数内ではパスからファイル名を
切り出す、といった処理を追加する必要があるかと思います。
(Content-Disposition: で filename= を指定する必要があるため)

たいていの環境ではこれでダイアログが出て何かのアプリで開くか保存するか
という選択になるはずですが、あくまでブラウザの挙動なので必ずそうなるかは
わかりません。実際に利用している方がこれでうまくいかないということで
あれば、何か運用で逃げるかする必要はあるでしょう。
関連記事
スポンサーサイト

テーマ : PHP
ジャンル : コンピュータ

comment

管理者にだけメッセージを送る

検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。