Tester la validité d'une URL

WRInaute occasionnel
Bonjour,

Pour tester si l'adresse d'un site marche, j'utilise la fonction ci-dessous :
Code:
	$fp = @fopen($url, "r"); 
	if (!$fp)
	{ 
		return FALSE; 
	}
	else
	{
	  	fclose($fp); 
		return TRUE; 
	}
Je pense qu'il y a plus simple et moins lourd, car selon l'état du serveur, le script est plus ou moins lent à tester.

Qu'en pensez-vous ?

Merci d'avance, Guillaume.
 
WRInaute accro
Ta fonction est trés lente, il faut passer par une socket et lire seulement l'entête qui se trouve avant le code html. Si le code http renvoyé est 200, alors la page est disponible.

Code:
<?php
    function url_validate( $link )
    {        
        $url_parts = @parse_url( $link );

        if ( empty( $url_parts["host"] ) ) return( false );

        if ( !empty( $url_parts["path"] ) )
        {
            $documentpath = $url_parts["path"];
        }
        else
        {
            $documentpath = "/";
        }

        if ( !empty( $url_parts["query"] ) )
        {
            $documentpath .= "?" . $url_parts["query"];
        }

        $host = $url_parts["host"];
        $port = $url_parts["port"];
        // Now (HTTP-)GET $documentpath at $host";

        if (empty( $port ) ) $port = "80";
        $socket = @fsockopen( $host, $port, $errno, $errstr, 30 );
        if (!$socket)
        {
            return(false);
        }
        else
        {
            fwrite ($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n");
            $http_response = fgets( $socket, 22 );
            
            if ( ereg("200 OK", $http_response, $regs ) )
            {
                return(true);
                fclose( $socket );
            } else
            {
//                echo "HTTP-Response: $http_response<br>";
                return(false);
            }
        }
    }
?>
 
WRInaute occasionnel
Bonjour,

Merci pour cette réponse KOogar.
Par contre :
Code:
            if ( ereg("200 OK", $http_response, $regs ) )
            {
                return(true);
                fclose( $socket );
            }
Ne faut-il pas faire le fclose avant le return ?
 
Discussions similaires
Haut