web-dev-qa-db-ja.com

$ _SERVER ["PHP_AUTH_USER"]と$ _SERVER ["PHP_AUTH_PW"]が設定されていないのはなぜですか?

始める前に、Stack Overflowを参照して、他の同様の質問を見つけたことを指摘したいと思います PHP_AUTH_USERが設定されていませんか? および HTTP Auth via PHP --PHP_AUTH_USERが設定されていませんか? -これらは、「サーバーAPI」が「CGI/FCGI」に設定されている場合、認証$ _SERVER変数が設定されないことを指摘していますが、私は'' phpinfo() ''が出力され、 '' Server API ''が '' Apache 2.0Handler ''に設定されます。

さて、次のような簡単なスクリプトがあります。

<?php
    echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"];
?>

...私は以下を介してリモートで呼び出しています:

wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php

...しかし、これは出力のみです:

Username: , Password:

また、PHP cURLを使用してスクリプトを呼び出し、次のように認証パラメーターを適切に設定してみました。

 curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword");

...しかし、上記と同じ出力が得られます。

私が間違っていることについて何か考えはありますか?おそらく、有効化/構成する必要がある他の何かがありますか?

7
Kosta Kontos

Irc.freenode.netの## phpでNaktibaldaの助けを借りて、ようやく答えを見つけました。

次のページで問題を要約します。 http://php.net/manual/en/features.http-auth.php

関連するビットを引用するには:

PHP 4.3.0以降、従来の外部メカニズムで認証されたページのパスワードを明らかにするスクリプトを誰かが作成するのを防ぐために、外部の場合、PHP_AUTH変数は設定されません。その特定のページで認証が有効になり、セーフモードが有効になります。それでも、REMOTE_USERを使用して外部認証されたユーザーを識別することができるため、$ _ SERVER ['REMOTE_USER']を使用できます。

.。

PHPは、AuthTypeディレクティブの存在を使用して、外部認証が有効かどうかを判断します。

5
Kosta Kontos

PHP-CGIの場合:

.htaccessにこれを追加します:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

スクリプトの最初に次を追加します。

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
12
Teddy

以前の提案を試しましたが、機能しませんでした。

CGIPassAuth On 

提案されたhtaccess追加のより最新のバージョンですが、それでも私には機能しませんでした、代わりに私は使用しました

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

(ルートhtaccessファイルにある必要があります)次にphpファイルにあります

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));

それでも問題が発生する場合は、サーバーの変数を確認することをお勧めします。データが別の変数に含まれている可能性があるため、基本的なもので始まるものを探しています。

1
Matt