Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Различия windows и freebsd
 
 автор: Icen   (08.07.2008 в 05:35)   письмо автору
 
 

Здравствуйте, господа программисты.
Я написал новостной граббер. Суть его работы такова, он авторизуется считывает заголовки новостей, затем считывает сами новости, затем все новые новости отправляет на указанный адрес. Но вот в чём собственно проблема, под Denwer-ом нормально новости отправляет, под FreeBSD приходят пустые новости. Вот исходный код:


<?
$EMail 
= "mail@host.ru";
$MaxReload = 100;

//********************************* rosan.su ***********************************
$rLogin = "qwerty";
$rPassword = "12345";
$rHost = "http://www.rosan.su/dealers/";
$rAuthString = "login=$rLogin&password=$rPassword";
$rAuthPage = "http://www.rosan.su/dealers/auth.php";
$rParseString = "#<a href='(.+?)' class=\"linkb\">(.+?)</a>.*?<span class=\"text\">(.+?)</span>#is";
$rLinkIndex = 1;
$rFileName = "rosan.dat";
//******************************************************************************

//******************************* awm-trade.ru *********************************
$aLogin = "qwerty";
$aPassword = "12345";
$aHost = "http://www.awm-trade.ru";
$aAuthString = "login=$aLogin&password=$aPassword&auth=войти";
$aAuthPage = "http://awm-trade.ru/index.php5?module=users&class=auth";
$aParseString = "#<a.*?class=\"newsDealersDate\">(.+?)</a>.*?<a href=\"(.+?)\" class=\"headerDealersNews\">(.+?)</a>#is";
$aLinkIndex = 2;
$aFileName = "awm-trade.dat";
//******************************************************************************

function EmptyMass($Mass)
{
    for(
$i=1;$i<=3;$i++)
        foreach(
$Mass[$i] as $key=> $value)
            if(
$Mass[$i][$key]!="")
                return 
1;
    return 
0;
}

function 
LoadHeadingsNews($AuthPage,$AuthString)
{
    
$SessID = str_replace('\\', '/', dirname(__FILE__)) . 'sessid.txt';
    
$ch = curl_init();
    
curl_setopt($ch, CURLOPT_URL,$AuthPage);
    
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    
curl_setopt($ch, CURLOPT_POST, 1);
    if(
$AuthString)
    {
        
curl_setopt($ch, CURLOPT_POSTFIELDS, $AuthString);
        echo 
"> Загружаю старницу загаловков новостей;<br>";
    }
    else echo 
"> Загружаю старницу новостей;<br>";
    
curl_setopt($ch, CURLOPT_COOKIEFILE, $SessID);
    
curl_setopt($ch, CURLOPT_COOKIEJAR, $SessID);
    
curl_setopt($ch, CURLOPT_NOBODY, 0);
    
curl_setopt($ch, CURLOPT_HEADER, 0);
    
$NewsPage = curl_exec($ch);
    
curl_close($ch);

    return 
$NewsPage;
}

function 
LoadNews($Host,$AuthPage,$AuthString,$ParseString,$LinkIndex,$FileName)
{
    global 
$MaxReload, $Headers, $EMail;
    
preg_match_all($ParseString,LoadHeadingsNews($AuthPage,$AuthString),$OuterMass);
    unset(
$OuterMass[0]);
    echo 
"<b>> Выбираю данные со станицы заголовков новостей в массив;<br></b>";

    if(!
EmptyMass($OuterMass))
    {
        echo 
"<b>> Данные не обнаружены, перезагружаю страницу заголовков новостей;<br><br></b>";
        if(
$MaxReload)
        {
            
sleep(1);
            
$MaxReload--;
            
LoadNews($Host,$AuthPage,$AuthString,$ParseString,$LinkIndex,$FileName);
        }
        return;
    }

    
$FileDisc = fopen($FileName, "r") or die("<b>> Не могу найти файл $FileName;<br></b>");
    if(
filesize($FileName))
    {
        
$OldNews = fread($FileDisc, filesize($FileName));
        echo 
"<b>> Считал данные из временного файла;<br></b>";
    }
    
fclose($FileDisc);

    echo 
"<b>> Ищу последнюю отправленную новость;<br></b>";

    for(
$key=0;$key<count($OuterMass[$LinkIndex]);$key++)
        if(
substr_count($OldNews, $OuterMass[$LinkIndex][$key]))
            break;
    if(
$key)
    {
        echo 
"<b>> Записываю текущую последнюю новость;<br></b>";
        
$FileDisc = fopen($FileName, "w") or die("<b>> Не могу найти файл $FileName;<br></b>");
        
fputs($FileDisc,$OuterMass[$LinkIndex][0]);
        
fclose($FileDisc);

    }
    else
        echo 
"<b>> Новых новостей не найдено;<br></b>";

    
$Headers  = "Content-type: text/html; charset=windows-1251 \r\nFrom: News from $Host \r\nBcc: $email \r\n";

    if(
$key)
    {
        echo 
"<b>> Отправляю письма с новостями;<br></b>";
        while(
$key--)
        {
            
$Mail = LoadHeadingsNews($Host."".$OuterMass[$LinkIndex][$key],0);
            
$Mail = str_replace("a href=\"", "a href=\"$Host", $Mail);
            
$Mail = str_replace("a href='", "a href='$Host", $Mail);
            
mail($EMail,"Новости с $Host",$Mail,$Headers);
        }
    }
     echo 
"<b>> Загрузка новостей с $Host, завершена;</b><br><br>";
}

LoadNews($rHost,$rAuthPage,$rAuthString,$rParseString,$rLinkIndex,$rFileName);
LoadNews($aHost,$aAuthPage,$aAuthString,$aParseString,$aLinkIndex,$aFileName);
?>


Боду очень благодарен за Ваши советы и предложения!

   
 
 автор: Icen   (08.07.2008 в 12:43)   письмо автору
 
   для: Icen   (08.07.2008 в 05:35)
 

Неужели нет ни у кого, никаких догадок по этому поводу :)

   
 
 автор: Loki   (08.07.2008 в 16:25)   письмо автору
 
   для: Icen   (08.07.2008 в 05:35)
 

Я бы начал проверку с прав на файлы и регистра их имен. Затем бы проверил что регулярное выражение в обоих системах выполняется одинаково - такие случаи науке тоже известны:) А вообще диагностика очевидна: искать на каком этапе теряются данные.

   
 
 автор: Icen   (09.07.2008 в 16:18)   письмо автору
 
   для: Loki   (08.07.2008 в 16:25)
 

Проверил, регулярные выражения. Ссылки выбирает правильно. Также поставил самые высокие права на файл с сессией. Всё бесполезно. Проблема вот в этом куске кода:


<?
function LoadHeadingsNews($AuthPage,$AuthString) 
{ 
    
$SessID = str_replace('\\', '/', dirname(__FILE__)) . 'sessid.txt'; 
    
$ch = curl_init(); 
    
curl_setopt($ch, CURLOPT_URL,$AuthPage); 
    
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    
curl_setopt($ch, CURLOPT_TIMEOUT, 3); 
    
curl_setopt($ch, CURLOPT_POST, 1); 
    if(
$AuthString) 
    { 
        
curl_setopt($ch, CURLOPT_POSTFIELDS, $AuthString); 
        echo 
"> Загружаю старницу загаловков новостей;<br>"; 
    } 
    else echo 
"> Загружаю старницу новостей;<br>"; 
    
curl_setopt($ch, CURLOPT_COOKIEFILE, $SessID); 
    
curl_setopt($ch, CURLOPT_COOKIEJAR, $SessID); 
    
curl_setopt($ch, CURLOPT_NOBODY, 0); 
    
curl_setopt($ch, CURLOPT_HEADER, 0); 
    
$NewsPage = curl_exec($ch); 
    
curl_close($ch); 

    return 
$NewsPage; 
}
?>


после вызова функции:
LoadHeadingsNews($Host."".$OuterMass[$LinkIndex][$key],0);

переменная $NewsPage имеет пустое значение.

P.S.: Начинаю потихоньку рвать волосы на голове .... :)

   
 
 автор: Icen   (10.07.2008 в 17:59)   письмо автору
 
   для: Icen   (09.07.2008 в 16:18)
 

Может я что то неправильно сделал с cURL???

   
 
 автор: Icen   (10.07.2008 в 17:59)   письмо автору
 
   для: Icen   (09.07.2008 в 16:18)
 

Может я что то неправильно сделал с cURL???

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования