Предыстория такова. Есть на некоем ресурсе флеш-виджет которые выполняет какие-то операции с пользовательским контентом. В моем конкретном случае, это фотографии. Задача стояла следующим образом. Необходимо собирать статистику показов с внешних ресурсов, т.е. сколько раз и где флешка засветилась на экранах пользователей. задача так же усложнялась и тем, что по сути показы должны были учитываться не самой флешки, а меняющихся в ней фотографий. Если же вам так же понадобится учитывать показ контента внутри флеш, то, увы, прийдется обратиться к флешеру, сваявшего этот виджет. Зачем я объясню позже.
Итак приступим. Все мы прекрасно знаем, что флешка передать реферера не может, вернее может, но этот реферер будет физическим адресом размещения самой флешки. Что не есть хорошо и нам абсолютно не надо. Так как же передать реферера? Очень просто, достаточно обвернуть выдачу флешки в php-скрипт. В котором мы будем выхватывать реферера учитывать показ. Если же у вас задача, так же как и у меня, "со звездочкой", то делаем нехитрый трюк с редиректом и добавлением параметра в запрос, таким вот образом. Получив реферер, в PHP скрипте, мы генерируем новый запрос к флешке и делаем по нему редирект. Флешка в своб очередь, получив этот параметр, добавляет его к каждому запросу (в моем случае фотографии) к нашему серверу, где этот запрос, обрабатывается скриптом, который учитывает всю необходимую нам информацию, включая реферера. Теперь чтоб совсем все стало ясно, приведу небольшой пример утопического кода (без проверок и пр. только логика, так что, пожалуйста не возмущайтесь понапрасну):
// Файл flashcatch.php $file = './flash.swf'; $referer = $_SERVER['HTTP_REFERER']; // Если не надо делать никаких более действий, то прямо здесь счетаем показ // ... // Устанавливаем тип содержимого header('Content-Type: application/x-shockwave-flash'); // Читаем и отдаем флешку. echo file_get_content($file); exit();
Если понадобиться добавить параметр для последующего учета показов контента внутри самой флешки то код немного усложниться.
// Файл flashcatch-trick.php $file = './flash.swf'; $referer = $_SERVER['HTTP_REFERER']; // Добавляем параметр к запросу на флешку например referer. if (strpos($_SERVER['REQUEST_URI'], '?')) { $connector = '&'; } else { $connector = '?'; } $newRequest = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . $connector . 'referer=' . $referer; // Если запрос является внешним и запрос не содержит в себе параметра referer то делаем редирект if (isExternalRequest() && !$_REQUEST['referer']) { header ('Location: ' . $newRequest); exit(); } // Устанавливаем тип содержимого header('Content-Type: application/x-shockwave-flash'); // Читаем и отдаем флешку. echo file_get_content($file); exit();
И вот тут вспоминаем про флешера, во флешку передаем новый параметр в котором прописан реферер, в моем случае это параметр referer :). А флешер формируя запросы к к серверу для получения фотографий (аудио, видео), подставляет его и сервер при выдаче содержимого флешке учитывает реферера и показ, соответсвенно.
Функция isExternalRequest не приведена, ее не составит труда написать самому. Суть ее думаю ясна, вернет труЪ если это внешний запрос и фальс если свой же сервер запросил флешку.
Комментариев нет:
Отправить комментарий