rustrek

Рейтинг
64
Регистрация
19.07.2010
ivan-lev:
В том и дело, что нужно не все поддомены..
Можно, конечно, вручную в конфигах добавить wildcard.. но иметь в виду, что при изменении доменов в isp может "слететь"...

А, что конкретно нужно добавить в wildcard? Может попробовать как вариант.

SocFishing:
Ничего себе, не знал что preg_match спотыкается на 100000 байтах.

http://www.php.net/manual/ru/pcre.configuration.php
Заодно поставь pcre.recursion_limit - лимит на рекурсию.

спасибо за совет. я так и сделал

ладно спасибо за помощь, буду дальше думать как эту заразу победить

---------- Добавлено 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');

но пока отказывается работать, думаю дальше...

sabotage:
Можно. Варианта 2.
1. Прописываешь 100500 правил в htaccess
2. Заговариваешь текстовый файл с помощью старой цыганки. Но здесь надо ждать некоторое время (она скажет сколько)

блин нету знакомой старой цыганки, не посоветуете кого нить? или к кашпировскому написать?

sabotage:
Из базы дергаешь новый урл по старому id. Редиректишь 301ым из скрипта. 5 строк кода.

нет, ну это понятно, что можно таким способом редиректить, я там спрашивал если можно средствами .htaccess послать на новый урл.

Всего: 44