Такой вопрос..скрипт граббера, этот скрипт загоняется в крон и ставится обновление к примеру на 12 часов и сайт автоматически наполняется новостями. Но основная проблема скрипта это запрет граббинга новостей которые уже были сграбблены. Функционально это оформлено так. Скрипт открывает страницу сайта с новостями (откуда будут граббится новости) копирует ссылки новостей, а затем отдельным циклом начинает грабить с каждой ссылки, при удачном граббинге записывает имя ссылки в файл grabbered.txt. Затем если мы заново запускаем скрипт, но с помощью функции array_search проверяем была ли сграблена эта новость или нет, если не была то грабим иначе ничего не делаем, но вот почему то именно эта проверка работает некорректно, вообще не работает. Посмотрите пожалуйста, может у кого нибудь есть идеи как по другому оформить цикл проверки.. PHP: include("./cron/newsland.php"); // собираем линки новостей $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url_grub); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_NOBODY, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, "MSIE 7.0"); curl_setopt($ch, CURLOPT_TIMEOUT, 20); $text = curl_exec($ch); curl_close($ch); preg_match_all("#<a href=\"\/News\/Detail\/id\/(.+)\">#",$text,$results); for($i=0;$i<count($results[0]);$i++) { $urlsis="http://newsland.ru".str_replace(array('<a href="','">'),null,$results[0][$i]); if ($urlsis!="http://newsland.ru/News/Detail/id/284971/cat/78") { $urlsos[]=$urlsis; } else {} } $list_garb=file("./grabbered.txt"); $check_file=array_map("trim",$list_garb); foreach ($urlsos as $urls_get ) { $urls_get=trim($urls_get); if (array_search($urls_get,$check_file)==FALSE) { // берем текст новости $text_news = file_get_contents($urls_get); /// вырезаем текст статьи preg_match('#<h1 class="mt10 grey">(.*?)</h1>(.*?)<div class="bodytext mt5">(.*?)</div></div>#s',$text_news,$result_news); // меняем кодировку $result_news[0]=iconv("UTF-8", "WINDOWS-1251",$result_news[0]); //работаем с рисунком новости preg_match('#<img src="(.+)" title="(.+)" alt="(.+)" class="floatr mt10">#',$result_news[0],$result_image); // скачиваем картинку $result_load_image=file_get_contents("http://newsland.ru".$result_image[1]); $name_image=substr($result_image[1],strrpos($result_image[1],"/")+1); $good_image = fopen("./rssnews_image/".$name_image, "w"); fputs($good_image, $result_load_image); /// создаем текст статьи для записи в файл $src="<div style=\"float: left;\"><img src=\"./rssnews_image/".$name_image."\" title=\"".$result_image[2]."\" alt=\"".$result_image[2]."\" class=\"imagestyle\"></div>"; $time=date(d."-".m."-".y)."\r\n"; $title=$result_image[2]."\r\n"; $name=date("y-m-d-H-i-s"); $body=str_replace(array('<div class="bodytext mt5">',$result_image[0],'</div>','<div class="newsctrl f12 mt10"><div>','</div></div>'),null,$result_news[0]); $body=preg_replace('#<h1 class="mt10 grey">(.+)</h1>#',null,$body); $body=str_replace('<a','<br><br><a',$body); preg_match_all('#(.*?)\.#is',$body,$out_anonce); for($r=0;$r<5;$r++) { $body=str_replace($out_anonce[0][$r],$out_anonce[0][$r]."\r\n",$body); } $good = fopen("./rssnews_/".$name.".txt", "w"); fwrite($good,$time.$title.$src."\r\n".$body); fclose($good); $good_urls = fopen("./grabbered.txt", "a"); fwrite($good_urls,$urls_get."\r\n"); fclose($good_urls); sleep(1); } else { } }
Структура тупая, но по моему верная. Выведи все переменные, которые сравниваются, посмотри что в них. $urls_get, $check_file
Самый прикол, что если в коде будет иметься еще хоть одна кавычка после этой фразы, то он обрежет по последнию кавычку. '#image=([^"].+)#'
Zircool Используйте оператор === для проверки значения, возвращаемого этой функцией. (с) ман про array_search А вообще - покажи print_r обоих массивов Solker Учите, что делает ? в регулярных выражениях, а вот это - мега тру PHP: '#image=([^"].+)#' Первый знак не кавычка и дальше любое количество знаков до конца строки
На сколько хороша функция проверки форм? PHP: function insec($text) { $text = htmlentities(strip_tags($text)); return $text; } Как добавить сюда регулярку чтобы проходили только буквы и цифры ну и другие безопасные символы?
PHP: if ($addnewfaq==1){ if (($haed!="")&&($faq!=="")){ $link2= connect($host,$user,$pass,$db); //подключаемся к MySQL $addFAQ= addmysql($link2,faq,faq,$head,$faq,$note); //Добавить запись из формы в MySQL unset($haed); unset($faq); unset($note); }; }; echo '<form method="POST" action="adminka.php?str=faq"> <input type="text" name="haed" size="100" /><br /> <textarea name="faq" rows="10" cols="100"></textarea> <br /> <input type="text" name="note" size="100" /><br /> <input type="hidden" name="addnewfaq" value="1"> <input type="submit" value="Ввод" /> </form>'; При вводе данных в форму, они вносятся в БД с помощью функции addMySQL но после внесения данных при обновлении старицы они сного вносятся...и так при каждом обновлении...уже и в форму скрытое поле ввёл и обнуление переменных с помощью unset() не помогло... Что можно сделать?
что-что - переадресовывать на другую страницу, типо "Спасибо, вы внеслися". Нафига там же оставлять? а вообще быдлокод, юзай лучше if(isset($submit)) т.е. сначала форма, а потом обработка того, что ввели и строго по нажатию кнопки
На сколько хороша функция проверки форм? PHP код: Code: function insec($text) { $text = htmlentities(strip_tags($text)); return $text; } Как добавить сюда регулярку чтобы проходили только буквы и цифры ну и другие безопасные символы?
Нет не помогло, может это браузер сохраняет данные и при обновлении сного их отсылает? стоит Opera мозила также выводит но она выдаёт предупреждение что внесенны данные в форму. Обновить или нет?
PHP: <head> <meta http-equiv="Content-Type" content="text; charset=windows-1251"> <title>ДОБАВИТЬ СВОЙ МЕГА-FAQ</title> </head> <form method="POST"> <input type="text" name="haed" size="100" /><br /> <textarea name="faq" rows="10" cols="100"></textarea> <br /> <input type="text" name="note" size="100" /><br /> <input type="hidden" name="addnewfaq" value="1"> <input type="submit" value="Ввод" /> </form> <? $haed=$_POST['haed']; $faq=$_POST['faq']; $note=$_POST['note']; $submit=$_POST['addnewfaq']; if(isset($submit)) { echo "Уря"; // тут идет твоя вставка чего надо куда надо в БАЗУ //подключаемся к MySQL - ну тут сам напишешь процедуру подключения, лучше вывести в config.php и инклудить // Теперь вставляем данные $query="INSERT INTO FAQ_TABLE(haed, faq, note) values ('$haed', '$faq', '$note')"; $submitsql=mysql_query($query) or die(mysql_error()); //А теперь перенаправляем куда нам надо header("Location: http://твой_сайт/adminka.php?str=faq"); }
Pashkela Ну и выбьет тебе ошибку - что заголовки уже посланы. Header - должен быть до любого вывода выполнен
)) ну в смысле да, это меня этот чорт попутал там надо исправить <input type="submit" value="Ввод" /> на <input type="submit" name="submit" value="Ввод" /> исправить $submit=$_POST['addnewfaq']; на $submit=$_POST['submit']; и <input type="hidden" name="addnewfaq" value="1"> вообще удалить нах ЗЫЖ Бгг
Он что-то на строчку header("Location: http://твой_сайт/adminka.php? ругается.... Code: Warning: Cannot modify header information - headers already sent by (output started at Z:\home\***\www\adminka.php:3) in Z:\home\***\www\adminka.php on line 86
Pashkela Ты перед тем как постить сначала сам выучи ... Во 1 .... Скрипт содержит скуль Во 2.... header("Location: http://твой_сайт/adminka.php?str=faq"); Выведет ошиьку о том что хидеры уже отослали =\\ PHP: <? if(isset($_POST['submit'])) { // тут идет твоя вставка чего надо куда надо в БАЗУ //подключаемся к MySQL - ну тут сам напишешь процедуру подключения, лучше вывести в config.php и инклудить $haed="'".mysql_real_escape_string($_POST['haed'])."'"; $faq="'".mysql_real_escape_string($_POST['faq'])."'"; $note="'".mysql_real_escape_string($_POST['note'])."'"; // Теперь вставляем данные $query="INSERT INTO FAQ_TABLE SET haed=".$haed.", faq=".$faq.", note=".$note; $submitsql=mysql_query($query) or die(mysql_error()); //А теперь перенаправляем куда нам надо header("Location: http://твой_сайт/adminka.php?str=faq"); } ?> <head> <meta http-equiv="Content-Type" content="text; charset=windows-1251"> <title>ДОБАВИТЬ СВОЙ МЕГА-FAQ</title> </head> <form method="POST"> <input type="text" name="haed" size="100" /><br /> <textarea name="faq" rows="10" cols="100"></textarea> <br /> <input type="text" name="note" size="100" /><br /> <input type="submit" value="Ввод" name="submit" /> </form> чтото тип того нада
Чего выучи, ну перепутал местами html и php А у тебя в каждом поле XSS)) Сам учись так что ЗЫЖ Тут вообще про безопасность не спрашивали