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

PHP: get_current_user() vs. exec('whoami')

问题的简短版本:

有什么区别 get_current_user();exec('whoami'); ?

问题的长版:

  1. 我在 Mac 上的 XAMPP 本地主机上。
  2. 我正在使用 Apache,构建一个 PHP 基于网站的文件夹(我们称之为 folderxyz) htdocs 文件夹(var/www 在某些 Linux+Apache 中)。
  3. 我正在玩弄数据库连接, 测试此处描述的 PDO::ERRMODE_EXCEPTION:Link

我得到了这个错误:

file_put_contents(PDOErrors.txt): failed to open stream: Permission denied...

所以我做了一些调查,似乎要解决这个问题,我需要将文件 PDOErrors.txtCHMOD 设置更改为 777。

但是,我的问题是关于其他的。在这个过程中,我意识到我对Apache中user的概念理解不清楚,PHP, 和 MySQL.

所以...

  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 平台提出了一个平行问题(附带对发生的事情的直观解释):

更新:那个问题被删除了,因为它被认为是这个问题的重复(尽管那是针对 Linux 平台的,而不是 daemon 我得到 www-data 完成后 echo exec('whoami'); ).

这是我在 Linux 论坛上提出这个问题后学到的:

the running process is different than the script. Yes, the process emerges from the script, but it's not the same thing. The script is owned by root, but the process is taken over by Apache and is run as www-data.


总体结论:我从这个过程中了解到 user 应该是 Apache daemon (Mac localhost) 或 www-data(互联网服务器上的 Linux)并且我应该使用 exec('whoami') 来确定这一点,我不应该太在意关于 get_current_user()(可能应该命名为 get_current_owner())。

  1. get_current_user()(应该)return 文件的所有者,在本例中为 firstnamelastname。然而,已报告此功能在平台之间不一致的问题。因此,我不会相信它的输出。 daemon 是 Apache 运行宁作为的用户。
  2. PHP脚本的所有者是根据操作系统拥有文件本身的用户。您可以 运行 ls -la 在脚本所在的目录中找到文件所属的用户和组。
  3. 与您一起编辑脚本的任何用户都需要能够编写脚本,因此很可能 firstnamelastname (+rw)。
  4. 对于文件夹本身,对于 daemon 和 PHP 文件,您应该有 +rx(执行和读取)(执行和读取)+r(读取)。在我安装 XAMMP 时,他们通过将 htdocs 中的所有内容设置为 public 可读来完成此操作,因此 daemon 可以读取它,但不能写入它。
  5. Mac 有一个 root 帐户,通常拥有 htdocswww 目录。它填补了传统 unix root 用户的角色。

以下是有关文件 owners/groups 和进程所有者的一些信息:

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 用于 public:

host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir