Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проверка существования ссылки / 9 сообщений из 9, страница 1 из 1
22.06.2004, 15:27
    #32571912
Charly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
Как осуществить проверку существования ссылки?
Может где-нить уже готовый скрипт есть?
...
Рейтинг: 0 / 0
22.06.2004, 15:28
    #32571916
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
Вопрос сформулируйте правильно. Что значит - существование ссылки?
...
Рейтинг: 0 / 0
22.06.2004, 15:30
    #32571923
Charly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
Есть к примеру ссылка - http://microsoft.com/windows.zip
Необходимо проверить действительно там есть такой файл или нет... Только чтобы это делал скрипт.
...
Рейтинг: 0 / 0
22.06.2004, 16:55
    #32572207
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
Так забери его оттуда. fopen , fsockopen .
...
Рейтинг: 0 / 0
16.07.2004, 10:35
    #32607475
Charly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
А можно более подробней?
...
Рейтинг: 0 / 0
16.07.2004, 10:43
    #32607496
ashim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
забирать нинада
а если он пару гигов весит

use LWP::Simple;
use HTTP::Status;

if (is_success(head("http://microsoft.com/windows.zip"))) {
...
}
...
Рейтинг: 0 / 0
16.07.2004, 10:49
    #32607514
Charly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
А что такое
use LWP::Simple;
use HTTP::Status;
?

не хочет работать...:(
...
Рейтинг: 0 / 0
16.07.2004, 10:56
    #32607536
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
Чарли,
это код на Perl-е.

Для начала немного теории.
Все существуют. Просто разные ссылки возвращают разные статус-коды и/или разный контент.
Какие коды в каких случаях возвращаются - читай в RFC по HTTP. Хотя насколько мне известно эти правила не всегда соблюдаются.

Чтобы получить статус код достаточно послать HEAD-запрос.
Для этого можно использовать готовую функцию (взята из pear::http) :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
     /**
    * Sends a "HEAD" HTTP command to a server and returns the headers
    * as an associative array. Example output could be:
    *    Array
    *    (
    *        [response_code] => 200          // The HTTP response code
    *        [response] => HTTP/1.1 200 OK   // The full HTTP response string
    *        [Date] => Fri, 11 Jan 2002 01:41:44 GMT
    *        [Server] => Apache/1.3.20 (Unix) PHP/4.1.1
    *        [X-Powered-By] => PHP/4.1.1
    *        [Connection] => close
    *        [Content-Type] => text/html
    *    )
    *
    * @param string $url A valid url, for ex: http://pear.php.net/credits.php
    * @return mixed Assoc array or PEAR error
    *
    * @author Tomas V.V.Cox <cox@idecnet.com>;
    */ 
    function head($url)
    {
        $purl = parse_url($url);
        $port = (isset($purl['port'])) ? $purl['port'] :  80 ;
        $fp = fsockopen($purl['host'], $port, $errno, $errstr,  10 );
        if (!$fp) {
            /// эту строку можно заменить на какой-нибудь exit;
            return PEAR::raiseError("HTTP::head Error $errstr ($erno)"); 
        }
        $path = (!empty($purl['path'])) ? $purl['path'] : '/';

        fputs($fp, "HEAD $path HTTP/1.0\r\n");
        fputs($fp, "Host: " . $purl['host'] . "\r\n");
        fputs($fp, "Connection: close\r\n\r\n");

        $response = rtrim(fgets($fp,  4096 ));
        if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|", $response, $status)) {
            $headers['response_code'] = $status[ 1 ];
        }
        $headers['response'] = $response;

        while ($line = fgets($fp,  4096 )) {
            if (!trim($line)) {
                break;
            }
            if (($pos = strpos($line, ':')) !== false) {
                $header = substr($line,  0 , $pos);
                $value  = trim(substr($line, $pos +  1 ));
                $headers[$header] = $value;
            }
        }
        fclose($fp);
        return $headers;
    }
...
Рейтинг: 0 / 0
16.07.2004, 11:50
    #32607692
Charly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования ссылки
Фух... огромное спасибо за разьяснение.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проверка существования ссылки / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]