[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсер на php. Проблема
Илларион
Здравствуйте! У меня вопрос. Мне нужно сделать парсер, который бы отслеживал изменения на сайте и в случае изменений отсылал оповещение email. Я написал скрипт, но в нём присутствует логическая ошибка, которую я уже который день не могу поймать. Подскажите, плиз! Мне просто реально нужно это доделать, а вредный баг прячется очень глубоко. Вот скрипт.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<
html>

<
head>

<
title></title>

</
head>

<
body>

<?php

define('URL', 'http://shop.megafonnw.ru/spb/?pageid=5&subpageid=5&rnd=18');

$fp = fopen('URL', 'r');

$fpt = fopen('script.txt', 'r+');

$fpn = fopen('new.txt', 'r+');

$cont = file_get_contents(URL);

$man = substr($cont, 14900, 7636);

$script = file_get_contents('script.txt');

$new = file_get_contents('new.txt');

if($script == "") {

fwrite($fpt, $man);

print "script zapisan!";

}else {

if($script == $new) {

$ret = fwrite($fpn, $man);

print $ret."<br/>";

$sost = "No changed!";

ftruncate($fpn, 0);

}else {

$ret = fwrite($fpn, $man);

print $ret."<br/>";

$sost = "Text has been changed!";

ftruncate($fpt, 0);

$ret2 = fwrite($fpt, $new);

print $ret2."<br/>";

print strlen($new);

ftruncate($fpn, 0);

}

print "script ne zapisan";

}

print "\n\t<br/>".$sost;

fclose($fpn);

fclose($fpt);

fclose($fp);

?>

</body>

</
html>




Заранее благодарю! smile.gif



Спустя 1 час, 19 минут, 57 секунд (20.05.2010 - 20:00) vagrand написал(а):
Советую тебе использовать регулярные выражения а не substr($cont, 14900, 7636)

Спустя 1 час, 35 секунд (20.05.2010 - 21:00) Kuzya написал(а):
Странный какой-то код, сложный очень. Мне кажется что проще сделать так:
1. На нужном сайте код, который проверяется, обрамить какими-нибудь комментариями, чтоб сделать сделать простым извлечение его регулярными выражениями(как сказал vagrand).
2. При обращении к сайту извлекать этот код, помещать в файл если он ранее не был записан
3. Если код уже записан то просто получать старое содержимое как сейчас, file_get_contents`ом, и сравнивать с тем что есть.

Код очень запутан благодаря лишним нагромождениями типа странных fopen`ов (вместо которых подойдёт file_put_contents), ftruncate`ов и прочего. Чем проще код, тем проще в нём искать ошибки.

Спустя 5 минут, 6 секунд (20.05.2010 - 21:05) Илларион написал(а):
СпасиБо. Мне подсказали. Но возникла другая проблема - при загрузке на хостинг и выполнении там скрипта - 500-ая ошибка. Из-за чего это может быть? Вот обновлённый скрипт.
<?php

$url = 'http://shop.megafonnw.ru/spb/?pageid=5&subpageid=5&rnd=18';

$insite=file_get_contents($url);

$script=file_get_contents('script.txt');

$man=substr($insite,14900, 7636);

if ($man==$script){

$sost = 'neizmenon';

}else{

file_put_contents('script.txt',$man);

$sost = 'izmenen';

}

if($sost == 'izmenen'){

$otpr = mail("megafonnw921@mail.ru", "Изменения на megafonnw.ru", "Здравствуйте, Евгений! Произошли изменения на сайте megafonnw.ru . Зайдите, посмотрите результат изменений. Ваш покорный слуга - Робот-Парсер");

}

if($otpr){

print "Отправлено!";

}else{

print "Неудача!";

}

?>


Спустя 19 минут, 55 секунд (20.05.2010 - 21:25) Kuzya написал(а):
Причин ошибки 500 может быть море. Хотя там снизу всегда подписывается что-то типа "смотрите в логи" smile.gif Так что здесь путь ясен. Скорее всего запрещено открытие удалённых файлов. Вообщем, главное заглянуть в лог ошибок и сразу всё станет понятно.

Спустя 1 час, 23 минуты, 10 секунд (20.05.2010 - 22:49) Илларион написал(а):
Странно, я вроде бы выставил 777. Ну ладно, СпасиБо всё равно, буду думать в этом направлении!

Спустя 8 часов, 49 минут, 41 секунда (21.05.2010 - 07:38) Kuzya написал(а):
Кстати на многих хостингах запрещено ради безопасности запускать скрипты с правами 777 wink.gif
В прошлом посте я говорил о том, что иногда PHP запрещают работать с удалёнными файлами. На всякий случай поищи в phpinfo() значение опции allow_url_fopen. Если оно установлено в "1" или "on" то всё в порядке.

Спустя 1 минута, 25 секунд (21.05.2010 - 07:40) Илларион написал(а):
Kuzya, ты оказался прав!)) Я поменял права на 644 и всё ок. Теперь разб biggrin.gif ираюсь почему глючит функция mail() biggrin.gif biggrin.gif biggrin.gif

Спустя 5 минут, 12 секунд (21.05.2010 - 07:45) Илларион написал(а):
Вот ещё смотрите, какая хрень! Раньше такого никогда не было!

Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in

Почему пишет, что не установлена? Из-за чего это? Или нужно писать "от кого", пока нету почты? Заранее благодарю!

Спустя 7 минут, 28 секунд (21.05.2010 - 07:52) Kuzya написал(а):
Ошибка говорит о том что в php.ini не установлен заголовок "From" по умолчанию. Почитай документацию о mail(). Там в одном из массивов передаются дополнительные заголовки письма. Вот в них и надо передать своё значение заголовка "From"

Спустя 2 минуты, 6 секунд (21.05.2010 - 07:54) Илларион написал(а):
С этой проблемой справился. Настала другая - функция mail возвращает ложь! Это и на localhost и на хостинге. В чём же проблема? Первый раз с таким сталкиваюсь!


if($sost == 'izmenen'){
$otpr = mail("megafonnw921@mail.ru", "Изменения на megafonnw.ru", "Здравствуйте, Евгений! Произошли изменения на сайте megafonnw.ru . Зайдите, посмотрите результат изменений. Ваш покорный слуга - Робот-Парсер", "From: BIV332@yandex.ru");
}
if($otpr){
print "Отправлено!";
}else{
print "Неудача!";
}


Заранее благодарю!

Спустя 13 минут, 16 секунд (21.05.2010 - 08:08) Kuzya написал(а):
dry.gif Даже не знаю. Может быть не хватает \r\n в конце текста заголовков?
А вообще можно воспользоваться Pear::Mail и не мучиться smile.gif Там хоть не false возвращается, а адекватный текст ошибки

Спустя 1 минута, 26 секунд (21.05.2010 - 08:09) Илларион написал(а):
Нашёл ошибку в логике) Когда sost не равно изменён, тогда mail не выполняется. Следовательно, $otpr не определена. Поэтому, false)))

Спустя 8 часов, 55 минут, 12 секунд (21.05.2010 - 17:04) DedMorozzz написал(а):
http://www.govnokod.ru/3281 - хехехе. Увидел знакомый код)))

Спустя 3 часа, 37 минут, 5 секунд (21.05.2010 - 20:41) Raito-kun написал(а):
Цитата (DedMorozzz @ 21.05.2010 - 14:04)
http://www.govnokod.ru/3281 - хехехе. Увидел знакомый код)))

biggrin.gif laugh.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.