A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Weblinks com checagem

Sab

18

Out

2008


00:00

(2 votos, média 5.00 de 5) 


Bem, se a função foi chamada, então precisamos colocá-la em algum lugar. Coloquei-a no final do arquivo. Observe que a função leva como parâmetro o objeto $item. Isto é necessário para que possamos acessar alguns atributos deste objeto como, por exemplo, a URL.

renova ) { if( $item->status == 0 ) { echo ''; } else { echo ''; } return; } $url = $item->url; if( ( !eregi( "http", $url ) ) && ( !eregi( "https", $url ) ) ){ $url = 'http://' . $url; } $urlArray = parse_url( $url ); $timeout = 7; $return['code'] = ''; $return['status'] = ''; if( $urlArray['scheme'] == 'http' ) { $urlArray['port'] = 80; $sock = @fsockopen( $urlArray['host'], $urlArray['port'], $errnum, $errstr, $timeout ); } else if( $urlArray['scheme'] == 'https' ) { $urlArray['port'] = 443; $sock = @fsockopen( $urlArray['host'], $urlArray['port'], $errnum, $errstr, $timeout ); } else { echo ''; } if( !isset( $sock ) || $sock === false || $sock == "" ) { echo ''; } // HTTP use HEAD Method getHTTP($sock, $urlArray, 'HEAD', $return, $timeout); @fclose( $sock ); if ($return['code'] == '405') { // HTTP "HEAD" não aceito ou em Error => usar método "TRACE" $sock = @fsockopen($urlArray['host'], $urlArray['port'], $errnum, $errstr, $timeout ); // Definir espera em segundos para proteger o socket getHTTP($sock, $urlArray, 'TRACE', $return, $timeout); @fclose( $sock ); } if (!$return['code'] || $return['code'] >= '400' ) { // HTTP nada retornou com "HEAD" ou "TRACE" // ou método não permitido => usar método "GET" $sock = @fsockopen($urlArray['host'], $urlArray['port'], $errnum, $errstr, $timeout); // Espera em segundos para proteger o socket getHTTP($sock, $urlArray, 'GET', $return, $timeout); @fclose( $sock ); } if (!$return['code']) { $return['code'] = '404'; $return['status'] = "Página não encontrada Erro 404 (No code returned)"; } $model =& JModel::getInstance('category', 'weblinksmodel'); if( $return['code'] != '200' ) { echo ''; $model->setCheck( $item->id, 0 ); } else { echo ''; $model->setCheck( $item->id, 1 ); } }

Esta função chama uma outra, a function getHTTP. Coloquei-a logo a seguir no final do mesmo arquivo:

function getHTTP(&$sock, &$urlArray, $HTTPmethod, &$return, $timeout=7) { $return['code'] = ''; $return['status'] = ''; $urlquery = (isset($urlArray['query'])) ? "?".$urlArray['query'] : ""; $useragent = "Mozilla/5.0 (compatible; weblinks 1.5.7; Link Checker)"; $dump = $HTTPmethod . " " . $urlArray['path'] . $urlquery. " HTTP/1.1\r\n"; $dump .= "User-Agent: " . $useragent . "\r\n"; $dump .= "Host: " . $urlArray['host'] . "\r\n"; $dump .= "Connection: close\r\n\r\n"; if( !@fputs( $sock, $dump ) ) { $result['code'] = '404'; return; } stream_set_timeout( $sock, $timeout ); $status = socket_get_status( $sock ); $str = '-vazio-'; $closed = false; while( ( !feof($sock) ) && ( !$status['timed_out'] ) && ( $str != "" ) && ( !$closed ) ) { $str = @fgets( $sock, 1024 ); $status = socket_get_status( $sock ); if (eregi("^http/[0-9]+.[0-9]+ ([0-9]{3})", $str) ) { $return['code'] = trim(eregi_replace("^http/[0-9]+.[0-9]+ ([0-9]{3}) [a-z ]*", "\\1", $str)); if ( substr(strtoupper($return['code']),0,4) == 'HTTP') { // Código começa com "HTTP" => há apenas código HTTP sem descrição. $return['code'] = trim(eregi_replace("^http/[0-9]+.[0-9]+ ([0-9]{3})[a-z ]*", "\\1", $str)); } // Manter apenas os primeiros 3 dígitos... $return['code'] = substr($return['code'],0,3); $return['status'] = $str; } if (eregi("^Content-Type: ", $str)) { $return['contentType'] = trim(eregi_replace("^Content-Type: ", "", $str)); } if (eregi("^User-Agent: ", $str)) { $return['userAgent'] = trim(eregi_replace("^User-Agent: ", "", $str)); } if (eregi("^Location: ", $str)) { $return['location'] = trim(eregi_replace("^Location: ", "", $str)); } if (eregi("^Content-Length: ", $str)) { $return['contentLength'] = trim(eregi_replace("^Content-Length: ", "", $str)); } $closed = ( $HTTPmethod == "GET" && ( $str == "\r\n" && ($return['code']=="200" || $return['code']=="404")) ); } } ?>

Informações adicionais