Tech エントリー[調査・情報収集]

PHPでファイルをダウンロードさせるには

あとで読む コメント (2) トラックバック (2) Atom/RSS

PHP でダウンロードを実行するコードは以下が参考になります。

ファイルを読み込んで標準出力する readline() という関数とレスポンスで返す際の Content-Type を application/octet-stream にするあたりがポイント。

実際に作りたい処理では、ページ遷移を含みたいので少し工夫が必要だ。

参考例としては、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.ダウンロードさせ...

コメント (投稿する)

tokushima2006年11月29日 19:04

> レスポンス時に Content-Type : application/octet-stream

rhacoだとnetwork/Headerで
Header::requestAttachment($fileOrUrl,$filename,$contentType)
を使ってみるといいかもしれません。

やまざき2006年11月30日 00:26

> Header::requestAttachment($fileOrUrl,$filename,$contentType)

ほほぅ。rhaco の中身を詳しく見ていくのも面白そうですね。
まだまだ勉強不足っす。:-(

コメント投稿





エントリー検索



最近のエントリー




テクノラティプロフィール

フィードメーター - Jamz Update (all blogs)

スカウター : Jamz

awasete.oshira.se

あわせて読みたい

track feed
SEO対策 | ブログパーツ


イベント情報

LL魂
08月04日(土)開催 参加予定


クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.

テクノラティプロフィール