[Web1901] informations serveurs

Yeba www at yeba.org
Mar 24 Juin 21:58:17 CEST 2003


Le 24/06/2003 10:02, phil (phil89 at altern.org) a écrit :

> ben si .. comment tu-fais ? hein ?

J'utilise le fichier en pièce jointe. J'y ai rassemblé les fonctions dont
j'ai besoin pour traiter les URL. Dans ton cas (renvoi des en-têtes HTTP),
depuis ta page, tu n'as qu'à appeler la fonction <renvoyer_entetes_http()>
(après avoir fait un 'include' sur le fichier de fonctions, évidemment), qui
appellera elle-même la fonction <ouvrir_connexion_http()>. Donc, a priori,
il n'y a que 2 fonctions qui t'intéressent : tu peux virer les autres si ça
te chante.

@ +

Serge

-------------- section suivante --------------
<?php



// #########################################
// #########################################
// ####                                 ####
// ####     FONCTIONS DE TRAITEMENT     ####
// ####        DES DONNEES HTTP         ####
// ####                                 ####
// #########################################
// #########################################
// #### Date MaJ : 13/06/2003           ####
// #### Auteur : Serge Brondino         ####
// #########################################
// #########################################

// #### tester_url_dispo		TEST DE LA DISPONIBILITE D'UNE URL
// #### ouvrir_connexion_http	OUVERTURE D'UNE CONNEXION HTTP
// #### renvoyer_statut_http	RENVOI DU STATUT HTTP D'UNE URL
// #### renvoyer_url_vraie		RENVOI DE LA "VRAIE" URL, SI LE CODE DU STATUT EST 302 OU 405
// #### renvoyer_entetes_http	RENVOI DES EN-TETES HTTP D'UNE URL
// #### renvoyer_contenu_url	RENVOI DU CONTENU D'UNE URL HORS EN-TETES HTTP



// #############################################################################
// ####
// #### TEST DE LA DISPONIBILITE D'UNE URL
// ####
// #############################################################################
// #### Parametres a fournir :
// #### 	$url				url a tester
// #### Resultat :
// #### 	$url_dispo			vrai ou faux
// #############################################################################

function tester_url_dispo ( $url ) {

	$pointeur = false;
	$url_dispo = false;

	$pointeur = @fopen ( $url, "rb" );
	@fclose ( $pointeur );

	if ( $pointeur != "" ) {
		$url_dispo = true;
	}

	return $url_dispo;

}



// #############################################################################
// ####
// #### OUVERTURE D'UNE CONNEXION HTTP
// ####
// #############################################################################
// #### Parametres a fournir :
// #### 	$url				url cible
// #### 	$methode			methode HTTP a utiliser (HEAD, GET, POST , TRACE )
// #### 	$erreurs			gerer les erreurs ? (true/false)
// #### Parametres globaux :
// #### 	$erreur				indicateur d'erreur (true/false)
// #### 	$message_erreur		message d'erreur
// #### Resultat :
// #### 	$connexion			pointeur de la connexion
// #############################################################################

function ouvrir_connexion_http ( $url, $methode = "HEAD", $erreurs = true ) {

	global $erreur, $message_erreur;
	$delai = 10;													// Secondes
	$errno = 0;
	$errstr = "";
	$path = "";
	$host = "";
	$connexion = false;
	$port_ok = false;
	$tab_url = array ();

	$tab_url = parse_url ( $url );

	while ( list ( $cle, $valeur ) = each ( $tab_url ) ) {
		if ( $cle == "port" ) {
			$port_ok = true;
		}
	}
	if ( ! $port_ok ) {
		$tab_url["port"] = 80;
	}

	$path = ( $tab_url["path"] ) ? $tab_url["path"] : "/";

	if ( $tab_url["query"] ) {
		$path = $path . "?" . $tab_url["query"];
	}

	// Ouverture de la connexion
	$connexion = @fsockopen ( $tab_url["host"], $tab_url["port"], $errno, $errstr, $delai );

	if ( $connexion ) {

		$host = $tab_url["host"];

		// Envoi de la requete
		@fwrite ( $connexion, "$methode $path HTTP/1.0\r\nHost: $host\r\n\r\n" );

	} elseif ( $erreurs ) {

		if ( $errno == 0 ){
			$errstr = "Serveur non trouv&eacute;";
		}

		$erreur = true;
		$message_erreur .= "
			<P ALIGN=\"justify\">
			<B>Probl&egrave;me lors de la connexion HTTP&nbsp;:</B>
			<BR>&#171;&nbsp;Impossible d'&eacute;tablir la connexion avec l'URL demand&eacute;e =&gt;&nbsp;Erreur " . $errno . " (" . $errstr . ")&nbsp;&#187;
			</P>
";

	}

	return $connexion;

}



// #############################################################################
// ####
// #### RENVOI DU STATUT HTTP D'UNE URL
// ####
// #############################################################################
// #### Parametres a fournir :
// #### 	$url				url cible
// #### 	$erreurs			gerer les erreurs ? (true/false)
// #### Resultat :
// #### 	$statut				code du statut HTTP
// #############################################################################

function renvoyer_statut_http ( $url, $erreurs = true ) {

	$statut = 0;
	$tampon = "";
	$connexion = false;
	$tempo = array ();

	$connexion = ouvrir_connexion_http ( $url, "HEAD", $erreurs );

	if ( $connexion ) {

		$tampon = @fgets ( $connexion, 1028 );

		// Extraction du code
		$tempo = explode ( " ", $tampon );
		$statut = $tempo[1];

		@fclose ( $connexion );

	}

	return $statut;

}



// #############################################################################
// ####
// #### RENVOI DE LA "VRAIE" URL, SI LE CODE DU STATUT EST 302 OU 405
// ####
// #############################################################################
// #### Parametres a fournir :
// #### 	$url				url cible
// #### 	$basique			ne pas re-essayer (true/false)
// #### 	$methode			methode HTTP a utiliser (HEAD, GET, POST , TRACE )
// #### 	$erreurs			gerer les erreurs ? (true/false)
// #### Resultat :
// #### 	$url				url corrigee
// #############################################################################

function renvoyer_url_vraie ( $url, $basique = true, $methode = "HEAD", $erreurs = true ) {

	$statut = 0;
	$tampon = "";
	$tmp = "";
	$connexion = false;
	$tempo = array ();
	$allowed = array ();

	$connexion = ouvrir_connexion_http ( $url, $methode, $erreurs );

	if ( $connexion ) {

		$tampon = @fgets ( $connexion, 1028 );

		// Extraction du code
		$tempo = @explode ( " ", $tampon );
		$statut = $tempo[1];

		// Y a-t-il une redirection ?

		switch ( $statut ) {

			case '302':

				do {

					// Chercher la nouvelle adresse

					$tampon = @fgets ( $connexion, 4028 );

					if ( eregi ( "LOCATION:", $tampon ) ) {
						$tmp = substr ( strstr ( $tampon, ":" ), 1 );
						// Est-elle relative ?
						if ( strpos ( $tmp, '/' ) == 1 ) {
							$tmp = $url . substr ( $tmp, 2 );
						}

						$url = renvoyer_url_vraie ( trim ( $tmp ), $simple );

						break;

					}
				} while ( $tampon );

				break;

			case '405':

				if ( ! $basique ) {

					do {
						$tampon = @fgets ( $connexion, 4028 );
						if ( eregi ( "ALLOW:", $tampon ) ) {
							$tmp = trim ( substr ( strstr ( $tampon, ":" ), 1 ) );
							$allowed = explode ( ",", $tmp );
							$url = renvoyer_url_vraie ( $url, $simple, $allowed[0] );
							break;
						}
					} while ( $tampon );

				}
				break;

		}

		@fclose ( $connexion );

		return $url;

	}

}



// #############################################################################
// ####
// #### RENVOI DES EN-TETES HTTP D'UNE URL
// ####
// #############################################################################
// #### Parametres a fournir :
// #### 	$url				url cible
// #### 	$erreurs			gerer les erreurs ? (true/false)
// #### Resultat :
// #### 	$entetes			En-tetes
// #############################################################################

function renvoyer_entetes_http ( $url, $erreurs = true ) {

	$tampon = "";
	$header = "";
	$connexion = false;

	$connexion = ouvrir_connexion_http ( $url, "HEAD", $erreurs );

	if ( $connexion ) {

		do {
			$tampon = @fgets ( $connexion, 1028 );
			$entetes .= $tampon;
		} while ( $tampon );

		@fclose ( $connexion );

	}

	return $entetes;

}



// #############################################################################
// ####
// #### RENVOI DU CONTENU D'UNE URL HORS EN-TETES HTTP
// ####
// #############################################################################
// #### Parametres a fournir :
// #### 	$url				url cible
// #### 	$mode				type de contenu a renvoyer
// #### 		"brut"			tel quel (aucun traitement)
// #### 		"html"			pour affichage du code HTML
// #### Resultat :
// #### 	$contenu			contenu de l'URL
// #############################################################################

function renvoyer_contenu_url ( $url, $mode = "brut" ) {

	$contenu = implode ( "", file ( $url ) );

	if ( $mode = "html" ) {
		$contenu = htmlspecialchars ( $contenu );
	}

	return $contenu;

}



?>