45

ユーザーがアクセスしたときに現在のURLを追跡するピクセルを作成しようとしています。JS(推奨)または1x1画像ピクセルのいずれかを使用できます。JSでは、必要な情報をキャプチャするためにPHPスクリプトに対してAJAXリクエストを実行する必要があると想定しています。また、画像ピクセルでは、現在のURLの取得に問題があります。

また、JSで現在のURLをエンコードし、エンコードされた現在のURLで画像ピクセルをPHPスクリプトへのクエリ文字列として動的に配置することも考えましたが、非常に長くなる可能性があります。

AJAXルートを使用する場合、どのAJAXライブラリを使用できますか?JQueryは、この目的には肥大化しています。

他のアイデアはありますか?

4

6 に答える 6

72

GDライブラリ(最新バージョンではPHPとともに配布されることが多い)を使用して、追跡目的でPHPを使用して.gif.jpegまたはイメージを作成して返すスクリプトを作成できます。GDにアクセスできない場合は、GDを有効にしてPHPをいつでも再コンパイルできます。.png

例:

pixel.php(説明のためにコメント):

<?php

  // Create an image, 1x1 pixel in size
  $im=imagecreate(1,1);

  // Set the background colour
  $white=imagecolorallocate($im,255,255,255);

  // Allocate the background colour
  imagesetpixel($im,1,1,$white);

  // Set the image type
  header("content-type:image/jpg");

  // Create a JPEG file from the image
  imagejpeg($im);

  // Free memory associated with the image
  imagedestroy($im);

?>

簡単な例では、電子メールまたは他のページで次のURLの例を使用して、このトラッキングピクセルを呼び出すことができます。

<img src="http://example.com/pixel.php?a=value1&b=value2&c=value3">



変数の使用:

次に、画像タグ内で渡された変数をpixel.php簡単に解析して解釈できます。$_GET

if (isset($_GET['a'])) {
  // (Do|log) act on a
}
if (isset($_GET['b'])) {
  // (Do|log) act on b
}
if (isset($_GET['c'])) {
  // (Do|log) act on c
}

必要に応じて適用して繰り返しますが、特に文字列に変数を設定できるため、ユーザーに関する非常に多くの情報にアクセスできるため、何をするかについて非常に洗練されている可能性があり$_GETます。

より適切な例は次のとおりです。

<img src="http://example.com/pixel.php?userid=98798&campaign=302&last=8">



$ _GET変数以上のものを追跡する:

PHPを使用して、次のようなより多くの情報を取得することもできます。

// Server variables
$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
$useragent = $_SERVER['HTTP_USER_AGENT'];
$browser = get_browser(null, true);
etc...

次に、データベースの追跡テーブルに挿入します。

$sql = "INSERT INTO campaign_tracking 
        ('when','campaign','last','ip','useragent') 
        VALUES 
        (NOW(),'$campaign','$last','$ip','$useragent')";

これは、Eメールマーケティングキャンペーンの追跡、特にPHPで広く使用されている基本的な方法ですが、他のスクリプト/プログラミング言語やライブラリを使用した場合や他の目的にも同じ方法が適用できます。

GDに関するさらに有用な情報:

于 2012-10-26T02:05:23.443 に答える
57

これは、 Open Web Analyticsプロジェクトからのトラッキングピクセルの別のPHP実装です。これは、基本的にGoogleAnalyticsのPHPクローンになろうとします。

キャッシュなしのヘッダー(正確な追跡に重要)を備えた1x1の透明なGIF画像(PHP画像ライブラリを使用せずに!)を返し、出力をフラッシュして、HTTP応答(パフォーマンス)をブロックせずに分析の処理を続行できるようにします。かなり高度な実装のようで、試してみる価値があります。

<?php
ignore_user_abort(true);

// turn off gzip compression
if ( function_exists( 'apache_setenv' ) ) {
  apache_setenv( 'no-gzip', 1 );
}

ini_set('zlib.output_compression', 0);

// turn on output buffering if necessary
if (ob_get_level() == 0) {
  ob_start();
}

// removing any content encoding like gzip etc.
header('Content-encoding: none', true);

//check to ses if request is a POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // the GIF should not be POSTed to, so do nothing...
  echo ' ';
} else {
  // return 1x1 pixel transparent gif
  header("Content-type: image/gif");
  // needed to avoid cache time on browser side
  header("Content-Length: 42");
  header("Cache-Control: private, no-cache, no-cache=Set-Cookie, proxy-revalidate");
  header("Expires: Wed, 11 Jan 2000 12:59:00 GMT");
  header("Last-Modified: Wed, 11 Jan 2006 12:59:00 GMT");
  header("Pragma: no-cache");

  echo sprintf('%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%',71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59);    
}

// flush all output buffers. No reason to make the user wait for OWA.
ob_flush();
flush();
ob_end_flush();

// DO ANALYTICS TRACKING HERE
于 2013-09-17T14:11:30.867 に答える
13

この方法で1pxx1pxを出力します。

header('Content-type: image/png');
echo gzinflate(base64_decode('6wzwc+flkuJiYGDg9fRwCQLSjCDMwQQkJ5QH3wNSbCVBfsEMYJC3jH0ikOLxdHEMqZiTnJCQAOSxMDB+E7cIBcl7uvq5rHNKaAIA'));
于 2014-08-25T11:13:02.133 に答える
3

これは、PHPで記述された非常に単純化されたトラッキングピクセルです。

トラッキングピクセルのしくみ

トラッキングピクセルは、可能な限り最も原始的なビーコンのようなものであり、Webページの事実を利用して動作します。画像はページとは別のリクエストです。

すでに他の人のページでJSコードを実行できる場合は、データをサーバーにPOSTして戻す必要があります。同じ種類のデータのみを取得する小さなピクセルを表示する必要はありません。

于 2018-02-26T12:21:13.067 に答える
0

電子メールが表示または開かれたときのマークを実行する関数の呼び出しがピクセルのaltに導入されたため、この効果と同様の問題がありますが、アクションは正しくスローされません。

<img src="https://datafeeds.baruwa.com/1x1spacer.gif" width="1" height="1" alt="Web Bug from https://devorpenguin.des1.net/module/cartabandonmentpro/FrontCartAbandonment?token_cart=87c83b8f77318a54fdd6be91aacc3574&amp;id_cart=1002&amp;action=visualize&amp;wichRemind=1">

public static function visualize()
{

    $wichRemind = Tools::getValue('wichRemind');
    $id_cart = Tools::getValue('id_cart');
    $token = Tools::getValue('token_cart');

    if ($token == md5(_COOKIE_KEY_.'recover_cart_'.$id_cart)) {
        $query = "UPDATE "._DB_PREFIX_."cartabandonment_remind SET visualize = 1 WHERE wich_remind = ".(int)$wichRemind." AND id_cart = ".(int)$id_cart;
        Db::getInstance()->Execute($query);
    }

    header('Content-Type: image/png');
    echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=');

}
于 2018-06-25T10:21:42.220 に答える
0

プロジェクトの範囲で必要な場合は、OpenPixelを使用することで手間のかかる作業のほとんどを処理できます。

于 2020-12-06T19:52:20.067 に答える