2016-10-31 17 views
0

私はいくつかのPHPコードを書いています。私は、ユーザが来ているIPアドレスとIPアドレスを比較したいと思います。これはコードです:ファイルからデータを読み込んでログを保存するPHPコードのバグ

<!DOCTYPE html> 

<html> 
<?php 
// set date and hour 
$date=date('H:i:s d-m-Y'); 
// set ip user 
$ip=$_SERVER['REMOTE_ADDR']; 
// log text 
$ipLog="User entered at " . $date . " from ip address: " . $ip . ".\n"; 
// write log 
$firstLogFile="../../logs/firstLogIP.txt"; 
// ipcheck 
$myfile=fopen("../../logs/ownip.txt", "r") or die("Unable to read ownip file!"); 
$ownip=fgets($myfile); 
fclose($myfile); 
if($ip!=$ownip) { 
    $handleFirstLog=fopen($firstLogFile, 'a') or die("<br><br>Can't open logfile!<br><br>"); 
    fwrite($handleFirstLog, $ipLog); 
    fclose($handleFirstLog); 
} 
?> 

<head> 
</head> 

<body> 
    <div class="container"> 
     <div class="inner-container"> 
     <div> 
      <?php   
      if($ip!=$ownip) { 
       print "ips not equal: " . $ip . " " . $ownip; 
      } else { 
       print "ips equal"; 
      } 
      ?> 
     </div> 
     </div> 
    </div> 
<body> 

</html> 

ユーザーのIPアドレスが私のファイルに保存されているのIPアドレス(../../logs/ownip.txt)のそれと等しいしない場合、これがあるべきログファイル(firstLogIP.txt)に書き込まれ、画面上に「ips is equal」と表示されるはずです。

したがって、ipが等しい場合、ログは書き込まれず、画面に「ips等しい」と表示されます。

私のIPアドレスとユーザのアドレス($ _SERVER ['REMOTE_ADDR'])は同じですが、スクリプトはまだ「ips is equal」と表示され、IPアドレスが記録されます!

このバグの助けがありますか?どうも!!

+0

2つの変数の値を印刷するためにvar_dumpをコードに追加できますか? –

答えて

-1

ではなく

if($ip !== $ownip) {

してみてください。 説明:phpやjavascriptのようなスクリプト言語の中には、=====という2つの文字列比較メソッドがあります。 最初のものは、ほとんどの場合役に立たない高速のポインタ比較文字列です。実際には文字列の内容を比較するのではなく、2つの文字列がまったく同じソースから来た場合にのみ機能します。 =====に置き換えて、文字列の比較を行うことをお勧めします。あなたはもっと強い何かが必要な場合strcmp()を持っている...

+0

同じ結果を返しました。 – phySical

+0

だから多分多分try if(trim($ ip)!== trim($ ownip)){' – akiva

+1

あなたの説明はdouble対triple equalsです。二重等号は値を比較し、三重等価は値と型を比較す​​る。 '1 == '1'は' true'であり、 '1 === '1''は' false'です。 – Marty

関連する問題