
26.12.2008, 02:00
|
|
Познающий
Регистрация: 23.05.2008
Сообщений: 84
Провел на форуме: 192463
Репутация:
97
|
|
В общем раскопал вот такой скрипт (раз мне никто помочь не смог).
Это граббер линков, выдирает все ссылки с указанного сайта (по идее).
PHP код:
<?php
set_time_limit(0);
$site = 'http://bash.org.ru/';
$mode = 2; // 1 = Использовать функцию file_get_contents, 2 = Использовать сокеты
foreach(get_urls($site) as $url) {
echo '<a href="'.$url.'">'.$url.'</a><br>'."\n";
}
@set_time_limit(0);
@ini_set('max_execution_time', 0);
function get($action) {
$url = parse_url($action);
$fp = fsockopen($url['host'], 80, $errno, $errstr, 30);
if(!$fp) {
return false;
} else {
fputs($fp, 'GET '.$action.' HTTP/1.0'."\r\n".
'Host: '.$url['host']."\r\n".
'Referer: '.$url['scheme'].'://'.$url['host'].$url['path']."\r\n\r\n");
$result = '';
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
return $result;
}
}
function my_sort($array) {
$new_array = array();
foreach($array as $value) {
$new_array[] = $value;
}
return $new_array;
}
function JoinToSite($url, $site) {
$domain = parse_url($site);
$domain = $domain['scheme'].'://'.$domain['host'];
if($url{0} == '/') {
$link = $domain.$url;
} else if(preg_match('~^http(s)?:~i', $url)) {
if(parse_url($url, PHP_URL_HOST) == parse_url($site, PHP_URL_HOST)) {
$link = $url;
}
} else {
if(!preg_match('~^(ftp(s)?|javascript|mailto):~i', $url)) {
$dirname = '';
$explode = explode('/', parse_url($site, PHP_URL_PATH));
foreach($explode as $i => $dir) {
if($dir && $i != (count($explode)-1)) {
$dirname .= $dir.'/';
}
}
$link = $domain.'/'.$dirname.preg_replace('~(\A|/)\./~', '$1', $url);
$regex = '~/(?!\.\./)[^\x2F]+/\.\./~';
while(preg_match($regex, $link)) {
$link = preg_replace($regex, '/', $link);
}
}
}
return (isset($link) ? $link : false);
}
function GetAllUrlsFromUrl($url, $all_links) {
global $mode;
$first = (($mode == 1) ? @file_get_contents($url) : get($url));
preg_match_all('~<a[^>]+href[\x20]?=[\x20\x22\x27]?([^\x20\x22\x27\x3E]+)[\x20\x22\x27]?[^>]*>~i', $first, $second);
$array_urls = array();
foreach($second[1] as $link) {
$link = JoinToSite($link, $url);
if($link !== false && !in_array($link, $all_links)) {
$array_urls[] = $link;
}
}
return ((count($array_urls) > 0) ? $array_urls : false);
}
function get_urls($url) {
$old_links = array();
$new_links = array($url);
while(true) {
$url = $new_links[0];
$old_links[] = $url;
array_shift($new_links);
$get_urls = GetAllUrlsFromUrl($url, array_merge($old_links, $new_links));
if($get_urls) {
$new_links = array_merge($get_urls, $new_links);
} else {
if(sizeof($new_links)==0) {
break;
} else {
continue;
}
}
}
sort($old_links);
return $old_links;
}
?>
Но выдаёт ошибку
Warning: parse_url() expects exactly 1 parameter, 2 given in /home/*****/public_html/*****/site/admin/grabber.php on line 45
Warning: parse_url() expects exactly 1 parameter, 2 given in /home/*****/public_html/*****/site/admin/grabber.php on line 39
В чём может быть проблема? Помогите хоть вы, плиз.
|
|
|