Помогите оптимизировать код PHP
От: PSVlab  
Дата: 11.07.10 14:52
Оценка:
Написал скрипт — парсер(просьба не пинать — заказ работодателя), но он очень долго выполняется. Помогите оптимизировать, т.к. в PHP я новичок

Сам код ниже. Использование нескольких циклов — тупо, но как сделать по другому не знаю. Лучше сразу куски кода или ссылки, чем банальный треп.

<?php
//инициализация
require_once 'BotLib.php';
//задаем максимальное время выполнения 30 минут
ini_set('max_execution_time', 1800);
//Считываем текущее время
$mtime = microtime();
//Разделяем секунды и миллисекунды
$mtime = explode(" ",$mtime);
//Составляем одно число из секунд и миллисекунд
$mtime = $mtime[1] + $mtime[0];
//Записываем стартовое время в переменную
$tstart = $mtime;

function parse($url){
$bot = new BotLib();
$bot->setCurlOptions();

//получаем домен блога
$_url=parse_url($url);
$blog_url=$_url["host"];

//получаем страницу блога
$html = $bot->_getRequest($url);

//получаем все ссылки с страницы
$html=str_replace ("\"", "'", $html);
preg_match_all("/href='.*?'/", $html, $matches);
unset($pages);
$pages=array();
$i=0;
while ($i < count($matches[0])){
$matches[0][$i]=str_replace ("href=", "", $matches[0][$i]);
$matches[0][$i]=str_replace ("'", "", $matches[0][$i]);
$link=parse_url($matches[0][$i]);
$link=$link['host'];
//если ссылка с нашего блога, то сохраняем ее в массиве $pages
if ($link == $blog_url and $matches[0][$i] != "http://".$blog_url and $matches[0][$i] != "http://".$blog_url."/") {
$pages[]=$matches[0][$i];
}
$i++;
}
$pages=unical_link($pages);
return $pages;
}

function unical_link($pages) {
//удаляем дубликаты в массиве
$pages = array_unique($pages);
$i=0;
while ($i < count($pages)){
//удаляем ссылки на файлы с расширением:
//xml, css, ico, png, gif, jpg, jpeg, zip, rar, 7zp, flv, svg, mp3, m3u, avi, mpeg, mp4, vob
if (strpos($pages[$i], ".xml")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".css")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".rss")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".ico")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".png")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".gif")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".jpg")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".jpeg")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".zip")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".rar")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".7zp")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".flv")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".svg")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".mp3")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".m3u")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".avi")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".mpeg")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".mp4")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".vob")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], ".divx")!=0) { unset($pages[$i]); }
if (strpos($pages[$i], "goto.php?")!=0) { unset($pages[$i]); }

//удаляем ссылки которые в качестве параметров принимают ссылку на другой сайт
if (isset($pages[$i]) and $pages[$i]!='') {
if (strpos($pages[$i], "http://",8)>0) { unset($pages[$i]); }
}
//удаляем символ # и все что после него
if (strpos($pages[$i], "#")!=0) {
$pages[$i]=substr($pages[$i], 0, strpos($pages[$i], "#")-1);
}
$pages = array_reverse($pages);
$pages = array_reverse($pages);
//удаляем дубликаты в массиве
$pages = array_unique($pages);
$i++;
}
return $pages;
}
$url="http://adne.info/";
$blog_page=parse($url);


//сканируем первый уровень вложенности страниц
$i=0;
while ($i < count($blog_page)){
if (isset($new_parse1)) {
$new_parse1=array_merge($new_parse1,parse($blog_page[$i]));
}
else
{$new_parse1=parse($blog_page[$i]);}
$i++;
}
$new_parse1=unical_link($new_parse1);
//сканируем второй уровень вложенности страниц
$i=0;
while ($i < count($new_parse1)){
if (isset($new_parse2)) {
$new_parse2=array_merge($new_parse2,parse($new_parse1[$i]));
}
else
{$new_parse2=parse($new_parse1[$i]);}
$i++;
}
$new_parse2=unical_link($new_parse2);
//сканируем третий уровень вложенности страниц
$i=0;
while ($i < count($new_parse2)){
if (isset($new_parse3)) {
$new_parse3=array_merge($new_parse3,parse($new_parse2[$i]));
}
else
{$new_parse3=parse($new_parse2[$i]);}
$i++;
}
$new_parse3=unical_link($new_parse3);
//сканируем четвертый уровень вложенности страниц
$i=0;
while ($i < count($new_parse3)){
if (isset($new_parse4)) {
$new_parse4=array_merge($new_parse4,parse($new_parse3[$i]));
}
else
{$new_parse4=parse($new_parse3[$i]);}
$i++;
}
$new_parse4=unical_link($new_parse4);

$blog_page=array_merge($blog_page, $new_parse1, $new_parse2, $new_parse3, $new_parse4);
$blog_page=unical_link($blog_page);

echo "<pre>";
print_r($blog_page);

//Делаем все то же самое, чтобы получить текущее время
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
//Записываем время окончания в другую переменную
$tend = $mtime;
//Вычисляем разницу
$totaltime = ($tend — $tstart);
//Выводим не экран
printf ("Страница сгенерирована за %f секунд !", $totaltime);
?>
Re: Помогите оптимизировать код PHP
От: Hodinar  
Дата: 11.07.10 17:22
Оценка:
Уважаемый, подскажите, кому это понадобилось грабить мой блог?
Re[2]: Помогите оптимизировать код PHP
От: PSVlab  
Дата: 15.07.10 15:15
Оценка:
Здравствуйте, Hodinar, Вы писали:

H>Уважаемый, подскажите, кому это понадобилось грабить мой блог?


отписался в личку. Считайте пиаром)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.