Tech エントリー[調査・情報収集]
PHPでファイルをダウンロードさせるには
PHP でダウンロードを実行するコードは以下が参考になります。
ファイルを読み込んで標準出力する readline() という関数とレスポンスで返す際の Content-Type を application/octet-stream にするあたりがポイント。
- PHP TIPS - Vol.5任意のファイルをダウンロードさせる - readfile()
- PHPでファイルをダウンロードするには?
- 快適インターネット生活 | [PHP]ファイル圧縮とダウンロード
実際に作りたい処理では、ページ遷移を含みたいので少し工夫が必要だ。
参考例としては、SF (SourceForge.jp) のようにダウンロードのアクション (実行ボタンをクリックした) 後に特定のページへ遷移してからダウンロードのダイアログを表示させたい。
例えば、PHP フレームワーク である rhaco のダウンロードページにアクセスしたときのような挙動です。
JavaScript でページ表示後に別リクエストを出すようにしているのかと思ったけど、HTMLのソースを見る限りはそういう箇所はなさそう...
Firefox の Extension mozdev.org - LiveHTTPHeadersでザッと見てみたけど...分からず。
もう少し細かく分析してみた。
LiveHTTPHeaders の Headers には sf (/rhaco/22827/rhaco.zip?use_mirror=qgpop) への GET と GIF 画像への GET, それに Google Adsense の対する GET くらいしかのってこない。
Generator というタブに show する項目として request というのがあったのでそちらを有効にして動きを見てみるとっ !!
#request# GET http://qgpop.dl.sourceforge.jp/rhaco/22827/rhaco.zip
という request がリストにのってきた。
ってことは、一度のアクセスで2つの request を発行しているということ?内部的にマルチスレッドでゴニョゴニョしているとか?
...処理方法がイメージ (想像) できない
いやいや、少し冷静に考えてみよう。request しているってことはブラウザ側から複数回のリクエストを実行しているってことだから内部的な処理とか、マルチスレッドでということではない気がする。
もう一度、ダウンロードのアクションを実行した後に表示された HTML のソースを参照して、http://qgpop.dl.sourceforge.jp/rhaco/22827/rhaco.zip で検索。
なんのことはない。
html の head に refresh の記述が...
<META HTTP-EQUIV="refresh" content="1; URL=http://qgpop.dl.sourceforge.jp/rhaco/22827/rhaco.zip">
研究したり、調べることって大事だね。それにプログラムする際にこういう発想ができるかどうかも大切だ。
ダウンロード後に企業の問い合わせフォームのようなサンキューページを表示させたかったんだけど、これで実現方法が分かった。
ただ、ダウンロードさせるファイルのパスは直に書きたくないので http://example.com/donwload/xxx とかにアクセスさせて、このページの冒頭で紹介したやり方でレスポンス時に Content-Type : application/octet-stream してあげれば OK.
スッゲーすっきりした。
追記
追記 2007年11月20日
概要としては、「/pngdir/」には、PNG画像があると想定して、「http://example.com/hoge.php?file=ero.png」といったアクセスがあったら、/pngdir/ero.pngを表示するような簡単なコードです。
ウノウラボ Unoh Labs
コメント (2) トラックバック (2) Atom/RSS
投稿: 2006年11月29日 15:51 / 最終更新: 2007年11月20日 13:45
» ダウンロードライセンスは2006年12月25日で終了
« PHPでドキュメント(リファレンス)を自動生成するには
トラックバック
-
PHPでファイルをダウンロードさせる設定
OPQR.jp : WebサービスとWebデザインについて考えてみる;2007年9月27日 19:35 - 右クリックでファイル保存しなくても、ブラウザのダウンロードウィンドウが開いてダウ...
-
(PHP)PHPでファイルをダンロード(アクセス制限付き)
3流プログラマのメモ書き2008年11月 4日 11:42 - PHPでWebサーバ参照域以外のファイルをダウンロードさせる方法です。 しかも、アクセス制限つきです。 要件は下記の通り。 1.ダウンロードさせ...



コメント (投稿する)
> レスポンス時に Content-Type : application/octet-stream
rhacoだとnetwork/Headerで
Header::requestAttachment($fileOrUrl,$filename,$contentType)
を使ってみるといいかもしれません。
> Header::requestAttachment($fileOrUrl,$filename,$contentType)
ほほぅ。rhaco の中身を詳しく見ていくのも面白そうですね。
まだまだ勉強不足っす。:-(