start(string $start_url, int $count)
Параметры функции:
$start_url URL с которго начинает работать скрипт (Без http://).
Комментарий:
Скрипт лазеет по сайтам и собирает адресса их главных страниц
(Даёте ему начальный сайт он собирает с него ссылки, идёт на следующий сайт там собирает ссылки и т.д. (Пока не наберт нужное количество))
На шаред хостингах не запускать (выгонят сразу).
В скрипте используется стороний класс для работы с HTTP.
Можно конечно использовать маленькую функцию или даже file_get_contents но этот класс лучше тем что работает с cockie и с редиректами.
<?php
#Подгружаем класс для работы с HTTP протоколам конечно тут можно работать и с маленькй фунцией но зато этот класс поддерживает cockies и редиректы
include_once('./http.php');
$HTTP = new Http();
#Отключаем контроль время выполняния
set_time_limit(0);
#Инициализируем переменные
$OUT_BUFER = "";
$hosts = array();
$final = array();
#Функция отчищяет строку от всёкого мусора
function tags($value) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
$value = addslashes($value);
$value = strip_tags($value);
$value = htmlspecialchars($value);
return $value;
}
#Проверяет URL на ненужные символы
function simbols_url($link) {
if ((strpos($link, "#" ) === false) && (strpos($link, "(" ) === false)&& (strpos($link, ")" ) === false) && (strpos($link, "{" ) === false)&& (strpos($link, "{" ) === false)&& (strpos($link, "[" ) === false)&& (strpos($link, "]" ) === false)) {
return true;
} else {
return false;
}
}
##########################Комплекс основных функций################################
function add_to_link_list($link, $host, $count) {
if (simbols_url($link)) {
$link = " $link";
$pos = strrpos($link, "http://");
if (!$pos === false) {
$link = substr($link, $pos);
$link_to_arr = $link;
}
if (strpos($link_to_arr, $host) === false) {
add_link_out(tags($link_to_arr), $count);
}
}
return true;
}
function add_link_out($url,$count) {
if (strlen($url)>11) {
$parsed_url = parse_url($url);
$host = $parsed_url['host'];
$GLOBALS['OUT_BUFER'].="Adding $host...\n";
if (!isset($GLOBALS['hosts'][md5($host)])) {
$GLOBALS['OUT_BUFER'].="$host not set ...\n";
if (count($GLOBALS['hosts'])<$count) {
$GLOBALS['hosts'][md5($host)] = "http://$host";
}
} else {
$GLOBALS['OUT_BUFER'].="$host is set ...\n";
}
}
return true;
}
function get_links_out($host, $count) {
$GLOBALS['OUT_BUFER'].="Starting $host\n";
global $HTTP;
$HTTP->execute("http://$host");
if ($HTTP->error) {
$GLOBALS['OUT_BUFER'].=$HTTP->error;
$GLOBALS['OUT_BUFER'].="\n";
$data = "";
} else {
$data = $HTTP->result;
}
preg_match_all("#href=['\"](.+?)['\"]#is", $data, $matches);
$i = 1;
foreach ($matches[1] as $a) {
if (count($GLOBALS['hosts'])<$count) {
add_to_link_list($a, $host, $count);
} else {
break;
}
}
#Если этого не сделать переполняется память
unset($data);
unset($a);
$GLOBALS['OUT_BUFER'].="Go to new links\n";
foreach($GLOBALS['hosts'] as $key => $a) {
if (count($GLOBALS['final'])<$count) {
if ($a != "Ok") {
$GLOBALS['OUT_BUFER'].="Now working with link $a\n";
$GLOBALS['final'][] = $a;
$GLOBALS['OUT_BUFER'].="Changing state to 'Ok'\n";
$GLOBALS['hosts'][$key] = "Ok";
$parsed_url = parse_url($a);
$host = $parsed_url['host'];
$GLOBALS['OUT_BUFER'].="Indexing this link\n";
get_links_out($host, $count);
}
} else {
break;
}
}
return true;
}
function finalize($count) {
$GLOBALS['OUT_BUFER'].="Finalizing\n";
foreach($GLOBALS['hosts'] as $key => $a) {
if (count($GLOBALS['final'])<$count) {
if ($a != "Ok") {
$GLOBALS['OUT_BUFER'].="Now woek with link $a\n";
$GLOBALS['final'][] = $a;
$GLOBALS['OUT_BUFER'].="Changing state to Ok\n";
$GLOBALS['hosts'][$key] = "Ok";
$parsed_url = parse_url($a);
$host = $parsed_url['host'];
$GLOBALS['OUT_BUFER'].="Indexing this link\n";
get_links_out($host, $count);
}
} else {
break;
}
}
return true;
}
#######################################################################
#Статрутем
function start($start_link, $count) {
$count = intval($count);
get_links_out($start_link, $count);
finalize($count);
#Удаляем ненужные переменные
unset($GLOBALS['hosts']);
#Фильтруем масив
$GLOBALS['final'] = array_filter($GLOBALS['final']);
#Сортируем масив
sort($GLOBALS['final']);
return $GLOBALS['OUT_BUFER'];
}
##############################Пример####################################
if ((strlen($_GET['link'])>1) && (strlen($_GET['count']))>0) {
#Выводим текст из переменной '$OUT_BUFER' если не надо то просто 'start($_GET['link'], $_GET['count'])';
echo start($_GET['link'], $_GET['count']);
#Можно echo $OUT_BUFER;
#Выводим масив
var_dump($final);
}
?>