Page 1 sur 2

Redirection automatique

Posté : 06 avr. 2006, 10:26
par mafieud41
Bonjour,
j'aimerais faire un truc sympas mais ma metrise en php et hellas pas assez eleve...
je dispose d'un serveur personnel ( mon pc ) avec apache2 et php5 sous xp pro...
je dispose aussi d'un espace serveur reserve de mon FAI...
ce que je voudrais faire....
faire un index.php sur l'espace reserve de mon FAI afin que les visiteurs se connecte sur http://monFAI.fr .... le code que j'aimerais dans index.php devrais dire cela :
redirection automatique vers http://monadresseip ( donc mon pc )...
mais si http://monadresseip ( mon pc ) n'est pas connecte, redirection vers escuse.php ( ou html )(sur l'espace reserve du FAI ) qui dira pardon mais le serveur n'est pas connecte...
j'espere que ce n'est pas compliqué et que quelqu'un pourras m'aider....
merci d'avance

Posté : 06 avr. 2006, 11:15
par mario

Posté : 06 avr. 2006, 11:46
par mafieud41
merci...donc j'ai compris que c'etait sur cette page que cela se passe....ah oui, ais je presice que je n'etais pas tres doue en php....
comment dois je organiser mon script pour qu'il sois operationnel ? car je ne vois pas comment l'ecrire ( mon script )
merci d'avance

Posté : 06 avr. 2006, 11:58
par mario
te donner une solution toute faite ne t'aidera pas à comprendre :x
la fonction fsockopen te permet de tester un lien.

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);

* www.example.com c'est l'adresse à tester (http://ton_adresse_ip)
* 80 c'est le port (80 en général)
Si erreur il y a:
* $errno retourne un numéro d'erreur
* $errstr retourne un message d'erreur

* 30 c'est le nombre de seconde à attendre une réponse

$fp renverra TRUE (vrai) si ton site est disponible
dans ce cas là, tu utilises la fonction header() pour rediriger le visiteur
sinon tu affiches un message d'indisponibilité.

Posté : 06 avr. 2006, 12:38
par mafieud41
ok..alors, si je fait..

Code : Tout sélectionner

<?php @session_start(); $_SESSION['test_sessions'] = 'ok'; $fp = fsockopen("http://monip", 80, $errno, $errstr, 30); if $ft = true header("http://monip") if $ft = false header("./escuse.htlm") exit ?>
c'est ca ?

Posté : 06 avr. 2006, 12:42
par mario
<?php 
if ($fp = fsockopen("http://monip", 80, $errno, $errstr, 30)){
   // TON HEADER ICI  MONIP
   exit();
}
else
{
   // TON HEADER ICI EXCUSE
   exit();
}
?> 

as tu lu la doc header() ?

Posté : 06 avr. 2006, 12:59
par mafieud41
j'ai lu la doc en survolle....
bon voila j'ai relu plus attentivement....donc pour ma redirection j'utilise l'exemple n°4

Code : Tout sélectionner

<?php if ($fp = fsockopen("http://monip", 80, $errno, $errstr, 30)){ header("Location: http://monip") exit(); } else { header("Location: http://monfai.fr/escuse.html") exit(); } ?>
j'espere avoir bon cette fois ci....
par contre..la ou je n'ai pas compris c'est,
est ce que je dois imperativement utiliser "$_SERVER['HTTP_HOST'] " ainsi que " . rtrim(dirname($_SERVER['PHP_SELF']), '/\\') "
et enfin" . "/" . $relative_url); " " car si j'ai bien compris ce n'est pas necessaire ( mais la j'ai un doute ) *...

Posté : 06 avr. 2006, 13:02
par mario
<?php 
$home_ok = 'http://monip'; // adresse de chez toi
$home_ko = 'http://monfai.fr/escuse.html'; // adresse sur ton F.A.I

if ( $fp = fsockopen($home_ok, 80, $errno, $errstr, 30) ){
   header("Location: ".$home_ok); // redirection
   exit(); 
} 
else 
{ 
   header("Location: ".$home_ko); // redirection
   exit(); 
} 
?>
avec ça , ça devrait suffir :D

Posté : 06 avr. 2006, 13:27
par mafieud41
je te remercie de tes explications et de m'avoir fait bosser un peu ( cela ne peu que m'aider lol) et je vais les mettres en oeuvre dans l'apres midi......

Posté : 08 avr. 2006, 16:49
par mafieud41
bon, voila j'ai eu le temp de m'en occuper et....cela ne fonctionne pas, ni quand mon serveur et actif et encore moin quand il est inactif....j'ai fait quelques recherche, et j'ai trouve ca

Code : Tout sélectionner

<?php $server = 'http://monip:80'; define('TIMEOUT', 30); $tab = parse_url($server); $tab['port'] = isset($tab['port']) ? $tab['port'] : 80; if(false !== ($fp = fsockopen($tab['host'], $tab['port'], $errno, $errstr, TIMEOUT))) { fclose($fp); header('Location: ' . $server); } else { die('Erreur #' . $errno . ' : ' . $errstr); } ?>
ca fonctionne mais je n'ai pas de redirection quand mon serveur est inactif....si quelqu'un a une idee ?
merci d'avance

Posté : 08 avr. 2006, 17:57
par tomypunk
bon, voila j'ai eu le temp de m'en occuper et....cela ne fonctionne pas, ni quand mon serveur et actif et encore moin quand il est inactif....j'ai fait quelques recherche, et j'ai trouve ca

Code : Tout sélectionner

<?php $server = 'http://monip:80'; define('TIMEOUT', 30); $tab = parse_url($server); $tab['port'] = isset($tab['port']) ? $tab['port'] : 80; if(false !== ($fp = fsockopen($tab['host'], $tab['port'], $errno, $errstr, TIMEOUT))) { fclose($fp); header('Location: ' . $server); } else { die('Erreur #' . $errno . ' : ' . $errstr); } ?>
ca fonctionne mais je n'ai pas de redirection quand mon serveur est inactif....si quelqu'un a une idee ?
merci d'avance
y a un truc bizare au niveau de !== tu es sur de ta syntaxe !!!

Posté : 08 avr. 2006, 18:11
par mafieud41
cette derniere fonctionne ( je l'ai trouvé sur un site ) donc je pense que !== c'est bien...elle me renvoie bien sur mon serveur perso, mais ce qu'il manque c'est la redirection sur une page d'escuse quand mon serveur est eteint ou mon pc redemarre ou autre....et la...je suis perdu !

Posté : 08 avr. 2006, 18:13
par mafieud41
ah oui, a la place de "die...etc", j'ai remplacer la ligne par " header ("location : http://monfai/escuse.html").....et la plus rien ne fonctionne !

Posté : 08 avr. 2006, 19:38
par mafieud41
j'ai modifie le script comme ca

Code : Tout sélectionner

<?php $server = 'http://monip:80'; define('TIMEOUT', 5); $tab = parse_url($server); $tab['port'] = isset($tab['port']) ? $tab['port'] : 80; if(false != ($fp = fsockopen($tab['host'], $tab['port'], $errno, $errstr, TIMEOUT))) { fclose($fp); header('Location: ' . $server); } else { header("location : http://monfai/escuse.html/") } ?>
mon serveur perso allume => ok
mon serveur perso eteint=>voir ci dessous

Code : Tout sélectionner

Warning: fsockopen(): unable to connect to monip:80 in /var/www/free.fr/9/e/fai/index.php on line 10 Erreur #110 : Connection timed out
...si cela peut aider....quoi que je fasse en modif l'erreur 110 est toujours la !

Posté : 09 avr. 2006, 09:58
par mafieud41
non..personne !?!?
moi je pense de plus en plus au suicide !!!
c'est que personne ne m'aime ou que le probleme est trop chiant ?