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


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

问题的简短版本:

两者之间有什么区别 get_current_user();exec('whoami');

问题的长版本:

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

我得到了这个错误:

file_put_contents(PDOErrors.txt(:无法打开流:权限否认。。。

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

但是,我的问题是关于其他事情的。在这个过程中,我意识到我并没有清楚地理解Apache,PHP和MySQL中user的概念。

    PHP
  • 手册说get_current_user()"获取当前 PHP 脚本所有者的名称">链接
  • PHP手册说exec('whoami')返回"拥有正在运行的php/httpd进程的用户名">链接
  • 当我使用get_current_user()时,我得到了我的firstnamelastname,这是我在Mac上的帐户名。
  • 当我使用exec('whoami')时,我会得到daemon

所以。。。

  1. firstnamelastnamedaemon之间有什么关系?
  2. ">
  3. 当前PHP脚本的所有者"和"拥有正在运行的php/httpd进程的用户名">之间是什么关系?
  4. 谁需要权限才能写信给PDOErrors.txt?是firstnamelastname还是daemon
  5. 谁需要权限才能写信给PDOErrors.txt?是Apache还是PHP(或两者兼而有之(?
  6. 类似Unix的root帐户的概念是否在这里考虑在内?
<小时 />

编辑:我更新了它以反映它不是我必须更改CHMOD设置的文件夹xyz。我不得不更改文件 PDOErrors 的设置.txt

<小时 />

OP 在这里:为了将来参考,我在这里为 Linux 平台提出了一个平行的问题(附带对正在发生的事情的直观解释(:https://stackoverflow.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another

更新:该问题被删除,因为它被认为是这个问题的副本(尽管这是针对 Linux 平台的,而不是daemon我在做echo exec('whoami');后得到了www-data(。

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

运行进程与脚本不同。是的,这个过程是从剧本中出现的,但它不是一回事。该脚本由root拥有,但该过程由Apache接管,并以www-data的形式运行。

<小时 />

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

  1. get_current_user()(应该(返回文件的所有者,在这种情况下firstnamelastname。但是,已报告存在此功能在平台之间不一致的问题。因此,我不会相信它的输出。 daemon是运行 Apache 的用户。
  2. PHP 脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行ls -la,以查找文件所属的用户和组。
  3. 无论您使用哪个用户编辑脚本,都需要能够编写脚本,因此最有可能firstnamelastname(+rw(。
  4. 对于文件夹本身,您应该具有+rx(执行和读取(用于daemon和PHP文件+r(读取(。在我的 XAMMP 安装中,他们通过将htdocs中的所有内容设置为公共可读来做到这一点,因此daemon可以读取它,但不能写入它。
  5. Mac 有一个通常拥有 htdocswww目录的根帐户。它填补了传统 unix root 用户的角色。

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

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