Проверка ссылок на доступностьВ этой статье я расскажу о том, как я делал проверку базы данных сайтов каталога на доступность. В коде используется функция fsockopen и запуск скрипта самим собой (для обхода ограничения по времени на выполнение программы).
Итак, у нас есть таблица url (например, каталог сайтов):
- Код: Выделить всё • Развернуть
1 http://url.com
2 http://url1.com
3 http://url2.com
...
Создадим скрипт
check.php при отправке на который post данных action:check, он инициализирует начало проверки, то бишь запускает сам скрипт проверки (создадим его чуть позже):
- Код: Выделить всё • Развернуть
<?php
if ($_POST['action'] != 'check') die('Nou!');
$result = openURL($_SERVER['SERVER_NAME'], '/check1.php');
if ($result[0] == 0) {
die($result[1]);
}
?>
Функция openURL описывается так:
- Код: Выделить всё • Развернуть
<?php
function openURL($host, $url) {
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
return array(0, $errstr.' ['.$errno.']');
}else {
$out = "GET $url HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
fclose($fp);
return array(1, "");
}
}
?>
Теперь будем писать скрипт check1.php (он будет запускать сам себя):
- Код: Выделить всё • Развернуть
<?php
$j = isset($_GET['j']) ? $_GET['j'] : 0; for ($i = 1; $i <= 10; $i ++) {
if ($totalsites <= ($j * 10 + $i - 1)) {
break 1;
}
$cur_site = $j * 10 + $i - 1; $result = checkSite($cur_site);
}
$j ++; openURL($_SERVER['SERVER_NAME'], '/admin/check1.php?j='.$j);
?>
Сердце нашего скрипта - функция checkSite($cur_site):
- Код: Выделить всё • Развернуть
<?php
function checkSite($cur) {
$id = $url = $fp = @fsockopen($url_info['host'], 80, $errno, $errstr, 10);
if (!$fp) {
return "Не удается установить соединение";
}
$out = "HEAD / HTTP/1.1\r\n";
$out .= "Host: ".$url_info['host']."\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$server_response = array();
while ($line = trim(fgets($fp, 128))) {
if ($line) {
array_push($server_response, $line);
}
}
fclose($fp);
$response = implode("\n", $server_response);
foreach($server_response as $v) {
}
}
?>
Вот схематичное изложение моего скрипта. Надеюсь вам это поможет.
После того как написана основа, можно навесить дополнительные функции, например, при запуске проверки по крону, записывать результат в базу данных и, если сайт не прошел трех проверок - удалять его.
Стырил отсюда -
http://alt-f4.ru/proverka-ssilok-na-online