0

私は Robert Nixon (O'Reilly 2012) による PHP、MySQL、Javascript、および CSS の第 2 版に取り組んできました。WAMP サーバー (Zend サーバー) にデータベースをセットアップすることができました。

次に、ユーザー名とパスワードを認証する方法を示します。データベースに正常に追加されたパスワードでいくつかのユーザー名を作成することができました。データベースに接続し、SELECT クエリの結果を読み取り、それらをブラウザーにエコー出力したためです。

次に、ここで認証を使用してログインしようとすると:

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {....perform database query and compare username/password....}

私のユーザー名とパスワードはどれも機能しません。Firefox と IE の両方で、[認証が必要です] ウィンドウが再度表示されます。PHP コードが if ステートメントを通過していないため (if ステートメントの直前と直後にブラウザーに出力を送信しようとしました)、入力されたユーザー名とパスワードが PHP サーバーに渡されていないようです。

「localhost」が Firefox で特に認証されていることを確認しましたが、まだ成功していません。

どんな提案でも大歓迎です。

ゲイリー

4

1 に答える 1

1

見つかった!同じ例を試しているときに同じ問題が発生し (!)、php を cgi として実行すると問題が発生することがわかりました。php_sapi_name() を呼び出すことで検出できます。関数が 'cgi-fcgi' (Zend ではデフォルトのようです) を返す場合、基本認証は機能しません。Server API (CGI/FastCGI) の下の phpInfo にも同じ情報があります。

私の場合も、開発版にはこの問題がありますが、ライブ版にはありません (Web サイトでは Apache 2.0 Handler を使用しています)。ここまでで、cgi-fgci が検出された場合に認証を無効にするチェックを追加しました (localhost での認証は必要ありません) が、もちろん実行可能な代替手段を見つけたいと思います。

于 2012-12-26T23:26:10.340 に答える