3

リンクのクリックを追跡するためのPHPリダイレクトページがあります。基本的にそれはします:

 - get url from $_GET
 - connect to database
 - create row for url, or update with 1 hit if it exists
 - redirect browser to url using Location: header

最初にリダイレクトをクライアントに送信して、クライアントがその仕事に取り掛かってから、クリックをログに記録できるかどうか疑問に思いました。単に物事を切り替えるだけでうまくいくでしょうか?

4

3 に答える 3

4

あなたはこれを行うことができます:

  1. からURLを取得$_GET
  2. Location:ヘッダーを送信
  3. 電話flush()
  4. データベースに接続
  5. URL の行を作成するか、存在する場合は 1 ヒットで更新します

接続はまだ開いたままになっており、ブラウザがそれに対して何をするかはブラウザ次第であるため、これにより必ずしもブラウザがすぐに動作するわけではありませんが、(flush()動作しない原因となる条件を除いて) 少なくともLocation:ヘッダーをブラウザに送信して、必要に応じてリダイレクトできるようにします。

それでも不十分な場合は、データを分単位または秒単位のファイルにダンプし、スクリプトがデータベースへの後処理のために取得することをお勧めします。それでも十分でない場合は、 ; で遊ぶことができますpcntl_fork()。これは、Apache SAPI の下で行うには非常に難しい作業です。

于 2009-04-01T19:05:26.150 に答える
1

ほとんどのデータベースでは、クエリを遅延して挿入する機能が提供されているため、データベースがアイドル状態のときにのみ処理されます。データが重要でない限り (mysqld が停止したり、RAM がフラッシュされたりすると、クエリが失われます)、おそらくそれが最善の方法です。 http://dev.mysql.com/doc/refman/5.1/en/insert-delayed.html

于 2009-04-01T18:55:05.130 に答える
0

それは結構です。PHPは、リダイレクトヘッダーをクライアントにフラッシュする前に実行を終了します。それでも疑問がある場合は、これをファイルに保存してブラウザからロードしてみてください。

<?php
header('location: /');
sleep(2);
?>

リダイレクトは2秒間発生しないはずです。

于 2009-04-01T20:30:46.070 に答える