ホームページ >バックエンド開発 >PHPチュートリアル >$_SERVER['PATH'] 値に関連する問題

$_SERVER['PATH'] 値に関連する問題

WBOY
WBOYオリジナル
2016-06-13 13:29:41935ブラウズ

$_SERVER['PATH'] 値に問題があります
皆さん、こんにちは。
2 つのファイルがあります。1 つは

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><? phpinfo();?>


のみを含む phpinfo.php で、もう 1 つは
のみを含む test.php です。
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><? echo $_SERVER['PATH'];?>


コマンドラインで、phpinfo ページのユーザー/グループのユーザー名でログインしました
php test.php を実行しました

出力パスとブラウザで http://localhost/test.php を実行して出力されたパス
が内容と一致しています。理由を知っている人はいますか?

明らかに同じユーザー名を持っています。1 つはコマンドラインで実行され、もう 1 つは Web ページを使用して実行されます。
違いは、1 つは Apache 経由で実行され、もう 1 つはそうでないことです。 apache の httpd.conf でユーザー名を使用します。
出力パスが矛盾しているのはなぜですか?
見てみるのを手伝ってください、ありがとう! !


-----解決策---------
$_SERVER[' PATH ']
はオペレーティング システムの環境変数 PATH の値であり、当然同じマシン上では同じです。
------解決策------------------
分かりません。phpinfo のユーザー/グループは、実行されている Apache の実効ユーザー ID と実効ユーザー グループ ID を指します。

ああ。

1つはApacheアクセス、もう1つはApacheユーザーに切り込んでPhpを実行するものですよね?

Apache は root によって起動され、ポート 80 にバインドされるため、もちろん異なります。root ユーザーの PATH は、80 にバインドされた後、ユーザー/グループに分割されますが、知っておく必要があります。環境変数はシェルから継承され、シェル環境変数は Apache プロセスを開始するユーザーに基づいて決定され、Apache を開始するユーザーは root であるため、開始された Apache プロセスはシェル環境変数を継承し、sbin の場合、setuid は Apache でのバインド後にプロセス環境変数を変更しません。

php をユーザー/グループとして直接実行する場合、その理由は明らかです。一般ユーザーのシェル プロセスには sbin の PATH がないため、php インタプリタ プロセスには sbin の PATH 環境変数がありません。
------解決策---------
“PATH_TRANSLATED”
現在のファイルが保存されているファイルスクリプトの場所 システムのベース パス (ドキュメント ルートではありません)。これは、サーバーが仮想パスから実際のパスにイメージ化された後の結果です。

注: PHP 4.3.2 以降、Apache 2 SAPI モードの PATH_TRANSLATED は、Apache 1 のように暗黙的に割り当てられなくなりました。代わりに、Apache がこの値を生成しない場合、PHP が独自に値を生成し、その値を格納します。 SCRIPT_FILENAME サーバー定数。この変更は、PATH_INFO が定義されている場合にのみ PATH_TRANSLATED が存在するという CGI 仕様に準拠しています。

Apache 2 ユーザーは、httpd.conf で AcceptPathInfo On を使用して PATH_INFO を定義できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。