Как транслировать изображение из PHP для отслеживания

Благодаря партнерскому маркетингу и PHP я знаю, как сделать такой пиксель отслеживания:

<img alt="" src="http://example.com/pixel.php?tracking=43233" />

Затем в pixel.php я делаю что-то вроде:

<?php

$sTrack = @ $_GET['tracking'];
$sTrack = urldecode($sTrack);
$sTrack = strip_tags($sTrack);
$sTrack = trim($sTrack);
// do something with sTrack here
header('Content-type: image/gif');
readfile('images/invisible.gif');

Проблема в том, что на этой странице предложения я получаю cname и cemail в качестве параметров запроса в URL-адресе, и клиент размещает что-то, что не поддерживает PHP, но позволяет мне вставлять Javascript, и я НЕ МОГУ < / em> в этом случае используйте jQuery. Вместо этого мне нужно сделать это на 100% чистом Javascript. Итак, я не могу прочитать $ _GET, чтобы получить cname и cemail.

Я знаю, что location.search предоставит мне эти параметры. Мне просто нужно, как изменить тег IMG, чтобы, как в событии загрузки, я мог передать location.search в конце. И мне нужно, чтобы он работал во всех браузерах, начиная с IE7 и выше, а также в Opera, Safari и Chrome.


person Volomike    schedule 02.02.2012    source источник
comment
Это 100% на стороне сервера. Ничего общего с JavaScript или jQuery. Вам необходимо передать двоичный файл после отправки заголовков MIME.   -  person Diodeus - James MacFarlane    schedule 03.02.2012
comment
См .: stackoverflow.com/questions/6028452/ load-a-php-image-using-src   -  person Diodeus - James MacFarlane    schedule 03.02.2012
comment
@Diodeus, а почему бы просто не прочитать location.search в Javascript и передать его на удаленную страницу PHP? Смотрите, пользователь caleb ниже понимает, о чем я говорю.   -  person Volomike    schedule 03.02.2012


Ответы (2)


Вы можете просто использовать http://example.com/pixel.php в качестве img src, а затем проверьте ссылку в этом скрипте PHP.

person doc_id    schedule 03.02.2012

Используйте Javascript для установки источника изображения.

<body onload="document.getElementById('tracking_pixel').src='http://example.com/pixel.php'+location.search;">
    <img id="tracking_pixel" src="" />
</body>

Редактировать:

Да, вы можете сделать его короче, поместив его в файл img onload. Вы даже можете опустить идентификатор и ключевое слово this. Однако у вас не может быть начального src быть пустым, на самом деле это должно быть действительное изображение, чтобы он запускал событие onload. Проблема в том, что вы несете стоимость запроса по сети.

Вот кратчайшее, что я смог найти, вместо повторения URL-адреса я использовал +=, но это означало, что обработчик загрузки должен быть очищен.

<body>
    <img src="http://example.com/pixel.php" onload="onload=''; src+=location.search;" />
</body>

В качестве альтернативы вы можете использовать URI данных. К сожалению, URI данных всего для 1 пикселя довольно длинный.

<body>
    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR42mNgAAIAAAUAAen63NgAAAAASUVORK5CYII=" onload="src='http://example.com/pixel.php'+location.search;" />
</body>
person caleb    schedule 02.02.2012
comment
Вопрос. Есть ли способ сократить это, например, используя событие onload внутри тега IMG, а затем используя переменную this в Javascript? А затем заставить его работать кроссплатформенным с этой сокращенной версией? - person Volomike; 03.02.2012
comment
Кстати, у моего коллеги-программиста из Египта было отличное предложение. Не проходите location.search. Вместо этого используйте $ _SERVER ['HTTP_REFERER'], чтобы получить это в pixel.php. Это полностью избавляет от необходимости использовать Javascript и позволяет вам использовать эту технику в таких вещах, как электронные письма и форумы. - person Volomike; 03.02.2012
comment
Да, вы можете это сделать, но иногда вам нужно отслеживать больше, чем просто число. Например, время загрузки. - person caleb; 03.02.2012
comment
Хорошая точка зрения. Итак, при необходимости используйте Javascript. В противном случае используйте HTTP_REFERER с удаленной страницы. - person Volomike; 03.02.2012
comment
Кстати, я только что заметил ваше альтернативное решение. Это фантастика - это немного сокращает время. Итак, я могу выбрать любой вариант: $ _SERVER ['HTTP_REFERER'] в pixel.php или в методе Javascript, в зависимости от необходимости. - person Volomike; 03.02.2012
comment
Кстати, вы можете использовать это для более короткого src. data: image / gif; base64, R0lGODlhAQABAJEAAAAAAP /////// wAAACH5BAEAAAIALAAAAAABAAEAA‌ AICVAEAOw == Всем, кто читает это, обратите внимание, что IE6 и более ранние версии не поддерживают этот тип URL-адресов изображений, но это нормально, потому что это только для за секунду до включения нагрузки. Полностью белый еще короче: stackoverflow.com/a/2933356/105539 - person Volomike; 03.02.2012
comment
Еще более короткий URL-адрес невидимого GIF размером 1x1: data: image / gif; base64, R0lGODlhAQABAIAAAP /////// yH5BAEKAAEALAAAAABAAEAAAICTAEAOw == - person Volomike; 03.02.2012