Location: PHPKode > projects > WEB-PA > spider/include/funzioni_w3c.php
<?php
/*
Questo file contiene le funzioni per accedere ai validatori del w3c

analizza_w3c($url)					Funzione principale per analisi w3c di un sito
carica_validazione_w3c($url)		Torna l'html di risposta del w3c
analizza_resp_w3c($file)			Parsa la risposta del w3c e torna: state, encoding, doctype, risultato, 
											n_errori, n_warnings, n_info
*/
$validator_w3c_url="http://ice.ei.unibo.it/w3c-validator/";

function analizza_w3c($url) {
/* 
questa funzione valida un sito
*/
	$resp = carica_validazione_w3c($url);
	if (!$resp["state"]=="ok") {
		echo "impossibile contattare il validatore";
	} else {
		$validazione=analizza_resp_w3c($resp["file"]);
	}
	$validazione["state"]=$resp["state"];
	return $validazione;
}


function analizza_resp_w3c($file) {
/*
questa funzione si occupa di analizzare il responso del w3c
encoding
doctype
risultato
n_errori
n_warnings
n_info
*/
	$chunklist = array ();
	$chunklist = explode(">",$file);
	$result = array ();
	$n_errori = 0;
	$n_warnings = 0;
	$n_info = 0;
	
	$title="";//Quello che stiamo per trovare
	$nrighe=0;//Tra quante righe sarĂ 
	$trovato=0;//se abbiamo trovato qualche cosa
	$ctesta=0;//cartteri da eliminare in testa
	$ccoda=0;//cartteri da eliminare in coda

	foreach($chunklist as $chunk) {
//		echo htmlspecialchars($chunk)."<br />";
		if ($trovato==0) {//siamo a caccia di elementi nuovi

			if ($chunk=="Result:</th") {
				$title="risultato";
				$trovato=1;
				$nrighe=1;
				$ccoda=-4;
			}

			if (stristr($chunk, 'title="Character Encoding"') && stristr($chunk,'for="charset"')) {
				$title="encoding";
				$trovato=1;
				$nrighe=3;
				$ccoda=-4;
			}
	
			if (stristr($chunk, 'label') && stristr($chunk,'for="doctype"') && stristr($chunk,'title="Document Type"')) {
				$title="doctype";
				$trovato=1;
				$nrighe=3;
				$ccoda=-4;
			}
			if (stristr($chunk, 'Error</span')) {
				$n_errori++;
			}
			if (stristr($chunk, 'Warning</span')) {
				$n_warnings++;
			}
			if (stristr($chunk, 'Info</span')) {
				$n_info++;
			}
		} else {//abbiamo individuato un elemento ora vogliamo trovarne il valore
			if ($nrighe==0) {//siamo alla riga giusta
				$result[$title]=substr($chunk,$ctesta,$ccoda);
				$trovato=0;
				$title="";
				$ctesta=0;
				$ccoda=0;
			} else {
				$nrighe--;
			}
		}
	}
	$result["n_errori"]=$n_errori;
	$result["n_warnings"]=$n_warnings;
	$result["n_info"]=$n_info;
	return $result;
}

function carica_validazione_w3c($url) {
/* 
questa funzione si occupa di recuperare il responso del w3c
*/
	global $user_agent;
	global $validator_w3c_url;

	$urlparts = prepara_url($validator_w3c_url."check?uri=".$url);

	$all = "*/*";

	$request = "GET ".$urlparts['path']." HTTP/1.0\r\nHost: ".$urlparts['host'].$urlparts['portq']."\r\n\r\n";
	$fsocket_timeout = 30;
	if (substr($url, 0, 5) == "https") {
		$target = "ssl://".$urlparts['host'];
	} else {
		$target = $urlparts['host'];
	}

	$errno = 0;
	$errstr = "";

	$fp = @ fsockopen($target, $urlparts['port'], $errno, $errstr, $fsocket_timeout);

	if (!$fp) {
		$contents['state'] = "NOHOST";
		return $contents;
	} else {
		if (!fputs($fp, $request)) {
			$contents['state'] = "Cannot send request";
			return $contents;
		}
		$data = null;
		socket_set_timeout($fp, $fsocket_timeout);
		$status = socket_get_status($fp);
		while (!feof($fp) && !$status['timed_out']) {
			$data .= fgets($fp, 8192);
		}
		fclose($fp);
		if ($status['timed_out'] == 1) {
			$contents['state'] = "timeout";
		} else
			$contents['state'] = "ok";
		$contents['file'] = substr($data, strpos($data, "\r\n\r\n") + 4);
	}
	return $contents;	
}
?>
Return current item: WEB-PA