2016-05-23 8 views
1

私はちょうどPHPのifの非常に奇妙な動作に遭遇しました。これは、基本的なコードのわずか数行のですが、この問題を解決するか、バイパスする方法がわからない...これはコードです:phpの基本的な奇妙な振る舞い、どうすれば変更/解決できますか?

if($includepage!="page" && $includepage!="page_two"){ 

    header('Location: logout.php'); 

} 

私がしようとしているかどうかを確認するためにそれを使用し、あればそれはちょうどです「ページ」または「page_two」とは異なるページをナビゲートします。そうであれば、ユーザーをセッションを破棄してログアウトするページにリダイレクトします。変数$includepageは、page、page_two、page_three、page_fourなどの文字列値で正しく埋められています。これは問題の根本ではありません。私はすでに演算子を!==に変更しようとしましたが、問題は解決しません。しかし、奇妙な振る舞いは、リダイレクトは$ includepage == "page"や "page_two"でも実行されます。 PHP 5.3.2(5.6.5.5でテストできます)、バージョン5.3.2(テスト2つ、ローカル1つ、ウェブ1つ)で正しく動作します。

デバッグi>は5.3.2 PHPのバージョンであれば内部のエコーを置く場合、私は、非常に奇妙な何かを見つける必要があり、コード、次のように:私はページ内を移動する際

if($includepage!="page" && $includepage!="page_two"){ 
    echo ("if i enter here i'll do logout"); 
    //header('Location: logout.php'); 

} 

それが印刷されることはありません「ページ」または「 page_two "...そのエコーはすべて正常に動作しますが、元のバージョンに戻った場合:

if($includepage!="page" && $includepage!="page_two"){ 

     //echo ("if i enter here i'll do logout"); 
     header('Location: logout.php'); 

} 

ヘッダーロケートイオンは「ページ」または「ページ」でナビゲートすると実行されます。私はページ名を確認する方法も変更しようとしました。

$ArrayPages=array("page","page_two"); 

if(!in_array($includepage, $ArrayPages)){ 

    header('Location: logout.php'); 
} 

変更なし。私の目では、この行動は意味をなさない...理由を調査するために何ができるの?どのように私はそれを解決することができます?

これは作業5.3.2バージョンのphp_infoです:

session 
Session Support  enabled 
Registered save handlers files user 
Registered serializer handlers php_serialize php php_binary wddx 
Directive Local Value Master Value 
session.auto_start Off Off 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file no value no value 
session.entropy_length 0 0 
session.gc_divisor 100 100 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 4 4 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /Applications/MAMP/tmp/php /Applications/MAMP/tmp/php 
session.serialize_handler php php 
session.upload_progress.cleanup On On 
session.upload_progress.enabled On On 
session.upload_progress.freq 1% 1% 
session.upload_progress.min_freq 1 1 
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS 
session.upload_progress.prefix upload_progress upload_progress 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_strict_mode Off Off 
session.use_trans_sid 0 0 

EDIT

session 
Session Support  enabled 
Registered save handlers files user sqlite 
Registered serializer handlers php php_binary 

Directive Local Value Master Value 
session.auto_start Off Off 
session.bug_compat_42 On On 
session.bug_compat_warn On On 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file no value no value 
session.entropy_length 0 0 
session.gc_divisor 100 100 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 4 4 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /Applications/MAMP/tmp/php /Applications/MAMP/tmp/php 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 0 0 

これは奇妙作業5.6 PHPのバージョンのするphpinfoでセッションセクションです

大変申し訳ありませんが、おそらく私ははっきりしていません。私は$ includepageの値をifの前後に出力できます。私はそれが文字列を含んでいることを正確に知っています。文字列の値は、 "page"、 "page_two"、 "page_three" ...とすることができます。実際にナビゲートするページによって異なります。問題は、$ includepage == "page"の場合、リダイレクトはとにかく実行されますが、$ includepage == "page"とすると、逆の動作が予想されます。

+0

あなたの質問は不明です - 私はあなたの問題が実際に何かを理解することはできません。つまり、あなたは 'header'の前に' destroy 'することはできませんし、 'header(' Location:... ')'の後にスクリプトを終了させるか、そうでなければ終了させるべきです。 – ceejayoz

+0

値をダンプしてチェックしましたか? 'if($ includepage!=" page "&& $ includepage!=" page_two ")var_dump($ includepage);' – Kulvar

+0

if文の前に$ includepageの値を表示します。さらに、 'echo 'のような空白がないことを確認するために何かを印刷してください。#$ includepage#"; ' – kainaw

答えて

0

今日、システム全体の長時間の停止と再起動後、問題は消えているようですが、何が起こったのか分かりません。