Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB59.1710
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 24.01.2013, 14:36   #1
dmjROV
Senior Member
 
Аватар для dmjROV
 
Регистрация: 22.06.2008
Сообщений: 560
Бабло: $107555
По умолчанию Нужен 404 чекер!

Я даю список урлов на входе вида domen.com/file.php, а на выходе получаю список урлов с валидом(то есть наличие самого файлика, а не всего реса), сам файл пустой, то есть проверять на наличие определенного текста не получится, значит надо чекать ответ сервера или как там это называется, может есть у кого рабочее решение?
А то заебался искать, все что находил не пашет или виснет, может дело в виндоус 7, хз
dmjROV вне форума  
Старый 24.01.2013, 14:46   #2
majordon
Senior Member
 
Аватар для majordon
 
Регистрация: 11.10.2008
Сообщений: 5,907
Бабло: $828818
По умолчанию

Hrefer по идее подойдёт
majordon вне форума  
Старый 24.01.2013, 14:55   #3
dmjROV
Senior Member
 
Аватар для dmjROV
 
Регистрация: 22.06.2008
Сообщений: 560
Бабло: $107555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от majordon Посмотреть сообщение
Hrefer по идее подойдёт
у меня его нет к сожалению или к счастью
dmjROV вне форума  
Старый 24.01.2013, 14:59   #4
den2099
Senior Member
 
Аватар для den2099
 
Регистрация: 25.06.2011
Сообщений: 1,402
Бабло: $287530
По умолчанию

вот
Код:
<?
set_time_limit(0);

function get_status($url, $referer = "") {
$parsed_url = parse_url($url);

$headers = "GET $url HTTP/1.1\r\n";
$headers .= "HOST: {$parsed_url['host']}\r\n";
$headers .= "User-Agent: Opera/9.01 (Windows NT 5.1; U; ru)\r\n";
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
$headers .= "Accept-Encoding: gzip\r\n";
if (!empty($referer))
$headers .= "Referer: $referer\r\n";
$headers .= "Connection: close\r\n";

$response_headers = array();
if (!($socket = @fsockopen($parsed_url['host'], (array_key_exists("port", $parsing_url) ? $parsing_url['port'] : 80), $errno, $errstr))) {
return false;
} else {
fputs($socket, $headers . "\r\n");
$status = fgets($socket);
}
preg_match("/ (\d\d\d) /", $status, $matches);
return $matches[1];
}

if (file_exists("urls.txt")) {
$urls = file("urls.txt");
echo "<table border=1 cellspacing=0 cellpadding=0><tr><th>Адрес страницы</th><th>Код ответа</th></tr>";
foreach ($urls as $url) {
echo "<tr><td>$url</td><td align=right>" . get_status(trim($url)) . "</td></tr>";
flush();
}
echo "</table>";
}
?>
список урлов кладется в urls.txt
den2099 вне форума  
Старый 24.01.2013, 15:13   #5
dmjROV
Senior Member
 
Аватар для dmjROV
 
Регистрация: 22.06.2008
Сообщений: 560
Бабло: $107555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от den2099 Посмотреть сообщение
вот
Код:
<?
set_time_limit(0);

function get_status($url, $referer = "") {
$parsed_url = parse_url($url);

$headers = "GET $url HTTP/1.1\r\n";
$headers .= "HOST: {$parsed_url['host']}\r\n";
$headers .= "User-Agent: Opera/9.01 (Windows NT 5.1; U; ru)\r\n";
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
$headers .= "Accept-Encoding: gzip\r\n";
if (!empty($referer))
$headers .= "Referer: $referer\r\n";
$headers .= "Connection: close\r\n";

$response_headers = array();
if (!($socket = @fsockopen($parsed_url['host'], (array_key_exists("port", $parsing_url) ? $parsing_url['port'] : 80), $errno, $errstr))) {
return false;
} else {
fputs($socket, $headers . "\r\n");
$status = fgets($socket);
}
preg_match("/ (\d\d\d) /", $status, $matches);
return $matches[1];
}

if (file_exists("urls.txt")) {
$urls = file("urls.txt");
echo "<table border=1 cellspacing=0 cellpadding=0><tr><th>Адрес страницы</th><th>Код ответа</th></tr>";
foreach ($urls as $url) {
echo "<tr><td>$url</td><td align=right>" . get_status(trim($url)) . "</td></tr>";
flush();
}
echo "</table>";
}
?>
список урлов кладется в urls.txt
спасибо, но что то не робит, колонака ответ сервера пустая, и долго очень ждать приходится!
dmjROV вне форума  
Старый 24.01.2013, 15:22   #6
kip
Senior Member
 
Аватар для kip
 
Регистрация: 06.05.2007
Сообщений: 473
Бабло: $67595
Отправить сообщение для kip с помощью ICQ
По умолчанию

Сколько в файлике ресурсов?
Как вариант:
1) В пятом хрумере есть анализатор ссылок, который может чекать только заголовки ответа.
2) Бесплатная версия Allsubmitter'a также умеет это делать.
3) Могу прочекать большие базы на подобные моменты, т.к. сервак виндовый часто простаивает.
__________________
Пишу зло на PHP, с цмс не работаю
Мы немного упоролись!
kip вне форума  
Старый 24.01.2013, 18:20   #7
DimaX
Senior Member
 
Регистрация: 19.04.2007
Сообщений: 2,272
Бабло: $294990
По умолчанию

Если урлов не сильно много, то пойдет вот такой скриптик:
PHP код:
<?php

set_time_limit
(0);

function 
get_header($url)
    {
        global 
$urls$i$vsego;
        
        
$counter_limit 2;
        
$counter 0;
        
        
$result FALSE;
        
        while (
$result === FALSE)
            {
                
$counter++;
                
                if (
$counter $counter_limit)
                    {
                        echo 
'<b>'.($i 1).'/'.$vsego.' '.$url.' connection error</b><br>'."\n";flush();
                        return 
FALSE;
                    }
                
                
$ch curl_init();
            
                
curl_setopt($chCURLOPT_URL$url);
                
curl_setopt($chCURLOPT_HEADER1);
                
curl_setopt($chCURLOPT_NOBODY1);
                
curl_setopt($chCURLOPT_RETURNTRANSFER1);
                
curl_setopt($chCURLOPT_TIMEOUT20);
            
                
$result curl_exec($ch);
                
                if (
$result === FALSE)
                    {
                        
sleep(2);
                    }
            }
        
        
$header split("\n"$result);
        
        return 
$header;
    }

$good = array();
$bad = array();
$noconnect = array();

$urls array_map('trim'file('urls.txt'));

$vsego count($urls);

foreach (
$urls as $i => $url)
    {
        if (
strpos(trim($url), 'http') === 0)
            {
                
$url parse_url(trim($url));
            }
            else
            {
                
$url parse_url('http://'.trim($url));
            }
        
        
$header get_header('http://'.trim($url['host']).trim(@$url['path']));
        
        
$location $font1 $font2 '';

        if (
$header !== FALSE)
            {
                foreach (
$header as $temp)
                    {
                        if (
strpos($temp'404 ') !== FALSE || strpos($temp'Location:') !== FALSE)
                            {
                                
$location trim($temp);
                                
$font1 '<font color="red">';
                                
$font2 '</font>';
                                
                                
$f fopen('bad.txt''a');
                                
flock($fLOCK_EX);
                                
fwrite($ftrim($url['host']).trim(@$url['path'])."\n");
                                
fclose($f);

                                break;
                            }
                    }
                
                if (
$font1 == '')
                    {                        
                        
$f fopen('good.txt''a');
                        
flock($fLOCK_EX);
                        
fwrite($ftrim($url['host'])."\n");
                        
fclose($f);
                        
                        echo (
$i 1).'/'.$vsego.' '.$font1.trim($url['host']).trim(@$url['path']).' - '.trim($header[0]).'<br>'."\n";flush();
                    }
                    else
                    {
                        echo (
$i 1).'/'.$vsego.' '.$font1.trim($url['host']).trim(@$url['path']).' - '.trim($header[0]).' - '.$location.$font2.'<br>'."\n";flush();
                    }
            }
            else
            {
                
$f fopen('noconnect.txt''a');
                
flock($fLOCK_EX);
                
fwrite($ftrim($url['host']).trim(@$url['path'])."\n");
                
fclose($f);
            }
        
        unset(
$urls[$i]);
        
        
$f fopen('urls.txt''w');
        
flock($fLOCK_EX);
        
fwrite($fimplode("\n"$urls));
        
fclose($f);
    }
?>
Урлы построчно в файл urls.txt, на выходе получится максимум 3 файла: good.txt (заголовок не содержал 404 или location), bad.txt (содержал), noconnect.txt (урлы, к которым не получилось сконнектиться).

Пример, если в urls.txt задать:
Код:
dimax.biz
dimax.biz/111.php
http://dfdsfsfsdfsdfsdfsdfsdfsdfsdf.com/
в браузере будет:
Код:
1/3 dimax.biz - HTTP/1.1 200 OK
2/3 dimax.biz/111.php - HTTP/1.1 404 Not Found - HTTP/1.1 404 Not Found
3/3 http://dfdsfsfsdfsdfsdfsdfsdfsdfsdf.com/ connection error
На папку, в которой будет данный скрипт, надо будет поставить права на запись (0777), чтобы скрипт смог создать файлы с результатами работы.
DimaX вне форума  
Старый 24.01.2013, 18:45   #8
mlu
Senior Member
 
Аватар для mlu
 
Регистрация: 17.02.2011
Сообщений: 153
Бабло: $26940
Отправить сообщение для mlu с помощью ICQ
По умолчанию

Для чекпарамс, если что. Поддержка многопоточности, прокси и прочее в комплекте:

Код:
			<http_status module_name="HTTP Status" enabled="1" check_interval="0" retries="10" use_proxies="0" results_mode="2" download_size="9999" parse_url="1">
				<request>
					<server address="%HOST%" port="%PORT%"/>
					<headers><![CDATA[GET %OBJECT% HTTP/1.1
Host: %HOST%
User-Agent: #$m$UA$m$#
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Connection: close

]]></headers>
					<checks>
						<check result="good" type="*"/>
					</checks>
				</request>
				<results>
					<regexps>
						<regexp name="%httpcode%" icase="1" format="$1" default=""><![CDATA[\n\r?^HTTP/1.\d\s+(\d\d\d)]]></regexp>
					</regexps>
					<fields delimiter_replace="\;">
						<field title="HTTP Status code" format="plain">%httpcode%</field>
					</fields>
				</results>
			</http_status>
mlu вне форума  
Старый 24.01.2013, 22:33   #9
Dexen
Member
 
Регистрация: 04.01.2013
Сообщений: 54
Бабло: $14785
По умолчанию

HTTP Answer
Dexen вне форума