Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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($chCURLOPT_URL,$AuthPage);
    
curl_setopt($chCURLOPT_FAILONERROR1);
    
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    
curl_setopt($chCURLOPT_TIMEOUT3);
    
curl_setopt($chCURLOPT_POST1);
    if(
$AuthString)
    {
        
curl_setopt($chCURLOPT_POSTFIELDS$AuthString);
        echo 
"> Загружаю старницу загаловков новостей;<br>";
    }
    else echo 
"> Загружаю старницу новостей;<br>";
    
curl_setopt($chCURLOPT_COOKIEFILE$SessID);
    
curl_setopt($chCURLOPT_COOKIEJAR$SessID);
    
curl_setopt($chCURLOPT_NOBODY0);
    
curl_setopt($chCURLOPT_HEADER0);
    
$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($FileDiscfilesize($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($chCURLOPT_URL,$AuthPage); 
    
curl_setopt($chCURLOPT_FAILONERROR1); 
    
curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
    
curl_setopt($chCURLOPT_RETURNTRANSFER,1); 
    
curl_setopt($chCURLOPT_TIMEOUT3); 
    
curl_setopt($chCURLOPT_POST1); 
    if(
$AuthString
    { 
        
curl_setopt($chCURLOPT_POSTFIELDS$AuthString); 
        echo 
"> Загружаю старницу загаловков новостей;<br>"
    } 
    else echo 
"> Загружаю старницу новостей;<br>"
    
curl_setopt($chCURLOPT_COOKIEFILE$SessID); 
    
curl_setopt($chCURLOPT_COOKIEJAR$SessID); 
    
curl_setopt($chCURLOPT_NOBODY0); 
    
curl_setopt($chCURLOPT_HEADER0); 
    
$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 Яндекс.Метрика Яндекс цитирования