skillful
Новичок
Здравствуйте. Нашел такой вот скрипт проверки обратной ссылки. Скрипт старый, под php 5.3 вообще отказывался работать. Я его не много подправил и он вроде заработал. Но если этим скриптом проверять допустим страницу http://manyweb.ru/page_6_1.html, то он видит только пару ссылок и то своих (http://manyweb.ru). Можно определить в чем проблема? В сайте? В скрипте?
Этим кодом проверяем ссылку.
Если раскоментировать строку exit('<pre>'. print_r ($m, true).'</pre>');
Видно какие ссылки имеются на странице, но именно на этом сайте он не показывает необходимые ссылки, хотя они там есть http://manyweb.ru/page_6_1.html
Почему так?
PHP:
<?
// http://kurilka.co.ua/archives/script-check-backlinks/
class backlink
{
var $errors = '';
var $backlink = '';
var $backlink_parse = array();
var $backlink_path = '';
var $backlink_path_ar = array();
function backlink($backlink)
{
$this->backlink = $backlink;
$this->backlink_parse = parse_url($backlink);
$this->backlink_path = $this->backlink_parse['path'];
if ( substr($this->backlink_path,0,1)=='/' ) $this->backlink_path = substr($this->backlink_path,1);
if ( substr($this->backlink_path,-1)=='/' ) $this->backlink_path = substr($this->backlink_path,0,strlen($this->backlink_path)-1);
$backlink_path_ar = explode("[/]", $this->backlink_path);
if ( count($backlink_path_ar)>0 )
{
foreach ( $backlink_path_ar as $k=>$v )
{
$v = trim($v);
if ( empty($v) ) unset($backlink_path_ar[$k]);
}
}
if ( count($backlink_path_ar)>0 ) $this->backlink_path_ar = $backlink_path_ar;
}
function subpath_check($rule)
{
if ( count($this->backlink_path_ar)>0 )
{
$path = '';
foreach ( $this->backlink_path_ar as $k=>$v )
{
$path.= empty($path) ? $v : "\/".$v;
//Здесь ошибка!! Починить потом sk.
//if ( preg_match('/Disallow:\s*[\/]?'.$path.'[\/\*]?\s*$/i',$rule) ) return true;
}
}
return false;
}
function check($url)
{
$parse_url = parse_url($url);
/* robotos.txt */
$robots_url = 'http://'.$this->backlink_parse['host'].'/robots.txt';
$robots_data_ar = @file($robots_url);
if ($robots_data_ar !== false)
{
if (count($robots_data_ar) > 0)
{
foreach ( $robots_data_ar as $k=>$v )
{
$v = trim($v);
//echo '<pre>'. print_r ($v, true).'</pre>';
if ( !empty($v) )
{
if ( preg_match('/Disallow:\s*\/\s*$/i',$v) ) // запрет индексации всего сайта
{
$this->errors = 'В '.$robots_url.' есть правило запрещающее индексировать сайт.';
return false;
}
if (preg_match('/Disallow:\s*[\/]?'.str_replace("/","\/",$this->backlink_path).'[\/\$]\s*$/i',$v) || $this->subpath_check($v))
{
// запрет индексации пути к странице с ссылкой)
$this->errors = 'В '.$robots_url.' есть правило запрещающее индексировать страницу '.$this->backlink;
return false;
}
}
}
}
}
/* META */
$meta = @get_meta_tags($this->backlink);
/*if (
eregi('noindex',$meta['robots']) ||
eregi('nofollow',$meta['robots'])
) {
$this->errors = 'На странице '.$this->backlink.' есть META данные запрещающие её индексацию.';
return false;
}*/
if (preg_match('/(nofollow|noindex)/i', $meta['robots']))
{
$this->errors = 'На странице '.$this->backlink.' есть META данные запрещающие её индексацию.';
return false;
}
/* Link */
$data = '';
$fp = @fopen($this->backlink,"r");
if ( $fp )
{
while (!feof($fp)) $data.= fgets ($fp,4096);
fclose ($fp);
$pattern = array (
"'<script[^>]*?>.*?</script>'si", // Вырезается javascript
"'<noscript[^>]*?>.*?</noscript>'si", // noscript
"'<noindex[^>]*?>.*?</noindex>'si", // noindex
"'<a[^>]*?rel=[\"\']nofollow[\"\'].*?>'si", //nofollow
"'<\!--.*?-->'si", // remarka
);
$replace = array(" "," "," "," "," ");
$data = preg_replace($pattern, $replace, $data);
if (preg_match_all('/<a.*?href=["\']http:\/\/(.*?)["\']/i', $data, $m))
{
if ( count($m[1])>0 )
{
foreach ( $m[1] as $k=>$v )
{
//exit('<pre>'. print_r ($m, true).'</pre>');
if ($parse_url['host'] . $parse_url['path'] == $v)
{
return true;
}
if ($parse_url['host'] . $parse_url['path'] . '/' == $v)
{
return true;
}
/*if ( stripos($parse_url['host'], $v) )
{
return true;
}*/
}
}
}
$this->errors = 'На странице '.$this->backlink.' ссылка '.$url.' не найдена или не доступна к индексации.';
}
else
$this->errors = 'Не удаётся открыть страницу '.$this->backlink;
return false;
}
}
define('BACKLINK_LOADED', 1);
?>
PHP:
$bl = new backlink("http://manyweb.ru/page_6_1.html");
if ( !$bl->check("http://mysite.ru" . '') )
echo $bl->errors;
Видно какие ссылки имеются на странице, но именно на этом сайте он не показывает необходимые ссылки, хотя они там есть http://manyweb.ru/page_6_1.html
Почему так?
PHP:
<pre>
Array
(
[0] => Array
(
[0] =>
<a href="http://manyweb.ru/" [1]=""> </a>
<a href="http://manyweb.ru/" )="" [1]=""> Array
(
[0] => manyweb.ru/
[1] => manyweb.ru/
)
)
</a>
</pre>