web-dev-qa-db-ja.com

PHP:get_current_user()とexec( 'whoami')

質問の短いバージョン:

get_current_user();exec('whoami');の違いは何ですか?

質問の長いバージョン:

  1. MacのXAMPPローカルホストを使用しています。
  2. 私はApacheを使用しており、htdocs内のフォルダーにPHPベースのWebサイトを構築しています(それをfolderxyzと呼びましょう))フォルダ(Linux + Apacheの一部のフレーバーのvar/www)。
  3. 私はデータベース接続で遊んでいて、ここで説明されているPDO :: ERRMODE_EXCEPTIONをテストしていました: リンク

そして、私はこのエラーを受け取りました:

file_put_contents(PDOErrors.txt):ストリームを開くことができませんでした:アクセスが拒否されました...

だから私はいくつかの調査をしました、そしてこれを修正するために私はファイルPDOErrors.txtCHMOD設定を777に変更する必要があるようです。

しかし、私の質問は何か他のものについてです。このプロセスの間に、Apacheのuserの概念を明確に理解していないことに気づきました。 、PHP、およびMySQL。

  • PHPマニュアルには、get_current_user() "現在のPHPスクリプトの所有者の名前を取得する" リンク
  • PHPマニュアルによると、exec('whoami') "実行中のphp/httpdプロセスを所有するユーザー名"リンク
  • get_current_user()を使用すると、Macのアカウント名であるfirstnamelastnameが表示されます。
  • exec('whoami')を使用すると、daemonが得られます。

だから...

  1. firstnamelastnamedaemonの関係は何ですか?
  2. "現在のPHPスクリプト"の所有者と "実行中のphpを所有するユーザー名の関係は何ですか?/httpdプロセス "
  3. PDOErrors.txtに書き込むための許可が必要なのは誰ですか? firstnamelastnameまたはdaemonですか?
  4. PDOErrors.txtに書き込むための許可が必要なのは誰ですか? ApacheまたはPHP(または両方))ですか?
  5. UNIXのようなrootアカウントの概念はここのどこかに影響しますか?

編集:CHMOD設定を変更する必要があったのはfolderxyzではなかったことを反映するために、これを更新しました。ファイルの設定を変更する必要がありましたPDOErrors.txt


ここにOP:将来の参考のために、私はここにLinuxプラットフォームに関する平行した質問をしました(何が起こっているのかを直感的に説明します): https://stackoverflow.com/questions/31389892/why-is- the-output-www-data-in-one-case-and-root-in-another

15
  1. get_current_user()(should)は、ファイルの所有者を返します。この場合はfirstnamelastnameです。ただし、この機能がプラットフォーム間で一貫していないという問題が報告されています。そのため、私はその出力を信頼しません。 daemonは、Apacheが実行されているユーザーです。
  2. PHPスクリプトの所有者は、オペレーティングシステムに応じてファイル自体を所有するユーザーです。スクリプトが存在するディレクトリでls -laを実行して、ファイルが属するユーザーとグループを見つけることができます。 。
  3. スクリプトを編集しているユーザーがスクリプトを記述できる必要があるため、おそらくfirstnamelastname+rw)です。
  4. フォルダ自体については、daemonとPHPファイル、+rx(読み取り))に対して+r(実行して読み取る)が必要です。XAMMPのインストールでは、これを行うには、htdocs内のすべてをパブリック読み取り可能として設定します。したがって、daemonはそれを読み取ることはできますが、書き込むことはできません。
  5. Macには、通常htdocsまたはwwwディレクトリを所有するrootアカウントがあります。これは、従来のUNIXrootユーザーの役割を果たします。

ファイルの所有者/グループとプロセスの所有者に関する情報は次のとおりです。

Host:~$ ls -l /Applications/XAMPP/xamppfiles/htdocs
drwxr-xr-x 3 root admin  4096 2015-01-01 00:01 .
drwxr-xr-x 3 root admin  4096 2015-01-01 00:01 ..
-rw-r--r-- 1 firstnamelastname admin   189 2015-01-31 20:45 index.php

Host:~$ ps aux | grep httpd | head -n1    
daemon          45204   0.0  0.1  2510176  10328   ??  S    Tue11AM   0:01.38 /Applications/XAMPP/xamppfiles/bin/httpd -k start -E /Applications/XAMPP/xamppfiles/logs/error_log -DSSL -DPHP

デーモンユーザーがファイルを書き込み可能にしたい場合は、新しいフォルダーを作成し、グループadminの所有者として名前を付け(これも使用できます)、ユーザーに+rwxを指定します。およびグループ、公開用の+rx

Host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
Host:htdocs$ mkdir some_dir
Host:htdocs$ chmod 775 some_dir
10
SamT