Проблема с file_get_contents

Тема в разделе "PHP", создана пользователем Хомячок, 22 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Хомячок

    Хомячок

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

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

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

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    грузи курлом и передавай в качестве реферера адрес твоего сайта

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

    ЗЫ советую ставить реферером случайную страницу твоего сайта, а не одну и ту же -- пропалят быстро
    PHP:
    // инициализирует курл
    // возвращает сессию курла
    function curl_ini(){
        
        global 
    $use_proxy;
        global 
    $proxy;
        
        
    $ch curl_init();
        
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
        
    curl_setopt($chCURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt');
        
    curl_setopt ($chCURLOPT_USERAGENT"Opera/9.52 (Windows NT 5.1; U; en)");
        
    curl_setopt($ch,CURLOPT_VERBOSE,1);
        if (
    $use_proxy)
        {
            
    curl_setopt($chCURLOPT_PROXY,$proxy);
            
    curl_setopt($chCURLOPT_COOKIEJAR,realpath(".").'/tmp/'.$proxy.'_cookies.txt');
            
    curl_setopt($chCURLOPT_COOKIEFILE,realpath(".").'/tmp/'.$proxy.'_cookies.txt');
        
        
        }
        return 
    $ch;} 
    // загрузка  с помощью курла
    function get_file_by_curl($url,$reffer=""){
        
    $ch=curl_ini();
        
    curl_setopt($chCURLOPT_URL,$url);
        
    curl_setopt($chCURLOPT_REFERER,$reffer);
        
    $result=curl_exec ($ch);
        return 
    $result;}
    попробуй грузить как
    PHP:
    get_file_by_curl("УРЛ Баннера","УРЛ твоей страницы");
     
    Хомячок нравится это.
  3. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Теперь возникла проблема - при запуске выдает пустую страницу. Проверял на разных хостингах с разными загружаемыми страницами, пробовал даже запустить упрощенный пример __http://www.php.su/functions/?curl_exec, но все равно выдает пустую страницу. Это значит что хостинги не поддерживают curl?
     
    krast90 нравится это.
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    посмотри вывод phpinfo() и выясни есть ли у тебя курл

    и включи вывод ошибок, хотя бы на время теста error_reporting(~E_ALL) в начале скрипта
     
  5. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Нашел хостинг, где есть 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($chCURLOPT_REFERER$reffer);
        
    curl_setopt($chCURLOPT_URL$link);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);

        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0); 
        
    curl_setopt($chCURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt'); 
        
    curl_setopt($chCURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt'); 
        
    curl_setopt ($chCURLOPT_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 и кликнуть на загруженный баннер, то клик засчитывают. Если запустить этот скрипт, то клик не считают.

    Пример можно глянуть
    http://softhot.ru/soft/38068-loaris-trojan-remover-v1.2.0.4-crack.html
    Там маленькая ссылка с названием "link" ниже картинки программы. (кликнуть ее чтоб передать реферер)
     
    krast90 нравится это.
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    в твоем коде с реферром хз что творится только не передача его с запросом при загрузке баннера

    ты мой код посмотрел?
    PHP:


     curl_setopt
    ($chCURLOPT_REFERER,"тут ТВОЯ страница");
    а ты передаешь реферер через GET ( оно может так и надо, но не этим передается реферер)


    Далее - давай конкретно
    напиши под hide адрес страницы и баннера что бы было ясно о чем ты, а то ты очень долго будешь искать в чем дело
     
  7. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    error_reporting(~E_ALL) это подавление всех ошибок, а не вывод.

    error_reporting(E_ALL) - вот вывод.
     
    ZCFD нравится это.
  8. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Проблема может быть если open_basedir включена. Если да то
    PHP:
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    попросту выдаст ошибку...
     
  9. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Все, запахало вроде! Спасибо всем за помощь! Там вместо Location нужно было использовать еще раз curl_exec. Теперь возникла другая проблема, как определить какой реферер куда передавать, т.к. там две ссылки, одна на баннер, вторая перенаправляет на рекламу. Причем если в первой (она в iframe) реферер скорей всего мой сайт, то во второй он может тереться и заменяться на сайт который перенаправляет. Во всяком случае клики с сайта который перенаправляет у меня засчитываются, но может это просто не проверяется автоматически (только вручную модером). Вот структура баннера на сайте:

    http://s40.radikal.ru/i089/1009/fc/7fc4dc093b4d.jpgТакже походу придется генерировать браузер пользователя или еще какие параметры (ниже список), т.к. там идет их проверка. Вот нашел на сайте описание возможностей для реламодателей:

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

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

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    города, страны и ip - тут либо прокси, либо устанавливай в курсе X-Forwarder-For с рандомным ip (просто сгенери и проверь по статистике будут ли считать, часто прокатывает )

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

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

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