[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é";
}
$erreur = true;
$message_erreur .= "
<P ALIGN=\"justify\">
<B>Problème lors de la connexion HTTP :</B>
<BR>« Impossible d'établir la connexion avec l'URL demandée => Erreur " . $errno . " (" . $errstr . ") »
</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;
}
?>