PHP:get_current_user() 与 exec('whoami')
PHP: get_current_user() vs. exec('whoami')
问题的简短版本:
有什么区别
get_current_user();
和 exec('whoami');
?
问题的长版:
- 我在 Mac 上的 XAMPP 本地主机上。
- 我正在使用 Apache,构建一个 PHP
基于网站的文件夹(我们称之为 folderxyz)
htdocs 文件夹(var/www 在某些 Linux+Apache 中)。
- 我正在玩弄数据库连接,
测试此处描述的 PDO::ERRMODE_EXCEPTION:Link
我得到了这个错误:
file_put_contents(PDOErrors.txt): failed to open stream: Permission
denied...
所以我做了一些调查,似乎要解决这个问题,我需要将文件 PDOErrors.txt 的 CHMOD
设置更改为 777。
但是,我的问题是关于其他的。在这个过程中,我意识到我对Apache中user
的概念理解不清楚,PHP, 和 MySQL.
- PHP手册说
get_current_user()
"获取当前PHP脚本的所有者的名称"Link
- PHP 手册说
exec('whoami')
returns “拥有 运行 php/httpd 进程的用户名” Link
- 当我使用
get_current_user()
时,我得到 firstnamelastname
,这是我在 Mac 上的帐户名。
- 当我使用
exec('whoami')
时,我得到 daemon
。
所以...
firstnamelastname
和daemon
有什么关系?
- “当前 PHP 脚本的所有者” 和 “拥有 运行 的用户名之间的关系是什么php/httpd 进程 ?
- 谁需要权限才能写入 PDOErrors.txt?是
firstnamelastname
还是 daemon
?
- 谁需要权限才能写入 PDOErrors.txt?是 Apache 还是 PHP(或两者)?
- 类 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()
)。
get_current_user()
(应该)return 文件的所有者,在本例中为 firstnamelastname
。然而,已报告此功能在平台之间不一致的问题。因此,我不会相信它的输出。 daemon
是 Apache 运行宁作为的用户。
- PHP脚本的所有者是根据操作系统拥有文件本身的用户。您可以 运行
ls -la
在脚本所在的目录中找到文件所属的用户和组。
- 与您一起编辑脚本的任何用户都需要能够编写脚本,因此很可能
firstnamelastname
(+rw
)。
- 对于文件夹本身,对于
daemon
和 PHP 文件,您应该有 +rx
(执行和读取)(执行和读取)+r
(读取)。在我安装 XAMMP 时,他们通过将 htdocs
中的所有内容设置为 public 可读来完成此操作,因此 daemon
可以读取它,但不能写入它。
- Mac 有一个 root 帐户,通常拥有
htdocs
或 www
目录。它填补了传统 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
问题的简短版本:
有什么区别
get_current_user();
和 exec('whoami');
?
问题的长版:
- 我在 Mac 上的 XAMPP 本地主机上。
- 我正在使用 Apache,构建一个 PHP 基于网站的文件夹(我们称之为 folderxyz) htdocs 文件夹(var/www 在某些 Linux+Apache 中)。
- 我正在玩弄数据库连接, 测试此处描述的 PDO::ERRMODE_EXCEPTION:Link
我得到了这个错误:
file_put_contents(PDOErrors.txt): failed to open stream: Permission denied...
所以我做了一些调查,似乎要解决这个问题,我需要将文件 PDOErrors.txt 的 CHMOD
设置更改为 777。
但是,我的问题是关于其他的。在这个过程中,我意识到我对Apache中user
的概念理解不清楚,PHP, 和 MySQL.
- PHP手册说
get_current_user()
"获取当前PHP脚本的所有者的名称"Link - PHP 手册说
exec('whoami')
returns “拥有 运行 php/httpd 进程的用户名” Link - 当我使用
get_current_user()
时,我得到firstnamelastname
,这是我在 Mac 上的帐户名。 - 当我使用
exec('whoami')
时,我得到daemon
。
所以...
firstnamelastname
和daemon
有什么关系?- “当前 PHP 脚本的所有者” 和 “拥有 运行 的用户名之间的关系是什么php/httpd 进程 ?
- 谁需要权限才能写入 PDOErrors.txt?是
firstnamelastname
还是daemon
? - 谁需要权限才能写入 PDOErrors.txt?是 Apache 还是 PHP(或两者)?
- 类 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()
)。
get_current_user()
(应该)return 文件的所有者,在本例中为firstnamelastname
。然而,已报告此功能在平台之间不一致的问题。因此,我不会相信它的输出。daemon
是 Apache 运行宁作为的用户。- PHP脚本的所有者是根据操作系统拥有文件本身的用户。您可以 运行
ls -la
在脚本所在的目录中找到文件所属的用户和组。 - 与您一起编辑脚本的任何用户都需要能够编写脚本,因此很可能
firstnamelastname
(+rw
)。 - 对于文件夹本身,对于
daemon
和 PHP 文件,您应该有+rx
(执行和读取)(执行和读取)+r
(读取)。在我安装 XAMMP 时,他们通过将htdocs
中的所有内容设置为 public 可读来完成此操作,因此daemon
可以读取它,但不能写入它。 - Mac 有一个 root 帐户,通常拥有
htdocs
或www
目录。它填补了传统 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