2012-10-26 108 views
29

我正在嘗試構建一個像素,用於跟蹤用戶訪問時的當前URL。我可以使用JS(首選)或1x1圖像像素。對於JS,我假設我需要運行一個AJAX請求到一個PHP腳本來捕獲我需要的信息,並且對於一個圖像像素,我在獲取當前URL時遇到問題。開發跟蹤像素

我也考慮過使用JS編碼當前URL的URL編碼,並將編碼的當前URL作爲查詢字符串動態放置在PHP腳本中,但我可能會變得很長。

如果我要去的AJAX路線,我可以使用哪個AJAX庫? JQuery爲此太臃腫。

還有其他想法嗎?

+2

您完全不需要ajax,因爲在PHP中生成的像素圖像只會包含在您的HTML中並作爲圖像請求。 – nickhar

+2

只需使用服務器日誌或谷歌分析。 – 2012-10-26 01:41:25

+0

@Dagon這是一個自定義的應用程序,我需要捕獲幾塊信息。 –

回答

47

您可以編寫創建和使用PHP使用跟蹤的目的GD library(這是在現代版本的PHP往往分佈)返回.gif.jpeg.png映像的腳本。如果您無法訪問GD,則始終可以使用GD重新編譯PHP。

實施例:

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?s=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')"; 

這是跟蹤電子郵件營銷活動,特別是在PHP中廣泛使用的(所)基本方法,但使用其他腳本/編程語言和庫同樣的方法適用 - 和其他目的。

而且和GD有用信息:

+0

但我如何訪問像素使用這種類型的實現觸發的URL?只有我能想到的方法是將document.URL作爲查詢字符串參數添加到像素,但我擔心它會使像素URL過長。沒有? –

+2

這是昂貴的?你必須始終生成圖像 – Baba

+0

我看不到通過JS調用它會導致你很多問題,除非你的URL字符串是荒謬的長度!?你可以毫無問題地調用'$ _GET',但這是一個主觀問題。這取決於你在做什麼。 @Baba雖然你必須隨時產生圖像,但我從來沒有看到它包含在電子郵件中的每天約1百萬(約100萬)個請求的任何問題!這實際上是電子郵件跟蹤系統的工作原理。 – nickhar

42

這裏是另一個PHP實施跟蹤像素,從Open Web Analytics項目,它試圖基本上是Google Analytics的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 
+4

+1沒有GD的偉大(和複雜的)替代品。 – nickhar

+0

這對我不起作用......輸出破碎的形象:( – nights

+4

回聲BASE64_DECODE(「R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEA」)也適用sprintf的替代,有點短。 – MSpreij

8

輸出x 1像素的這種方式:

header('Content-type: image/png'); 
echo gzinflate(base64_decode('6wzwc+flkuJiYGDg9fRwCQLSjCDMwQQkJ5QH3wNSbCVBfsEMYJC3jH0ikOLxdHEMqZiTnJCQAOSxMDB+E7cIBcl7uvq5rHNKaAIA')); 
+0

任何人能證實它的工作原理? –

+1

@JimThio這個對我有用 –

0

下面是用PHP編寫的一個非常簡單的跟蹤像素。

How a Tracking Pixel Works

跟蹤像素像最原始的信標可能的,並且它通過利用網頁的事實操作:圖像是從頁面的單獨請求。

如果您已經能夠在其他人的頁面上運行您的JS代碼,您應該將數據發回給您的服務器。不需要顯示只能獲得相同類型數據的微小像素。