Проблема с file_get_contents

Статус
В этой теме нельзя размещать новые ответы.

Хомячок

Хранитель порядка
Регистрация
10 Апр 2008
Сообщения
184
Реакции
576
Проблема следущая: нужно загрузить баннер по сгененрированной ссылке, а затем кликнуть по нему.

Как делаю я: с помощью file_get_contents загружаю исходный код баннера, выделяю сгенерированную ссылку на рекламу и делаю редирект по ней. Но клик не защитывается! Проблема походу в том, что при использовании file_get_contents на баннере это не воспринимается как его показ, даже если вывести полученную текстовую строку, а потом вручную кликнуть по баннеру. Работает только если в iframe подгрузить баннер и вручную кликнуть по нему.

Как можно сделать, чтобы защитывался показ баннера. Может какая-то реализация с curl, подскажите пожалуйста.
 
грузи курлом и передавай в качестве реферера адрес твоего сайта

Не защитывается именно из-за отсутствия реферера

ЗЫ советую ставить реферером случайную страницу твоего сайта, а не одну и ту же -- пропалят быстро
PHP:
// инициализирует курл
// возвращает сессию курла
function curl_ini(){
	
	global $use_proxy;
	global $proxy;
	
	$ch = curl_init();
	
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt');
	curl_setopt($ch, CURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt');
	curl_setopt ($ch, CURLOPT_USERAGENT, "Opera/9.52 (Windows NT 5.1; U; en)");
	curl_setopt($ch,CURLOPT_VERBOSE,1);
	if ($use_proxy)
	{
		curl_setopt($ch, CURLOPT_PROXY,$proxy);
		curl_setopt($ch, CURLOPT_COOKIEJAR,realpath(".").'/tmp/'.$proxy.'_cookies.txt');
		curl_setopt($ch, CURLOPT_COOKIEFILE,realpath(".").'/tmp/'.$proxy.'_cookies.txt');
	
	
	}
	return $ch;} 
// загрузка  с помощью курла
function get_file_by_curl($url,$reffer=""){
	$ch=curl_ini();
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_REFERER,$reffer);
	$result=curl_exec ($ch);
	return $result;}

попробуй грузить как
PHP:
get_file_by_curl("УРЛ Баннера","УРЛ твоей страницы");
 
Теперь возникла проблема - при запуске выдает пустую страницу. Проверял на разных хостингах с разными загружаемыми страницами, пробовал даже запустить упрощенный пример __http://www.php.su/functions/?curl_exec, но все равно выдает пустую страницу. Это значит что хостинги не поддерживают curl?
 
посмотри вывод phpinfo() и выясни есть ли у тебя курл

и включи вывод ошибок, хотя бы на время теста error_reporting(~E_ALL) в начале скрипта
 
посмотри вывод phpinfo() и выясни есть ли у тебя курл
и включи вывод ошибок, хотя бы на время теста error_reporting(~E_ALL) в начале скрипта
Нашел хостинг, где есть curl. Ошибок не выводит никаких, даже с error_reporting(~E_ALL). Но заработал простой пример, сейчас расширяю его до сложного, чтобы найти строчку из-за которой все не работает.

---------- Post added at 19:08 ---------- Previous post was at 17:42 ----------

C curl заработало вроде, но клики опять же не считаются. Вот получившийся код:

PHP:
<?php

function escape($str)   
{   
	$str =  rawurlencode($str);   
	$str = str_replace(array('%40', '%2A', '%2B', '%2F'), array('@', '*', '+', '/'), $str);   
  
return $str;   
}

//проверка, есть ли реферал
if ($_SERVER['HTTP_REFERER'])
{

	$ref = escape($_SERVER['HTTP_REFERER']);
	$reffer = $_SERVER['HTTP_REFERER'];

	//ссылка на флеш баннер, сгененрированная с рефералом
	$link = "http://site.ru/adv.php?sid=111&ref=".$ref;

// инициализация сеанса
$ch = curl_init();

// установка URL и других необходимых параметров
    curl_setopt($ch, CURLOPT_REFERER, $reffer);
	curl_setopt($ch, CURLOPT_URL, $link);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt'); 
    curl_setopt ($ch, CURLOPT_USERAGENT, "Opera/9.52 (Windows NT 5.1; U; en)"); 
    curl_setopt($ch,CURLOPT_VERBOSE,1);
	
	//получение ссылки, пока она не получится!
	$temp = false;
	while ( $temp == false )
	{
	// загрузка страницы и выдача её браузеру
	$banner = curl_exec($ch);

	//выделение искомой ссылки из баннера
		$temp = preg_match("'flashvars=\"targetURL=(.*?)\"'si",$banner,$matches);
		if (!$temp) $temp = preg_match("'<a href=\"(.*?)\"'si",$banner,$matches);
		$link_banner = $matches[1];
	}

	//декодирование ссылки
	$link_banner = urldecode($link_banner);
	$link_banner = rawurldecode($link_banner);

	header ("Location:$link_banner");
}
else echo "Привет! Хакинг аттемпт!";

?>

Если просто загрузить страничку $link с какимнибудь параметром $ref и кликнуть на загруженный баннер, то клик засчитывают. Если запустить этот скрипт, то клик не считают.

Пример можно глянуть

Там маленькая ссылка с названием "link" ниже картинки программы. (кликнуть ее чтоб передать реферер)
 
в твоем коде с реферром хз что творится только не передача его с запросом при загрузке баннера

ты мой код посмотрел?
PHP:
 curl_setopt($ch, CURLOPT_REFERER,"тут ТВОЯ страница");

а ты передаешь реферер через GET ( оно может так и надо, но не этим передается реферер)


Далее - давай конкретно
напиши под hide адрес страницы и баннера что бы было ясно о чем ты, а то ты очень долго будешь искать в чем дело
 
посмотри вывод phpinfo() и выясни есть ли у тебя курл
и включи вывод ошибок, хотя бы на время теста error_reporting(~E_ALL) в начале скрипта

error_reporting(~E_ALL) это подавление всех ошибок, а не вывод.

error_reporting(E_ALL) - вот вывод.
 
  • Нравится
Реакции: ZCFD
Проблема может быть если open_basedir включена. Если да то
PHP:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
попросту выдаст ошибку...
 
Все, запахало вроде! Спасибо всем за помощь! Там вместо Location нужно было использовать еще раз curl_exec. Теперь возникла другая проблема, как определить какой реферер куда передавать, т.к. там две ссылки, одна на баннер, вторая перенаправляет на рекламу. Причем если в первой (она в iframe) реферер скорей всего мой сайт, то во второй он может тереться и заменяться на сайт который перенаправляет. Во всяком случае клики с сайта который перенаправляет у меня засчитываются, но может это просто не проверяется автоматически (только вручную модером). Вот структура баннера на сайте:

Также походу придется генерировать браузер пользователя или еще какие параметры (ниже список), т.к. там идет их проверка. Вот нашел на сайте описание возможностей для реламодателей:

Для Вас доступна фильтрация трафика:
по ip (уникальность);
по странам и городам;
по браузеру и типу соединения;
по дням недели / часам;
фильтрация ботов и frame-трафика;

Клики сейчас считаются, но я думаю когда их будет больше, сайт будет привлекать больше внимания и нужно сделать все менее заметно. Предлагайте как можно генерировать эти параметры (просто хочу учесть как можно больше). Особо интересен параметр время пребывания на сайте, который обычно фиксируют счетчики.
 
города, страны и ip - тут либо прокси, либо устанавливай в курсе X-Forwarder-For с рандомным ip (просто сгенери и проверь по статистике будут ли считать, часто прокатывает )

браузеры - возьми список user-agen'ов на форуме или в гугле и подставляй рандомно

дни и часы - ну это время запуска твоего скрипта

заморочки могут быть только с ip и если переборщишь с накруткой -- начнут проверять вручную
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху