0

サーバー上に、ファイルを直接指すダウンロード リンクがあります。非常に複雑な書き換えルールのセットがありますが、求めているものには影響しません。

私がやりたいことは、ダウンロード数を数えることです。コンテンツをエコーする PHP スクリプトを作成し、PHP スクリプトがすべてのダウンロードを処理するように書き換えルールを使用できることはわかっています。

ただし、気になる点がいくつかあります。

  1. 不注意または見過ごされたバグにより、一部の危険なパス (/etc/passwdなど) がブロックされない可能性があります。../../index.php
  2. Apacheに処理させることを好むスクリプトで応答(およびその他)を処理する必要がHTTP 404 Not Foundあります(サーバーリダイレクト変数に依存するエラーハンドラースクリプトがあります)
  3. HTTP ヘッダー (コンテンツ タイプや変更時間など) が正しく設定されていない可能性があります
  4. 通常、PHP スクリプトを使用するHTTP 304 Unmodifiedと応答が許可されないため、ブラウザーのキャッシュが役に立たなくなり、再ダウンロードによって余分な帯域幅が消費される可能性があります。実際には確認できますが、さらにコーディングとデバッグが必要になります。
  5. PHP スクリプトは、Apache によってファイルを直接ロードするよりも多くの処理能力を使用します。

そのため、統計を実行する他の方法を見つけたいと思います。たとえば、特定のファイル (特定のディレクトリ内) が要求されてダウンロードされたときに、Apache にスクリプトをトリガーさせることはできますか?

4

3 に答える 3

0

これはあなたが探しているものではないかもしれませんが、仕事に適したツールを使用するという精神で、これを追跡するためにGoogle Analytics(またはおそらく他の分析パッケージ)を簡単に使用できます。https://support.google.com/analytics/bin/answer.py?hl=en-GB&answer=1136922をご覧ください。

編集:

サイトの仮想ホスト設定を変更する機能が必要になりますが、ダウンロード用に別のApacheログファイルを作成できます。ダウンロード可能なファイルを保存するためのダウンロードフォルダがあるとしましょう。vhostに次のようなものを追加できます。

SetEnvIf Request_URI "^/downloads/.+$" download
LogFormat "%U" download-log
CustomLog download-tracking.log download-log env=download

これで、/ downloads /フォルダーから何かが要求されると、それはdownload-tracking.logファイルに記録されます。

知っておくべきいくつかのこと:

  • 必要な数のSentEnvIf行を含めることができます。それらがすべてダウンロード環境変数を設定している限り、リクエストはCustomLogに記録されます
  • 私が示したLogFormatは、要求されたURIのみをログに記録しますが、URIだけでなく、はるかに多くのログを記録するように簡単にカスタマイズできます。http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformatを参照してください。詳細については。
  • PDFファイルを提供している場合、一部のブラウザ/プラグインはPDFのページごとに個別の要求を行うため、ログを読み取るときにそれを考慮する必要があることに注意してください。

この方法の主な利点は、コーディングが不要で、構成を変更するだけで、すぐに使用できることです。もちろん、欠点は、何らかのログ処理を行う必要があることです。それはあなたにとって何が最も重要かによるだけです。

もう1つのオプションは、PHPスクリプトとreadfile関数を使用することです。これにより、データベースへのリクエストのログ記録がはるかに簡単になりますが、前述した他の問題が発生します。

ApacheログをMySQLにパイプする方法はいくつかありますが、私が見たところ、それは難しい場合があります。何をしているのかによっては、努力する価値があるかもしれません...しかし、それでもそうではないかもしれません。

于 2012-10-23T06:25:40.913 に答える
0

Apacheのmod_luaは、Apache 内のリクエスト処理に独自のコードをフックするための、おそらく最も一般的で柔軟かつ効果的なアプローチです。通常、最も直接的なアプローチを提供するタスクの言語を選択します。そして、lua は他の何よりも c/c++ とのやり取りに優れています。

しかし、確かに他の戦略があるので、創造的になりましょう。すぐに思いつくのは次の 2 点です。

  • あなたがある種のUNIXのようなシステムの下にいる場合のPAMの創造的な使用:ある種のダミー認証要件を設定し、処理のためにPAMをセットアップします。PAM 構成内では、好きなことを行うことができます。利点: リクエストを受け取り、何をカウントし、何をカウントしないかを自分でフィルタリングできます。ただし、最初のリクエストだけでなく、クライアントによって行われた各リクエストに対して実際にティックを取得できるように、PAM レスポンスが有効なセッションを作成しないようにする必要があります。

  • リクエスト処理を可能にする他のApacheモジュールがあります。フォレンジック モジュールまたは外部フィルター モジュールを見てください。どちらも、外部ロジックをリクエスト処理にフックできます。そのためには、cli ベースの php を構成する必要があります。

于 2012-10-22T16:02:36.997 に答える
0

Apache ログ ファイルを解析できます。

于 2012-10-22T14:58:04.190 に答える