WordPressサイトからのファイルのアップロードを追跡する方法



サイトからのファイルのダウンロードを追跡するタスクがありました(画像、ドキュメント、ビデオ、配布など)。 通常の統計サービスでは、ファイルのURLを変更せずにこれを実行できません。 そして、統計は通常の場所(たとえば、GoogleアナリティクスやFireBase)に表示されるはずです。

いくつかのプラグイン(ほとんどの場合、名前に「ダウンロード」と「マネージャー」という言葉があります)を調べた後、それらはすべて、監視用にファイルのリストを手動でコンパイルするという原則によって編成されていることがわかりました。 そしてそれらの多くでは、不正なダウンロードに対する保護が実装されていますが、これはこのタスクでは冗長です。 それらを使用することもできますが、多くのファイルがある場合は、最終的には:


その結果、ディレクトリ(サイトの相対パス)を示し、そのコンテンツのダウンロードを監視するだけのWordPress用プラグインの形式で独自の実装を行いました。

無料のプラグインへのリンクは、上記の十分な情報を持っている人向けです。 以下は、統計の例と技術的な実装の詳細です。

統計の行き先


これまでのところ、統計の集約の最も基本的な2つの場所がサポートされています。

Googleアナリティクス


統計は、メッセージ(イベント)の形式で公開され、カテゴリ(イベントカテゴリ)の指定、アクション(イベントアクション)でファイルが示される前のURI、メッセージラベル(イベントラベル)で、対応する設定が設定されている場合はクエリパラメーターが示されます。 その結果、Googleアナリティクスコンソールのディレクトリにある各ファイルのダウンロードダイナミクスを便利に観察できます。


WordPressデータベーステーブル


主にデバッグ用。 ここでは、ダウンロード数が単純にカウントされ、一時的なダイナミクスは表示されません。 テーブルのフィールド:IP、ファイルURI、クエリパラメーター(ある場合)、およびカウンター。 SQLエディター(例:phpMyAdmin)でデータを表示できます。

各レコードには、必要に応じて個別に削除されるIDが割り当てられます。


ファイルアクセスの傍受


ファイルのダウンロードはApache Webサーバー自体によって処理されるため、PHPスクリプトへのリダイレクトを使用して.htaccessでハンドラーが作成されました。

次のようになります。

<FilesMatch "\.(.*)$">
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.( htaccess|php|js|css )$
RewriteCond %{REQUEST_URI} ^/ mypath /(.*)
RewriteRule ^(.*) /index\.php\?seraph_dlstat_api=Get&uri=%{REQUEST_URI} [L,QSA]
</IfModule>
</FilesMatch>


タイプがhtaccess、php、js、cssのシステムファイルに対して特別に作成された例外。

応答時間を最小限に抑えるため、index.phpのseraph_dlstat_apiパラメーターを使用してスクリプト呼び出しを実装します。このパラメーターは、処理に必要なすべてのWordPressスクリプトを読み込んだ直後にチェックされます。 これは、作業環境全体(wp-load.phpの実行)を読み込んだ後の最初のコールバックであるdo_parse_requestアクションフックで行われます。

さらに、スクリプトは\を処理し、URIを登録し、readfileシステム関数を介してファイルの内容を返します。 また、HTTP_RANGEを介した部分的なファイルの読み込みがサポートされており、ファイルは既にブロック単位で読み込まれています。

遅延データ送信


応答時間を最大化するために、非同期統計がサポートされています。 ファイルにアクセスすると、データベースにレコードが作成され、ファイルはすぐにクライアントに返されます。 そして、すでにWordPressシェダー( WP Cron )がトリガーされると、データはテーブルからパケットで取得され、統計が送信されます。

Googleアナリティクスの場合、これは許容範囲です 遅延時間を指定することにより、非同期メッセージ受信をサポートします。

デフォルトでは、 WP Cronはページがロードされるたびに起動します。 システムシェダラーからWP Cronを構成して、応答時間をさらに最適化できます。

おわりに


その結果、クライアントにとって、ファイルのダウンロードはWebサーバーによる標準処理と見分けがつかなくなり、これを追跡できるようになりました。

フィードバックに感謝します。

Source: https://habr.com/ru/post/J352270/


All Articles