07 março 2012

Verificar se a URL é válida com PHP

Essa função é muito útil para quem quer verificar se a URL existe no servidor remoto.
Basicamente ela instancia uma conexão na porta 80 e faz um GET na url, se retornar HTTP code 200 a url é válida.
Precisei dela um dia desses pois carregava fotos de produtos de um cliente em outro servidor dele, daí coloquei um diretório virtual das fotos no Apache e faço o teste para ver se a foto existe antes de escrevê-la na página.

Exemplo de carga da função


vUrlImagens = "http://177.1.1.1:81/imagens/";
$vFoto1= $vUrlImagens.'Foto1.jpg';

if (valida_url($vFoto1)) {

echo '<img src=" '.$vFoto1.' " width="174" height="197" border="1" alt="Foto1" />';
}



A função:
Copie o código abaixo, retirando os números de linha e bom proveito!!

0| <?php
 1|
 2|
 3|
 4| // função      valida_url
 5| // retorno       boolean
 6| // parametro    string
 7| // desc           Verifica se a URL é valida (HTTP-Code: 200)
 8|
 9|
10| function valida_url$link )
11| {        
12|    $partes_url = @parse_url$link );
13|
14|    if ( empty( $partes_url["host"] ) ) return( false );
15|
16|    if ( !empty( $partes_url["path"] ) )
17|    {
18|        $path_documento $partes_url["path"];
19|    }
20|    else
21|    {
22|        $path_documento "/";
23|    }
24|
25|    if ( !empty( $partes_url["query"] ) )
26|    {
27|        $path_documento .= "?" $partes_url["query"];
28|    }
29|
30|    $host $partes_url["host"];
31|    $porta $partes_url["port"];
32|    // faz um (HTTP-)GET $path_documento em $host";
33|
34|
35|    if (empty( $porta ) ) $porta "80";
36|    $socket = @fsockopen$host$porta$errno$errstr30 );
37|    if (!$socket)
38|    {
39|        return(false);
40|    }
41|    else
42|    {
43|        fwrite ($socket"HEAD ".$path_documento." HTTP/1.0\r\nHost: $host\r\n\r\n");
44|        $http_response fgets$socket22 );
45|
46|        $pos null;       
47|        $pos strpos($http_response"200 OK");
48|        if ( !empty($pos) )
49|        {
50|            fclose$socket );       
51|            return(true);
52|        } 
53|        else
54|        {
55|            //echo "HTTP-Response: $http_response<br>";
56|            return(false);
57|        }
58|    }
59| }
60| ?>

Nenhum comentário:

Postar um comentário