Como é um serviço público, estes links devem ser verificados constantemente, e para isto estão gravados em uma base de dados.
O script é este:
function testaURL( $url ){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
@curl_exec($ch);
$codigo_retorno = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return($codigo_retorno);
}
?>
<html>
<body>
<?
/*************************************************************
REFERÊNCIAS:
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* http://www.php.net/manual/pt_BR/function.curl-getinfo.php
*************************************************************/
$sql = "SELECT id_servico, nome_servico, link_servico, link_mais_info, sigla_orgao " .
"FROM csi_servico s, csi_orgao o " .
"WHERE (link_servico != '' OR link_mais_info != '') " .
"AND s.id_orgao=o.id_orgao " .
"AND id_servico_pai IS NULL " .
"ORDER BY nome_servico";
$rs = new query( $conn, $sql );
?>
<h2>Relatório de links e informações</h2>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<?
while( $rs->getrow() ) {
$codigo_link_servico = testaURL( $rs->field("link_servico" );
$codigo_link_mais_info = testaURL( $rs->field("link_mais_info" );
if( $codigo_link_servico >= 300 OR $codigo_link_mais_info >= 300 ) { // apenas 300 pois se retornar 200 significa que o link está ok
?>
<tr>
<td><span style="font-weight:'bold'">Nome do serviço:</span> <?=$rs->field("nome_servico"?></td>
</tr>
<tr>
<td><span style="font-weight:'bold'">Órgão:</span> <?=$rs->field("sigla_orgao"?></td>
</tr>
<tr>
<td><span style="font-weight:'bold'">Link para o serviço:</span> <?=$rs->field("link_servico"?></td>
</tr>
<tr>
<td><span style="font-weight:'bold'">Status de retorno:</span> <?=testaURL( $rs->field( "link_servico" ));?></td>
</tr>
<tr>
<td><span style="font-weight:'bold'">Link para mais informações: </span><?=$rs->field("link_mais_info"?></td>
</tr>
<tr>
<td><span style="font-weight:'bold'">Status de retorno: </span><?=testaURL( $rs->field( "link_servico" ));?></td>
</tr>
<tr><td> </td></td>
<?
}
} // while
?>
</table>
</body>
</html>
Quais os problemas?
- Alguns links estão devolvendo o status 200 (a página existe), ou seja, não passou no if( $codigo_link_servico >= 300 ...)
- Alguns links retornam status 400 (página não existe), sendo que basta colar a URL no navegador e a página abre
- Algumas páginas são redirecionadas, porém retornam status 404 (página não existe). Um exemplo é esta:
http://www.educacao.rs.gov.br
que é redirecionada para esta:
http://www.educacao.rs.gov.br/pse/html/educa.jsp
Bom, se fosse listar todos problemas, ficaria muito extenso. Na verdade queria saber por que retornam estes valores "errados", ou se não estão errados por que o servidor faz retornar o valor x mesmo que seja outro?
Moderadores, fiquem a vontade de enviar para sala de redes, caso seja necessários. Postei aqui pois tem o código PHP.
Editado: esqueci de menciona que, para testar, basta colocar uma url na função (já que vocês não tem minha tabela :-)), desta maneira:
testaURL( "http://www.google.com" );
testaURL( "http://lyon.procergs.com.br/" );
testaURL( "http://www.1wxyz.com.br/" );
testaURL( "https://direto1.procergs.rs.gov.br/direto/jsp/login.jsp" );
testaURL( "https://adwords.google.com/select/" );
testaURL( "https://give.redcross.org/" );