始める前に、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");
...しかし、上記と同じ出力が得られます。
私が間違っていることについて何か考えはありますか?おそらく、有効化/構成する必要がある他の何かがありますか?
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ディレクティブの存在を使用して、外部認証が有効かどうかを判断します。
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)));
以前の提案を試しましたが、機能しませんでした。
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)));
それでも問題が発生する場合は、サーバーの変数を確認することをお勧めします。データが別の変数に含まれている可能性があるため、基本的なもので始まるものを探しています。