Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Test URL-a przez PHP (środowisko linux)
ahold
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.05.2009

Ostrzeżenie: (0%)
-----


Witam,

Potrzebuję funkcję która sprawdzi czy podany adres URL jest poprawny, i czy nie odpowiada pod nim 404.

Wziąłem taki kod, na oko wydaje się poprawny

Kod
function is_valid_url ( $url )
{
        $url = @parse_url($url);

        if ( ! $url) {
            return false;
        }

        $url = array_map('trim', $url);
        $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
        $path = (isset($url['path'])) ? $url['path'] : '';

        if ($path == '')
        {
            $path = '/';
        }

        $path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : '';

        if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) )
        {
            if ( PHP_VERSION >= 5 )
            {
                $headers = get_headers("$url[scheme]://$url[host]:$url[port]$path");
            }
            else
            {
                $fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);

                if ( ! $fp )
                {
                    return false;
                }
                fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
                $headers = fread ( $fp, 128 );
                fclose ( $fp );
            }
            $headers = ( is_array ( $headers ) ) ? implode ( "\n", $headers ) : $headers;
            return ( bool ) preg_match ( '#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers );
        }
        return false;
}


Próbuję go oszukać:

$adres=('http://onet');


Kod
if(!is_valid_url($adres))
{
    print('Nie można pobrąć pliku, podany adres URL jest nie poprawny...');
    exit();
}
else
{
    print('Poprawny');
}


Kretyn daje się jednak zrobić w konia i wywala
Cytat
Poprawny


Jakiś pomysł ?
Nie ma takiej domeny, więc nie powinno prawa zwrócić true :/

Ten post edytował ahold 23.06.2009, 14:13:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ahold
post
Post #2





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.05.2009

Ostrzeżenie: (0%)
-----


Ustawiłem na 2 sekundy. Ale nie mogę znaleźć nigdzie serwera który odpowiada dłużej.

Przeleciałem wszystkie typu
- google
- wp
- hoga

Działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Wrzuciłem jeden fake serwer który ma awarie (całkowicie padł, apache dogorywa ) - po 2 sekundach ładnie zwrociło fail.
Dokładnie to o co mi chodziło.

Nie przewidziałem takiej sytuacji.

1) sprawdzam IP -> domena - ip
2) curlem

No i wrzuciłem mu domene gdzie leżał apache. Ale mówił że działa. Czyli nie dawał drop-a połączenia. Bo przy dropie CURL wywala od razu fail że nie połączył się na 80 dziesiątym.

Pierwszy test przeszło, zabrało się za drugi.
I po 30 sekundach po mojej stronie timeout.
Naewt nie zalogowało do bazy danych awarii.

Za pierwszym razem aż serwer rebootłem, jak zobaczyłem interialkę.
Nie przewidziałem takiego scenariusza. Człowiek się uczy całe życie.

A co do kompresji, myślisz że można (zapisać stronę www do pliku, dać prawy kompresuj jako tag.gz) i porównać ?
Będzie taki sam stopień kompresji, jak przy module mod_gzip ?

Chciałem z Ciekawości, ile zaoszczędził bym przy moich witrynach, no a nie będę teraz rebootować apache, wyczerpałem dzienny limit restartów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Ten post edytował ahold 24.06.2009, 18:09:10
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 16:09