phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   PHP  HTTP


Redirection si serveur Alive[26-08-2001]
Posté par Ju

Ce petit scrip sans prétention aucune me sert à drainer les visiteurs d'un de mes sites hébergé par Free vers ma machine sous ADSL.
Mais ne voulant perdre aucun visiteur, et vu que ma connexion n'est pas aussi fiable que celle de Proxad, j'ai crée ce petit script qui vérifie avant redirection que le serveur cible est 'vivant'.

Je n'ai jamais développé en PHP, il y a sûrement plus élégant ou plus propre, mais ça marche !

<META HTTP-EQUIV="expires" CONTENT="1">

<?
$fp
= fsockopen ("IP_DE_VOTRE_SERVEUR", 80, $errno, $errstr, 30);
if (!
$fp)
    echo
"<META HTTP-EQUIV='Refresh' CONTENT='0;URL =index.html'>";
else
    echo
"<META HTTP-EQUIV='Refresh' CONTENT='0;URL = http://VOTRE_SITE_WEB'>";
?>


Décomposer une adresse IP[22-08-2001]
Posté par Denis

Tout le monde connait la fonction parse_url() pour décomposer une url.

Mais si l'on veut faire de même pour une adresse IP obtenue à partir du $REMOTE_ADDR, ou tout simplement à partir de son numéro, il n'y a pas de fonction directe (du moins à ma connaissance) pour effectuer cette opération de décomposition.

Voici un petit script qui permet cela et ainsi de résoudre environ 90% des IP.

<?
$no_ip
= "195.6.160.242";
    
// détection de l'hôte
$hote = gethostbyaddr($no_ip);

// transformation de l'hôte en serveur web
$split = split(".", $hote);
$nb_split = count($split);
$domaine = $nb_split-2;
// demande longeur pour vérifier si domaine est > 2 lettres pour éviter
// les extensions du type .fr.st ou .tm.fr
$long = strlen($split[$domaine]);

if (
$long < 3)
{
    
$domaine = $nb_split-3;
    
$ext1 = $nb_split-2;
    
$ext2 = $nb_split-1;
    
$url = "www.".$split[$domaine].".".$split[$ext1].".".$split[$ext2];
    
$url = "[<a href='http://$url' target='_blank'>$url</a>]";
    if (
$split[$ext2] > 0)
    {
        
$url ="[NA]";
    }
}
else
{
    
$ext = $nb_split-1;
    
$url = "www.".$split[$domaine].".".$split[$ext];
    
$url = "[<a href='http://$url' target='_blank'>$url</a>]";
    if (
$split[$ext] > 0)
    {
        
$url ="[NA]";
    }
}

print
"no_ip = $no_ip<br>";
print
"url = $url<br>";
print
"hôte = $hote<br>";

?>

Et on obtient avec cet exemple :

no_ip = 195.6.160.242
url = [www.wanadoo.fr]
hôte = ca-ol-avignon-5-242.abo.wanadoo.fr


[1 commentaire]

Authentification simple[06-05-2001]
Posté par Raven

Un exemple de script d'authentification :

<?
function auth($PHP_SELF)
{
    
header( "WWW-authenticate:  basic realm='Admin'");
    
header( "HTTP/1.0  401  Unauthorized");
    echo
"
        <blockquote>
        Pour entrer dans cette section du site vous devez etre un usager
        authorise
        </blockquote>"
;
    exit;
}

// Il est possible d'aller chercher le username et le password dans une BD

if (!isset($PHP_AUTH_USER) ||
    
$PHP_AUTH_USER != "user" ||
    
$PHP_AUTH_PW != "pass")
{
    
auth($PHP_SELF);
}
else
{
  
/*mettre le traitement ici*/
}
?>


[2 commentaires]

Forcer le téléchargement d'un fichier[14-11-2000]
Posté par SeB

Si vous souhaitez forcer le téléchargement d'un fichier dans une page web au lieu de laisser le navigateur choisir s'il doit l'afficher directement (pour un fichier texte par exemple) vous pouvez utiliser la fonction header comme suit :

<?
  
// en-têtes
  
header("Content-Type: octet-stream");
  
header("Content-Length: ".filesize ($langfile) );
  
header("Content-Disposition: attachment; filename=$langfile");
  
  include(
$langfile);
?>


[5 commentaires]

Vous aimez les gateaux ?[10-11-2000]

Un exemple de script pour savoir si le client accepte les cookies :

<?
if ($action != "test") {
  
setcookie("MonCookie", "toto");
  
header("Location: ".$REQUEST_URI."?action=test");
  exit;
} else if (
$MonCookie == "toto") {
  echo
"J'adore les cookies !";
} else {
  echo
"Beurk, pas bon !";
}
?>


[2 commentaires]

Construire une requête POST[27-09-2000]
Posté par Perrich

Ce script permet d'envoyer une requête POST à une page mais ne fait rien de plus. C'est à dire qu'il ne connait pas le resultat de la requete et que l'autre page n'est pas affichée.

<?
// Les données envoyées en POST sous forme d'url
$data = 'txt1='.urlencode($txt1).'&txt2='.urlencode($txt2).'&id='.$id_session;

// monfichier.php3 est l'URL du fichier devant recevoir la requete POST
$message  = "POST /monfichier.php3 HTTP/1.0\r\n";
$message .= "Content-type: application/x-www-form-urlencoded\r\n";
$message .= "Content-length: ".strlen( $data )."\r\n";
$message .= "\r\n";
$message .= $data."\r\n";

// monserveur correspond au serveur qui doit recevoir la requete
$fd = fsockopen( "monserveur", 80 );
fputs($fd,$message);
fclose($fd);
?>


Rediriger proprement[14-09-2000]
Posté par Jérôme

Le problème souvent rencontré lors d'une redirection générée par php, par exemple avec une url extraite de mysql, est que les arguments nécessaires au script restent dans la barre d'adresse du navigateur...

Alors pour éviter la lecture d'une adresse barbare telle que index.php?a=redirection&id=458318, précisez à votre script de redirection ce header complet :

<?
  
// redirection
  
header("Request-URI: $url");
  
header("Content-Location: $url");
  
header("Location: $url");
?>


Lien valide ?[01-08-2000]
Posté par Idban Secandri

Voici un petit code PHP qui vous permet de vérifier qu'un lien est valide avant de l'afficher sur votre page. Attention, ce script peut rendre l'affichage de vos pages très long si celles-ci contiennent de nombreux liens !

<?
$site
= "www.phpinfo.net";

$actif = fsockopen($site, 80, &$errno, &$errstr, 30);

if (!
$actif) {
  echo
"<B>".$site." <FONT COLOR=\"red\">down !</FONT></B>n";
} else {
  echo
"<A HREF=\"http://".$site."\">".$site."</A>n";
}
?>


Envoyer autre chose que du HTML[21-05-2000]

On peut envoyer à un navigateur des données autres que du HTML en utilisant la fonction header() :

Exemples :

<?
  
// Envoyer du texte brut
  
header("Content-type: text/plain", 1);
  echo
"<B>Cette phrase n'apparaîtra pas en gras</B>";
?>

<?
  
// Provoquer une erreur du type 'Fichier non trouvé'
  
header("http/1.0 404 Not Found");
?>

<?
  
// Redirection
  
header("Location: http://www.phpinfo.net/");
?>

On peut aussi de cette manière envoyer des images (gif, jpeg, png, ...).

Synseo