А, что конкретно нужно добавить в wildcard? Может попробовать как вариант.
спасибо за совет. я так и сделал
ладно спасибо за помощь, буду дальше думать как эту заразу победить---------- Добавлено 24.04.2014 в 01:00 ----------похоже нашёл подобную проблему http://phpclub.ru/talk/threads/preg_match-%D0%B8%D0%B7-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B5-100%D0%9A%D0%B1.59290/
вот ещё http://www.php.net/manual/ru/pcre.configuration.php Лимит обратных ссылок PCRE.
блин звиздец решение очень простое ini_set('pcre.backtrack_limit', 150000);
вот http://newsrbk.ru/allsports/1/
всем спасибо
SocFishing не, таже байда, та сам парсер парсит нормально вот можно посмотреть его работу http://newsrbk.ru/sport/ в левом сайтбаре выберите раздел хоккей http://newsrbk.ru/allsports/2/ всё ок, потом раздел футбол http://newsrbk.ru/allsports/1/ в нём больше входных данных и файл кеша вообще не создаётся.
просто напросто файл до 100кб создаётся нормально, а вот больше чем 100кб не создаётся, я сам не могу понять что е так
это @ini_set( 'memory_limit', '256M' ); не помогает, уже пробовал.
а что здесь не понятно?
preg_match_all ('#<table align="center" width="90%">(.*?)<script language="JavaScript">#si', $contentout, $content);for($i=0; $i < count($content[1]); $i++){ $name = $content[1][$i];} $searchsports_2 .= '<table align="center" width="100%">'.$name.'';
$searchsports_2 = данные записываемые в файл, у меня там кеширование, создаётся файл и потом читаем из него
вот $newsrbk_api->save_to_cache ( "searchsports_2", $searchsports_2); данные переменной $searchsports_2 записываем в файл searchsports_2.tmp
вот весь код
<?php define ( 'NEWSRBKHACKING', true ); @ini_set( 'display_errors', true ); @ini_set( 'html_errors', false ); @ini_set( '2048M' ); @ini_set( 'memory_limit', '128M' ); @ini_set( 'max_execution_time', 0 ); @ini_set( 'output_buffering', 'off' ); include($_SERVER['DOCUMENT_ROOT'].'/includes/template.php'); include($_SERVER['DOCUMENT_ROOT'].'/includes/lang/russian.php'); include($_SERVER['DOCUMENT_ROOT'].'/includes/class_api.php'); $searchsports_2=$newsrbk_api->load_from_cache( "searchsports_2_$number", 6); if (!$searchsports_2) { function get_web_page( $url, $bot ) { $uagent = array( "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)", "Mozilla/5.0 (compatible; Mail.RU/2.0)", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)", "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0" ); $ch = curl_init( $url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_USERAGENT, $uagent[$bot]); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_MAXREDIRS, 50); $content = curl_exec( $ch ); curl_close( $ch ); return $content; } $content=get_web_page("http://newsrbk.ru/sport/45.html"); preg_match_all ('#<table align="center" width="90%">(.*?)<script language="JavaScript">#si', $content, $content); for($i=0; $i < count($content[1]); $i++) { $name = $content[1][$i]; } $searchsports_2 .= '<table align="center" width="100%">'.$name.''; $newsrbk_api->save_to_cache ( "searchsports_2_$number", $searchsports_2); } $content = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/tpl/news/allsports.tpl'); $content = str_replace('{TITLE}',$page_title,$content); $content = str_replace('{SEARCHSPORTS}',$searchsports_2,$content); echo ApplyTemplate($_SERVER['DOCUMENT_ROOT'].'/tpl/main_allsports.php', Array('content'=>$content, 'page_title'=>$page_title, 'page_keywords'=>$page_keywords, 'page_description'=>$page_description)); ?>
ссылка, что пытаюсь распарсить http://newsrbk.ru/sport/45.html
а сам класс я добавил чуть выше
вот класс, создание кеш
<?php if( ! class_exists( 'NEWSRBK_API' ) ) { class NEWSRBK_API { var $result = false; var $cache_dir = false; var $cache_files = array(); function NEWSRBK_API() { if (!$this->cache_dir) { $this->cache_dir = $_SERVER['DOCUMENT_ROOT']."/cache/service/"; } return true; } function save_to_cache ($fname, $vars) { $filename = $fname.".tmp"; $f = @fopen($this->cache_dir.$filename, "w+"); @chmod('0777', $this->cache_dir.$filename); if (is_array($vars)) $vars = serialize($vars); @fwrite($f, $vars); @fclose($f); return $vars; } function load_from_cache ($fname, $timeout=300, $type = 'text') { $filename = $fname.".tmp"; if (!file_exists($this->cache_dir.$filename)) return false; if ((filemtime($this->cache_dir.$filename)) < (time()-$timeout)) return false; if ($type=='text') { return file_get_contents($this->cache_dir.$filename); } else { return unserialize(file_get_contents($this->cache_dir.$filename)); } } function clean_cache($name = "GLOBAL") { $this->get_cached_files(); if ($name=="GLOBAL") { foreach ($this->cache_files as $cached_file) { @unlink($this->cache_dir.$cached_file); } } elseif (in_array($name.".tmp", $this->cache_files)) { @unlink($this->cache_dir.$name.".tmp"); } } function get_cached_files() { $handle = opendir($this->cache_dir); while (($file = readdir($handle)) !== false) { if ($file != '.' && $file != '..' && (!is_dir($this->cache_dir.$file) && $file !='.htaccess')) { $this->cache_files [] = $file; } } closedir($handle); } } } $newsrbk_api = new NEWSRBK_API (); if( ! isset( $result ) ) { include_once ($_SERVER['DOCUMENT_ROOT'].'/includes/config.php'); } $newsrbk_api->result = $result; ?>
зря спорите, я тут решаю как всё таки отредиректить правильно, вот кое что получилось, пока напашет, думаю дальше...
<?php error_reporting(E_ERROR); function getRedirectUrl($newsid) { // Connect to the database $dServer = 'localhost'; $dDb = ''; $dUser = ''; $dPass = ''; $s = @mysql_connect($dServer, $dUser, $dPass) or die('Couldn’t connect to database server'); @mysql_select_db($dDb, $s) or die("Couldn’t connect to database"); $query = 'SELECT new_url FROM redirects WHERE old_id = '. $newsid; mysql_query($query); $result = mysql_query($query); if ($result) { $hasRecords = mysql_num_rows($result) == 0 ? false : true; if (!$hasRecords) { $ret = 'http://newsrbk.ru/'; } else { while($row = mysql_fetch_array($result)) { $ret = 'http://newsrbk.ru/'. $row["new_url"]; } } return $ret; } else { return 'http://newsrbk.ru/'; } mysql_close($s); } $newsid = $_GET["newsid"]; if (ctype_digit ($newsid)) { $url = getRedirectUrl($newsid); } else { header("HTTP/1.0 404 Not Found"); exit; } echo $url; exit(); ?>
где new_url новая таблица
old_id старые иды
seo_title новый адрес
INSERT INTO `new_url` (`old_id`, `seo_title`) VALUES (77354, 'v_centre_kieve_otkryilsya_pervyiy_monorestoran');
но пока отказывается работать, думаю дальше...
блин нету знакомой старой цыганки, не посоветуете кого нить? или к кашпировскому написать?
нет, ну это понятно, что можно таким способом редиректить, я там спрашивал если можно средствами .htaccess послать на новый урл.