私はちょうど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"とすると、逆の動作が予想されます。
あなたの質問は不明です - 私はあなたの問題が実際に何かを理解することはできません。つまり、あなたは 'header'の前に' destroy 'することはできませんし、 'header(' Location:... ')'の後にスクリプトを終了させるか、そうでなければ終了させるべきです。 – ceejayoz
値をダンプしてチェックしましたか? 'if($ includepage!=" page "&& $ includepage!=" page_two ")var_dump($ includepage);' – Kulvar
if文の前に$ includepageの値を表示します。さらに、 'echo 'のような空白がないことを確認するために何かを印刷してください。#$ includepage#"; ' – kainaw