2011-02-08 20 views
6

何らかの理由で、私のサーバーでPHPを使用して動作するために基本認証を取得できません。私はマニュアルページの正確なコードを使用しています:PHPでの基本認証は無限ループになります

<?php 
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 
?> 

しかし、私はそれを実行すると、私は決してプロンプトを越えることはできません。

私はこの同じコードを他のサーバーに置くとうまくいきます。

これを引き起こしている可能性があるのは誰ですか?両方のサーバーはWAMPスタックで、Apacheはauth_basic_moduleを有効にしています。 PHP.iniファイルも実質的に同じです。

ヘッダーを見て、自分のユーザー名とパスワードを入力した後、「Authorization:Basic XXXXXX」ヘッダーが送信されています。

+0

2つの 'php.ini'ファイルで' diff'を試してみてください。何か不足している場合に備えてください。あなたはまた、Apacheのconfを比較することもできます。 – ocodo

+0

リファレンス:http://www.php.net/manual/en/features.http-auth.php –

答えて

9

これは、使用されるPHPインターフェイスによって異なります。環境変数PHP_AUTH_USERは、mod_phpとApacheが助けられた場合にのみ使用されます。

スクリプトから承認を初期化する場合は、HTTP_AUTHORIZATIONヘッダーを探して、デコードして自分で分割する必要があります。このコメントを見てください:http://www.php.net/manual/en/features.http-auth.php#94349

FastCGI設定またはsuexec呼び出しでは、環境変数にそのヘッダーがないことさえあります。セキュリティ上の予防措置として除外されています。一般的な問題を回避するには、.htaccessのルールを使用してヘッダを書き換えることである:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

したがって、それは$_SERVER["HTTP_Authorization"]として混在ケースで利用可能になります。

+0

私はあなたの応答を非常に参考にして答えにしています。なぜ(おそらくあなたがそうしているのか)わからないが、HTTP_AUTHORIZATION環境変数の名前をREDIRECT_HTTP_AUTHORIZATIONに変更していた。私はそれを確認し、HTTP_AUTHORIZATIONに名前を変更し、あなたが投稿したphpマニュアルコメントの指示に従ってコードを続行します。 – Brandon0

+0

@ Brandon0: 'REDIRECT_'プリフィックスは、PHPのFastCGI変種のもう一つの特殊性です。しかし、どのような状況でそれが行われ、どの設定がそれを引き起こすのかは決して分かりませんでした。 – mario

+0

@ Brandon0私は同じ問題を抱えていますが、解決するために実装した修正が実際には理解できませんでした。コードで行った変更を共有できますか? – DMEM

関連する問題