• ベストアンサー

ファイルのダウンロードのイベント取得について

いつもお世話になっております。 タイトルの表記が的を得ていないかもしれませんので、説明させてください。 現在、PHPでとあるサイトを構築しております。その中で、exeやpdfのファイルをダウンロードできるようなページも作成しております。 PHPはセッション管理のために使用しています。ので、実際には、HTMLの<a href="ファイル名">@@@</a>というHTMLソースをPHPでprintしています。 で、ユーザがマウスクリックをした場合、OSのファイルのダウンロードというダイアログが出て、「開く」または「保存」をクリックすることでダウンロードは可能です。 そこで、ファイルがダウンロードされたときに、ダウンロードされたというログを出力したいのですが、方法がわかりません。現在、それ以外の場所でのログはPHPの関数を用意し、ログ出力しております。 <aタグを使用しているので、JavaScriptで、マウスイベントを取得できるかと思ったのですが・・・。いい方法があれば教えていただきたいと思います。 よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

おはようございます。半分寝ぼけて作りました。 こんな感じではどうでしょうか。 適当なファイル名(*.php)で保存し引数にファイル名を入れて投げてやると ダウンロードダイアログが出ます。 つまりダウンロードさせたいリンクを <a href="download.php?abc.exe">・・・</a>という感じにすることで ヘッダー付きでファイルを出力しログも記録できます。 <?php $strQuerystring = $_SERVER[QUERY_STRING]; /*何を引数にされるかわかりませんので 正規表現などを使って入力値をチェックすると良いです。 */ //適当です。 if(!ereg("^[a-zA-Z]*\.exe$",$strQuerystring)) errormsg(); $strPath = "/home/hoge/download/"; //ベースディレクトリ $strDownload = $strPath.$strQuerystring; //ダウンロードの対象を代入 $strMime = "application/octet-stream"; //Contenttypeはexeだからoctet-stream //ファイルの存在チェック $boolFileExists = False; //初期化 if(file_exists("$strDownload")) $boolFileExists = true; if($boolFileExists){ /* */ /* ここらへんにダウンロードされた場合のログ取得スクリプトを。 */ /* ヘッダ関数の前に文字列を出力されると、エラーになりますので */ /* ログ記録の際にエラーが出ても停止しないように @ を忘れずに */ output($strDownload,$strMime,$strQuerystring); }else{ errormsg(); } function output($strDownload,$strMime,$strQuerystring){ //出力用ユーザー関数 header("Content-type: ".$strMime); header("Content-Disposition: attachment; filename=".$strQuerystring); header("Content-length: " . filesize($strDownload)); readfile($strDownload); } function errormsg(){ //エラーメッセージ出力後exit。 echo "ファイルが見つかりません。"; exit; } ?>

その他の回答 (2)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

>「ファイル名を受け取って、それをヘッダとともに出力する」 > というのはどのようにすればよろしいのでしょうか? 言葉の通りですが、具体的に言えば パスをコードに変換して、必要なヘッダー(content-type等)とともにはき出し、そのファイルを標準出力で書き出す…といった感じです。 この通り後はコーディングすれば上手くダウンロードできると思いますよ。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 現在直接ファイルに対してリンクを貼ってあるものに、一段階サーバ側の スクリプトをかませるようにしたらいかがでしょうか? <a href="./fileout.php?file=aaa.pdf">ダウンロード</a> fileout.phpはファイル名を受け取って、それをヘッダとともに出力するように作れば、 fileout.phpの中の処理で、ダウンロードされたというログを出せると思います。 (リンク集などのランキングと同じ仕組み) リンクをクリックした時点でサーバに要求は行ってるので、それを受けとれるスクリプトを用意してあげればよいわけです。

hiko758
質問者

補足

早速の回答ありがとうございます。 「ファイル名を受け取って、それをヘッダとともに出力する」というのはどのようにすればよろしいのでしょうか?

関連するQ&A

  • fp5ファイルがダウンロードできません

    Windows2003 IISサーバにアップしたfp5ファイル(ファイルメーカファイ)が、ダウンロードできません。 <a href="file.fp5">ファイル</a>(HTML ブラウザ:IE) で、 (1)ファイルをクリックすると "ページが見つかりません"となり、ダウンロードできません。 (2)右クリックで、対象をファイルに保存を選択するも、 "IEでは、file.fp5をダウンロードできません。 お分かりになりましたら教えてください。よろしくお願いします。

  • 別HTMLファイルを、レイヤーとして表示させたい

    2つのHTMLファイル「index.html」と「layer.html」があるとして、index.htmlにあるリンクをクリックすると、layer.htmlの内容がレイヤーとして、同一ウインドウに表示されるようにすることは可能でしょうか? layer.htmlには、PHPのスクリプトが入っていまして、そこで色々な処理をして、HTML部分を表示させたいのです。 [index.html] <html> <body> <a href="layer.html?id=hoge">登録する</a> </body> </html> [layer.html] <?php session_start(); $_SESSION['id'] = $_GET['id']; ?> <html> <body> <a href="">トップページに戻る</a> <a href="">閉じて作業を続ける</a> </body> </html> のような感じです。

  • HTMLファイルをダウンロードさせる方法

    こんにちは HTMLで <a href="./abc.html">だうんろーど</a> この場合は、ページ遷移となりますが、このabc.htmlをファイルとしてダウンロードさせる書き方はあるのでしょうか? イメージとしては <a href="def.xls">えくせるふぁいる</a> これでエクセルファイルをダウンロードさせるような考え方です。 圧縮をしてダウンロードさせる方法以外でなにかあればお願いします。

  • ファイルのダウンロード

    こんにちは CSVファイルをダウンロードさせるページを作成 しています。 しかし、ファイル名がaspファイルになってしまいます。 いろいろ調べてみたのですが、原因がつかめなかったので解決策を教えて下さい。 ソースは下記の通りです。 ================================ <% @Language="VBScript" %> <HTML> <HEAD> <TITLE>CSV出力</TITLE> </HEAD> <BODY> <% 'CSV出力 Response.ContentType = "application/octet-stream" Response.AddHeader "Content-Disposition","attachment; filename=test.csv" Response.write Session.Contents("USER_NO") & "," Response.write Session.Contents("SS_BUCD") & "," Response.writeline Session.Abandon Response.End %> 【メッセージを記入予定】 </BODY> </HTML> ================================ HTMLが含まれているのが問題なのでしょうか? しかし、HTMLを取り除いても現象が変わりませんでした。 よろしくお願い致します。

  • 【教えて下さい!】HTMLで作った画面から、txtファイルをダウンロードさせる方法

    HTMLで作った画面から、.txtファイルを、保存先を自由に指定、ダウンロードさせる方法(書き方)を教えてください。なお、txtファイルと、ファイルをダウンロードするページのhtmlファイルは同じディレクトリにあります。 ダウンロードさせたいファイル名をaaatxtと仮定すると、現在は <html> <head> ******* </head> <body> <a href="aaa.txt" target="_blank">aaaのダウンロード</a> </body> </html> 以上のように書いています これだと、新たにウィンドウが開かれ そのツールバーから「ファイル」→「保存」で保存できるのですが これを、「aaaのダウンロード」をクリックすると「保存先の選択」→「保存」という手順でダウンロードさせるように変更したいのです。 当方、HTMLが少し分かる程度で、Java Script等の言語を知りません。 もしHTML以外の言語を埋め込む必要がある場合、どこでどのようにそれを宣言するのか、といったレベルからご教授願います。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • ファイル一覧を表示しその画面からダウンロードを行いたい

    こんにちは。PHP5を勉強して約半年のものです。PHP5でフォルダ内のファイルを表示し、そこで選択したファイルをダウンロード、または保存用のダイアログを開くプログラムを作成するにはどうすればよいのでしょうか? フォルダ内のファイルの一覧を表示し、<a href>を利用して指定したファイルにアクセスすること、http://opqr.jp/2007/09/php.htmlのサイトなどを参考にクリックしてファイルの保存ダイアログを開いたり、単純な保存の仕方などはできるのですが、質問の通りファイル一覧表示からファイル名をクリックした際、その(クリックした)ファイルをダウンロードするにはどうすればよいのでしょうか?

    • ベストアンサー
    • PHP
  • 「ファイルのダウンロード」のダイアログを出さない方法

     HTMLファイルから「*.chm」(HTMLヘルプ形式)や「*.exe」などの実行ファイルを呼び出すと「ファイルのダウンロード」のダイアログが出て「ファイルによってはコンピュータに問題を起こす可能性があります…」と表示され「開く」「保存」…を選択する必要があります。  下はHTMLのプログラムの一例です。 〔例〕  <a href="example.chm">ヘルプ</a>  「□この種類のファイルであれば常に警告する」が選択無効(影表示)になっており、常に「ファイルのダウンロード」のダイアログが表示されます。  上の[例]でスクリーンに表示される[ヘルプ]をクリックすることで[example.chm]を開きたいのです。また、「*.exe」ファイルについても、選択ダイアログを表示せずに指定のファイルを実行したいのですが…方法を教えてください。  よろしくお願いします。

    • ベストアンサー
    • HTML
  • HPからファイルをダウンロードできるようにしたい @cpi

    HPからファイルをダウンロードできるようにしたく、アドバイスをお願いします。  Downloadさせたいファイル:abc.PDF  HP設置場所      :レンタルサーバー cpi(供用サーバー)   http://www.cpi.ad.jp/   ローカルPC上では、HTMLに  <a href="abc.pdf"><img src="def.gif">ダ</a> を追加することでちゃんと動作しました。 クリックしてpdfが起動します。 保存も可能です。 対象ファイルも含めて、cpiにアップロードして確認してみると、 画像ファイルは表示されるものの、クリックすると、  Not Found  The requested URL /saiyo.pdf was not found on this server. と出て、ファイルをダウンロードできません。 セキュリティ上、ファイルをダウンロードができないのかなぁと思います。 そうすると、PHPという機能を使うのでしょうか? (さっぱりわからないで発言しています) ホスティング先のCPIでは、■PHP 4.4.7とPHP 5.2.4に対応しています。 それともPerlというのを使うのでしょうか。■Perl 5.8.8 に対応しています。 こんな状態なのですが、何かアドバイスや、説明が載っているHPを教えていただけないでしょうか。 よろしくお願いします。  

  • EXCELファイルのダウンロード

    HTMLファイルから<A HREF="xxxxx.xls">というように EXCELファイルをダウンロードするようにしました。 しかし、ブラウザ・マシンによってはEXCELファイルを うまくローカルディスクへダウンロード出来ることもあれば、他のマシンだと ローカルディスクに保存せずに、現在開いているブラウザ上に そのままEXCELファイルが開かれたりもします。 私でも色々調査しましたが、どうしてこのような動きの差が出てくるかわかりませんでした。 皆様でこの動きの差についてご存知ないでしょうか?

    • ベストアンサー
    • HTML
  • CSVファイルのダウンロード

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう