• ベストアンサー

htaccess Actionの記述、動作について

.htaccessのActionを使って特定のファイルをダウンロードしたらログを取りたいと思っています。 そこでActionを使おうと動作を試しているのですが、思ったように動作していません。 .htaccessの内容(下記以外他の記述はありません) Action image/jpeg /test/accesslog.cgi .htaccessの置き場所は http://ドメイン/test/.htaccess accesslog.cgiの内容 #!/usr/local/bin/php-cgi-5.2.5 <?php $fp = fopen("log.txt","a"); fputs($fp,date("Y/m/d H:i:s") . "\n"); fclose($fp); ?> http://ドメイン/test/test.jpg にアクセスするとブラウザにはtest.jpgが表示され、log.txtにアクセス時間が保存されるものだと思っています。 しかし、ブラウザには?と半角の文字が表示されます。 htaccessを無効にした場合の画像へのアクセス、CGI単独での動作は確認しており、htaccessを間違えているかサーバの設定が影響しているのだろうと判断しています。 また、関係あるかわかりませんが、Actionの内容を下記のように間違えたパスにすると Action image/jpeg /_test/accesslog.cgi test.jpgにアクセスしたブラウザには以下のようにエラーが出ます。 The requested URL /_test/accesslog.cgi/test/test.jpg was not found on this server. /_test/accesslog.cgi was not found on this server.ならわかるのですが、 その後に/test/test.jpgとアクセスしているファイルへのパスが引っ付いています。 何を間違えているのか検討がつかず困っています。 どなたかわかりましたら教えてください。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

Actionで指定されたスクリプトに、環境変数PATH_INFOとPATH_TRANSLATEDが送られます。つまりaccesslog.cgiは   accesslog.cgi/test/test.jpg と起動されたらログを記録した後で、pathinfoのtest/test.jpgを元にtest.jpgの内容をブラウザに返すまでが仕事になります。test.jpgを読み込んでブラウザに送ってやらなければいけません(当然headerで適切なレスポンスヘッダを付けて)。

dede_nd
質問者

補足

ありがとうございます。 CGIが別スレッドのようなイメージで裏側で動いてくれるものだと思っていました。前進できました。

その他の回答 (2)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.3

それよりも 画像である事が判っているなら http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#customlog http://httpd.apache.org/docs/2.0/env.html 下の方の「画像へのリクエストをアクセスログに記録しない」 このあたりを参考に標準で持っているログ記録を使って収集した方が早いし安全だし負荷は減るし取りたい情報をかなり増やせると思うけどどうかな

dede_nd
質問者

補足

ありがとうございます。(No.2にありがとうございますと書き忘れました。失礼しました。) 説明不足ですいませんが、htaccessの挙動を確認したく、画像で試していただけなのです。実際はPDFなどのファイルをマウスの右クリックでダウンロードしたときに、自動でDBにログを残すのが目的なのです。 ですので、カスタムログのはまた別の用途の時に参考にさせて頂きます。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

No1も書いてるけど http://httpd.apache.org/docs/2.0/mod/mod_actions.html#action 抜粋 ------------------------- 例では、MIME コンテントタイプが image/gif のファイルへのリクエストは、そのファイルの代わりに指定されたスクリプト /cgi-bin/images.cgi が呼ばれます。 ------------------------- 「代わりに」って事らしいよ。 だからそのphpで何かしら文字を出力すると 言ってる事が判るようになるんじゃないかな。

dede_nd
質問者

補足

「そのファイルの代わりに」なんですね。正直残念です。

関連するQ&A