PHP:get_current_user() 与 exec('whoami')
Posted
技术标签:
【中文标题】PHP:get_current_user() 与 exec(\'whoami\')【英文标题】:PHP: get_current_user() vs. exec('whoami')PHP:get_current_user() 与 exec('whoami') 【发布时间】:2015-04-17 09:29:57 【问题描述】:问题的简短版本:
两者有什么区别
get_current_user();
和 exec('whoami');
?
问题的长版本:
-
我在 Mac 上的 XAMPP 本地主机上。
我正在使用 Apache,构建一个 php
基于网站的文件夹(我们称之为 folderxyz)
htdocs 文件夹(在某些 Linux+Apache 版本中为 var/www)。
我在玩数据库连接,
测试此处描述的 PDO::ERRMODE_EXCEPTION:Link
我得到了这个错误:
file_put_contents(PDOErrors.txt):打开流失败:权限 拒绝...
所以我做了一些调查,似乎要解决这个问题,我需要将文件 PDOErrors.txt 的 CHMOD
设置更改为 777。
但是,我的问题是关于其他的。 在此过程中,我意识到我并不清楚 Apache、PHP 和 mysql 中的user
的概念。
get_current_user()
“获取当前 PHP 脚本的所有者的名称” Link
PHP 手册说exec('whoami')
返回“拥有正在运行的 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
的设置此处的操作:为了将来参考,我在此处针对 Linux 平台提出了一个并行问题(附带对正在发生的事情的直观解释):https://***.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another
【问题讨论】:
我想添加以供将来参考,以下 *** 答案解释了为什么 Apache 用户在本地机器上显示为daemon
,而在公共机器上显示为 www-data
(即,可由互联网上的任何人)。我查看了本地计算机中 Apache httpd.conf
文件中的设置,user
和 group
设置确实设置为 daemon
: ***.com/questions/26063556/…
【参考方案1】:
get_current_user()
(应该)返回文件的所有者,在本例中为 firstnamelastname
。然而,据报道,此功能在平台之间不一致。因此,我不相信它的输出。 daemon
是运行 Apache 的用户。
PHP 脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行ls -la
来查找文件所属的用户和组。
无论您正在编辑脚本的哪个用户都需要能够编写它,所以很可能是firstnamelastname
(+rw
)。
对于文件夹本身,您应该有+rx
(执行和读取)daemon
和PHP 文件+r
(读取)。在我安装 XAMMP 时,他们通过将 htdocs
中的所有内容设置为公共可读来完成此操作,因此 daemon
可以读取它,但不能写入它。
Mac 有一个 root 帐户,该帐户通常拥有 htdocs
或 www
目录。它填补了传统 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
如果您想使守护程序用户可写入文件,您可以创建一个新文件夹并将其命名为组@987654335@ 的所有者(这样您也可以使用它),并给它+rwx
用户和组,+rx
公开:
host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir
【讨论】:
以上是关于PHP:get_current_user() 与 exec('whoami')的主要内容,如果未能解决你的问题,请参考以下文章