powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проверка существования ссылки
9 сообщений из 9, страница 1 из 1
Проверка существования ссылки
    #32571912
Charly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как осуществить проверку существования ссылки?
Может где-нить уже готовый скрипт есть?
...
Рейтинг: 0 / 0
Проверка существования ссылки
    #32571916
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Вопрос сформулируйте правильно. Что значит - существование ссылки?
...
Рейтинг: 0 / 0
Проверка существования ссылки
    #32571923
Charly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть к примеру ссылка - http://microsoft.com/windows.zip
Необходимо проверить действительно там есть такой файл или нет... Только чтобы это делал скрипт.
...
Рейтинг: 0 / 0
Проверка существования ссылки
    #32572207
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Так забери его оттуда. fopen , fsockopen .
...
Рейтинг: 0 / 0
Проверка существования ссылки
    #32607475
Charly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно более подробней?
...
Рейтинг: 0 / 0
Проверка существования ссылки
    #32607496
ashim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забирать нинада
а если он пару гигов весит

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

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

не хочет работать...:(
...
Рейтинг: 0 / 0
Проверка существования ссылки
    #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
Проверка существования ссылки
    #32607692
Charly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фух... огромное спасибо за разьяснение.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проверка существования ссылки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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