Как проверить наличие страницы сайта

Regy

Guest
Люди!
Может кто-нибудь подарить ламеру код, чтобы повесить его на сайт для проверки существования страницы? Чтобы можно было ввести диапазон адресов вида
http://www.site1.ru/page1.htm
http://site2.ru/php?s=45875
http://www.site3.ru/еще формат
и получить на странице только живые ссылки, то есть ссылки, которые ведут на существующие страницы из составленного списка?
 

[DAN]

Старожил PHPClub
Код, говоришь?
Держи:
PHP:
<?php
$site	= array();

$site[]	= '/Users/dan/Documents/php_manual/function.fopen.html';
$site[]	= 'http://phpclub.ru/talk/showthread.php?s=&threadid=68408&rand=0';
$site[]	= 'http://wikipedia.sourceforge.net/';
$site[]	= 'http://what.a.site.is.this/?';


foreach ($site as $url)
{
	if( fopen($url, "r") ) 
		echo "<a href='$url'>$url</a><br/>";
}

?>
 

itprog

Cruftsman
Только тогда придется использовать @:
Код:
...
if( @fopen($url, "r") ) 
...
Иначе будет кучка ошибок, если страницы не существуют.
 

SiMM

Новичок
[DAN], http://phpclub.ru/figwam/ - существует? А http://www.google.ru/figwam/ ?
Для одного url'а (остальное предлагается сделать самостоятельно, например, на основе кода, данного [DAN]'ом)
PHP:
$url = 'http://phpclub.ru/talk/showthread.php?s=&threadid=68408&rand=3';
$purl = parse_url($url);
if (!isset($purl['port'])) $purl['port'] = 80;
if (isset($purl['query'])) $purl['path'] .= '?'.$purl['query'];
$fp = @fsockopen($purl['host'], isset($purl['port']) ? $purl['port'] : 80,$errno,$errstr);
if (!$fp || $errno) echo "Invalid URL: {$url} - ".($errno ? $errstr : 'fsockopen error')."<br>\n";
else{
  $req = "GET {$purl['path']} HTTP/1.0\n".
         "Host: {$purl['host']}\n".
         "Accept-Encoding: gzip, deflate\n".
         "Connection: close\n\n";
  fwrite($fp,$req);
  $header = explode(' ',fgets($fp));
  if ($header[1] != 200) echo "Invalid URL: {$url}<br>\n";
  else echo "Valid URL: <a href='{$url}'>{$url}</a><br>\n";
  fclose($fp);
}
PS: за признак существования странички принят отклик 200 Ok на GET-запрос.
 

Regy

Guest
Подумал, что никто уже не откликнется, а тут такое! Всем ОГРОМНОЕ СПАСИБО. PHP только-только начинаю учить, до этого был экономистом, 3 месяца :).

-~{}~ 17.06.05 11:07:

Таки пытаюсь соединить части, предложенные by [DAN], itprog и SiMM, получилось не полностью. После переписки с одним из участников, ознакомлением с этим и поиском в
этомполучилось так:
PHP:
ini_set('display_errors','On');
error_reporting(E_ALL ^E_NOTICE);

$site    = array();

$site[]    = '/Users/dan/Documents/php_manual/function.fopen.html';
$site[]    = 'http://phpclub.ru/talk/showthread.php?s=&threadid=68408&rand=0';
$site[]    = 'http://wikipedia.sourceforge.net/';
$site[]    = 'http://what.a.site.is.this/?';

foreach ($site as $url)
{
$purl = parse_url($url);
if (!isset($purl['port'])) $purl['port'] = 80;
if (isset($purl['query'])) $purl['path'] .= '?'.$purl['query'];
$fp = fsockopen($purl['host'], isset($purl['port']) ? $purl['port'] : 80,$errno,$errstr);
if (!$fp || $errno) echo "Invalid URL: {$url}".($errno ? " - {$errstr}" : '')."<br>\n";
else{
  $req = "GET {$purl['path']} HTTP/1.0
Host: {$purl['host']}
Accept-Encoding: gzip, deflate
Connection: close

";
  fwrite($fp,$req);
  $header = explode(' ',fgets($fp));
  if ($header[1] != 200) echo "Invalid URL: {$url}<br>\n";
  else echo "Valid URL: <a href='{$url}'>{$url}</a><br>\n";
  fclose($fp);
}
}
На бесплатном хостере это не запускается, так как вроде не разрешают исходящие запросы. На домашнем выводит ошибку
Warning: fsockopen(): unable to connect to :80 in g:\server\server1\urltest.php on line 23
Fatal error: Maximum execution time of 30 seconds exceeded in g:\server\server1\urltest.php on line 23
23 строка -
PHP:
$fp = fsockopen($purl['host'], isset($purl['port']) ? $purl['port'] : 80,$errno,$errstr);
Кто-нибудь подскажет, как это исправить? Может, дело в конфигурации моего Апача? В этих вопросах плыву совершенно, поэтому буду признателен за подробную инструкцию :)

-~{}~ 17.06.05 11:08:

Немного не туда поместил сообщение...
 
Сверху