даю скрипт для обозрения, пока он у меня работает как тест компа после разгона и тест стабильности, проц и память жрет на сто
настройки пхп
лимит времени выполнения выключен, память пхп 4048 М
set_time_limit(0);
$db_host = 'localhost';
$db_name = 'dumper';
$db_user = 'root';
$db_pass = '';
$connect = @mysql_connect($db_host, $db_user, $db_pass) or die('Error: cannot connect to database server');
@mysql_select_db($db_name) or die('Error: specified database does not exist');
@mysql_query("SET NAMES 'utf8'", $connect);
mb_internal_encoding('UTF-8');
/*
CREATE TABLE IF NOT EXISTS `parser` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ready` int(1) NOT NULL DEFAULT '0',
`url` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
KEY `ready` (`ready`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
*/
class Kurlparser {
private $homeurl;
public function __construct($homeurl) {
$homeurl = trim((substr($homeurl, -1) != '/' ? $homeurl : substr($homeurl, 0, -1)));
$this->setHomeurl($homeurl);
$this->parser($homeurl);
}
public function run() {
$cnt = mysql_result(mysql_query("select count(*) from `parser` where `ready` = 0"), 0);
if ($cnt > 0) {
$res = mysql_query("select `url` from `parser` where `ready` = 0");
while ($row = mysql_fetch_row($res)) {
$this->parser($row[0]);
}
} else {
// end recursive
echo '<div>THE END</div>'; exit;
}
}
public function parser($url) {
if ($url != $this->homeurl) {
$this->updateBase($url);
} else {
mysql_query("insert into `parser` (`ready`, `url`) values(1, '" . $url . "')");
}
$html = $this->getHtml($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$links = $doc->getElementsByTagName('a');
foreach ($links as $element) {
$link = $element->getAttribute('href');
if(substr($link, 0, 7) != 'http://') {
$link = $this->homeurl . '/' . $link;
}
if (strpos($link, $this->homeurl) !== false) {
if ($link != $url && substr($link, -1) != '/' && substr($link, -1) != '?' && substr($link, -1) != '#') { // && $this->validUrl($link)
if (mysql_result(mysql_query("select count(*) from `parser` where `url` = '" . $link . "'"), 0) == 0) {
$this->addBase($link);
}
}
}
}
$this->run();
}
public function setHomeurl($url) {
$this->homeurl = $url;
}
public function getHomeurl() {
return $this->homeurl;
}
public function addBase($url) {
if (mysql_query("insert into `parser` (`url`) values('" . $url . "')")) {
#echo '<div>insert ' . $url . '</div>';
} else {
#echo '<div>not insert ' . $url . '</div>';
}
}
public function updateBase($url) {
if (mysql_query("update `parser` set `ready` = 1 where `url` = '" . $url . "'")) {
#echo '<div>update ' . $url . '</div>';
} else {
#echo '<div>not update ' . $url . '</div>';
}
}
public function validUrl($url) {
$headers = get_headers($url);
return preg_match('|200|', $headers[0]) ? true : false;
}
public function getHtml($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT, 'Koenig sitemap generator BETA 0.1');
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
curl_close($curl);
return $data;
}
}
$a = new Kurlparser('http://sait.ru');
пока доку не писал и прочие мелочи, отступы я тоже потом через
http://phpbeautifier.com/ ставлю
подскажите может где память так жрет, или просто у меня сайт такой, где дублирующих ссылок много, и вообще много ссылок
смысл собрать все ссылки с сайта и создать карту xml для роботов