Afficher host sous la forme (---.fai.fr)

noubs
Invité n'ayant pas de compte PHPfrance

11 juin 2005, 12:58

Bonjour,

j'ai un problème de "Parse error" dans un script...

Je ne connais pas l'architecture du php, j'ai "bidouillé" sans succès un script existant.

Mon forum récupère l'ip du posteur, et comme il n'y pas d'espace membre, je voulais afficher l'host du posteur, afin de l'identifier.

Donc je voulais affichier l'host "raccourci" à coté du nom du posteur.

Pour cela j'ai essayé de bidouiller un script présent dans le forum "Phorum".

Pour le moment j'en suis ici :
<?
require("forum.conf.php");

$request = mysql_db_query($dbForum,"SELECT * FROM $tblForum WHERE remoteAddr='$remoteAddr'");
while ($res = mysql_fetch_array($request)){ 

if($res["remoteAddr"]){
elseif(is_numeric(str_replace(".", "", $res["remoteAddr"]))){
$res["remoteAddr"]=substr($res["remoteAddr"],0,strrpos($res["remoteAddr"],'.')).'.---';
} else {
$res["remoteAddr"]="---".strstr($res["remoteAddr"], ".");
}
?>
Il y aurait une erreur sur la ligne 8, mais n'y connaissant rien je suis boqué, je solicite donc votre aide.

Merçi beaucoup.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

11 juin 2005, 13:04

En indentant tu y verras beaucoup plus clair :
<?

require("forum.conf.php");

$request = mysql_db_query($dbForum,"SELECT * FROM $tblForum WHERE remoteAddr='$remoteAddr'");

while ($res = mysql_fetch_array($request)) { // Début d'un "tant que"
    if($res["remoteAddr"]) { // Début d'un "si"
        elseif(is_numeric(str_replace(".", "", $res["remoteAddr"]))) { // Début d'un "sinon-si"
            // Où est le "si" qui correspond au "sinon" de mon "sinon-si" ?
            $res["remoteAddr"]=substr($res["remoteAddr"],0,strrpos($res["remoteAddr"],'.')).'.---';
        } // Fin du "sinon-si"
        else { // Début d'un "sinon"
            $res["remoteAddr"]="---".strstr($res["remoteAddr"], ".");
        } // Fin du "sinon"
    // Où est la fin du "si" ?
// Où est la fin du "tant que" ?

?>
De toute évidence il y a un "elseif" sans aucun "if" qui corresponde, un "while" est ouvert mais jamais fermé, de même que le premier "if".
Le plus simple quand on ne connait pas un langage reste d'écrire l'algo (en français, ou dans un langage quelconque) et de traduire dans ce langage ensuite ;)

noubs
Invité n'ayant pas de compte PHPfrance

11 juin 2005, 13:10

Merci pour cette réponse rapide :)

noubs
Invité n'ayant pas de compte PHPfrance

11 juin 2005, 16:52

Bonjour, je suis arrivé à faire à peu près ce que je voulais mais pas encore totalement :(

Cette commande passe :
<? echo $res["remoteAddr"]="---".strstr($res["remoteAddr"], "."); ?>
Celle là non :
<? echo gethostbyaddr($res["remoteAddr"])="---".strstr($res["remoteAddr"], "."); ?>
Le premier script affiche l'ip, mais je préfèrerais qu'il affiche l'host.

J'ai essayé de le modifier pour qu'il affiche l'host à partir de l'ip ( 2eme script ) mais ca ne marche pas.

Comment faire ? Merci :)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

11 juin 2005, 22:02

Que veux tu afficher exactement ? D'où sort ce script ?

Eléphant du PHP | 199 Messages

11 juin 2005, 22:07

Tu veux afficher l'adresse de la même facon que mIRC :?: :?: :?:
Les 2 font la paire : coder ET commenter :wink:

noubs
Invité n'ayant pas de compte PHPfrance

12 juin 2005, 10:46

Que veux tu afficher exactement ? D'où sort ce script ?
Je veux afficher l'host de la personne qui poste, sans afficher son ip directe.

Je suis chez Free, donc j'aimerais que quand je poste à coté il y ait : (---.fbx.proxad.net)

Le script
<? echo $res["remoteAddr"]="---".strstr($res["remoteAddr"], "."); ?> 
Il vient du Forum php Phorum.
Tu veux afficher l'adresse de la même facon que mIRC :?: :?: :?:
Voila :) exactement ce que je veux.

Merci

Eléphant du PHP | 199 Messages

12 juin 2005, 11:13

Avec les fonction de php je ne pense pas que c'est possible.
Mais en utilisiant system("tracert $ip"); je pense que tu peux arriver a faire ce que tu veux. Ensuite tu analyses la chaine de retournée.
string system ( string command [, int return_var])
Les 2 font la paire : coder ET commenter :wink:

noubs
Invité n'ayant pas de compte PHPfrance

12 juin 2005, 11:44

Merci, mais je ne m'y connais pas, et si Phorum le fait c'est que c'est faisable en php :(

dans la page read il y a ça :
        // mask host if not a moderator
        if(empty($PHORUM["user"]["admin"]) && (empty($PHORUM["DATA"]["MODERATOR"]) || !PHORUM_MOD_IP_VIEW)){
            if($PHORUM["display_ip_address"]){
                if($row["moderator_post"]){
                    $row["ip"]=$PHORUM["DATA"]["LANG"]["Moderator"];
                } elseif(is_numeric(str_replace(".", "", $row["ip"]))){
                    $row["ip"]=substr($row["ip"],0,strrpos($row["ip"],'.')).'.---';
                } else {
                    $row["ip"]="---".strstr($row["ip"], ".");
                }

            } else {
                $row["ip"]=$PHORUM["DATA"]["LANG"]["IPLogged"];
            }
        }
et dans post il y a le meme script plus un autre placé avant :
            // do this here so we can call check field against it.
            if ($PHORUM["dns_lookup"]) {
                $REMOTE_ADDR = @gethostbyaddr($_SERVER["REMOTE_ADDR"]);
            } else {
                $REMOTE_ADDR = $_SERVER["REMOTE_ADDR"];
            } 
et l'autre qui est identique :
    // mask host if not a moderator or admin
    if(empty($PHORUM["user"]["admin"]) && (empty($PHORUM["DATA"]["MODERATOR"]) || !PHORUM_MOD_IP_VIEW)){
        if($PHORUM["display_ip_address"]){
            if($message["moderator_post"]){
                $message["ip"]=$PHORUM["DATA"]["LANG"]["Moderator"];
            } elseif(is_numeric(str_replace(".", "", $message["ip"]))){
                $message["ip"]=substr($message["ip"],0,strrpos($message["ip"],'.')).'.---';
            } else {
                $message["ip"]="---".strstr($message["ip"], ".");
            }

        } else {
            $message["ip"]=$PHORUM["DATA"]["LANG"]["IPLogged"];
        }
    }
Alors comme je l'ai dit plus haut, j'arrive à afficher l'ip de l'auteur de message en la masquant, grace à la commande :
<? echo $res["remoteAddr"]="---".strstr($res["remoteAddr"], "."); ?> 
Mais ce que je veux, c'est que le script affiche l'host de l'auteur du message grace à l'ip contenue dans la base de donee.

Comme sous Phorum... mais je bloque :/ Personne aurait une idée ?

Merci :)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

12 juin 2005, 11:56

Je pense que ce genre de modifs on ne devrait s'y attaquer que quand on a le niveau, c'est à dire qu'on a soit-même fait quelques scripts. Je vais te donner des bouts de code en sachant que tu ne les comprendras pas, ce qui m'embête un peu :?

Quand tu fais ceci :
<? echo $res["remoteAddr"]="---".strstr($res["remoteAddr"], "."); ?>
En plus d'afficher "---.xxx.yyy.zzz" comme IP, tu modifies la variables $res["remoteAddr"] qui ne vaut plus l'IP de la personne, mais l'IP cachée, donc forcement gethostbyaddr ne peut plus rien en faire.

Donc déjà, il ne faut faire qu'afficher, pas modifier :
<? echo "---".strstr($res["remoteAddr"], "."); ?>
Ensuite pour afficher l'hote, ceci devrait suffire :
<? 
    $remoteHost = @gethostbyaddr($res["remoteAddr"]);
    echo $remoteHost ? $remoteHost : "HoteIntrouvable";
?>

noubs
Invité n'ayant pas de compte PHPfrance

12 juin 2005, 12:13

Merci naholyr :)

noubs
Invité n'ayant pas de compte PHPfrance

12 juin 2005, 13:55

Arg, j'avais la solution en utilisant REMOTE_HOST au lieu de REMOTE_ADDR, mais ca passe pas REMOTE_HOST sur freesurf :(

noubs
Invité n'ayant pas de compte PHPfrance

12 juin 2005, 14:40

CA MARCHE JE SUIS TROP CONTENT :D

MERCI ENCORE naholyr ^^
<?
$res["remoteHost"] = @gethostbyaddr($res["remoteAddr"]);
echo "---".strstr($res["remoteHost"], ".");
?>
ca marche super :D

Merci bcp :)