问题的简短版本:
两者之间有什么区别 get_current_user();
和exec('whoami');
?
问题的长版本:
- 我在 Mac 上的 XAMPP 本地主机上。
- 我正在使用Apache,构建一个PHP基于文件夹中的网站(我们称之为文件夹XYZ(中的htdocs 文件夹(在某些版本的 Linux+Apache 中为 var/www(。
- 我正在玩数据库连接,测试 PDO::ERRMODE_EXCEPTION 描述如下:链接
我得到了这个错误:
file_put_contents(PDOErrors.txt(:无法打开流:权限否认。。。
所以我做了一些侦查,似乎要解决这个问题,我需要将文件 PDOErrors.txt 的CHMOD
设置更改为 777。
但是,我的问题是关于其他事情的。在这个过程中,我意识到我并没有清楚地理解Apache,PHP和MySQL中user
的概念。
- PHP
- 手册说
get_current_user()
"获取当前 PHP 脚本所有者的名称">链接 - PHP手册说
exec('whoami')
返回"拥有正在运行的php/httpd进程的用户名">链接 - 当我使用
get_current_user()
时,我得到了我的firstnamelastname
,这是我在Mac上的帐户名。 - 当我使用
exec('whoami')
时,我会得到daemon
。
所以。。。
firstnamelastname
和daemon
之间有什么关系?
">- 当前PHP脚本的所有者"和"拥有正在运行的php/httpd进程的用户名">之间是什么关系?
- 谁需要权限才能写信给PDOErrors.txt?是
firstnamelastname
还是daemon
? - 谁需要权限才能写信给PDOErrors.txt?是Apache还是PHP(或两者兼而有之(?
- 类似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()
(。
-
get_current_user()
(应该(返回文件的所有者,在这种情况下firstnamelastname
。但是,已报告存在此功能在平台之间不一致的问题。因此,我不会相信它的输出。daemon
是运行 Apache 的用户。 - PHP 脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行
ls -la
,以查找文件所属的用户和组。 - 无论您使用哪个用户编辑脚本,都需要能够编写脚本,因此最有可能
firstnamelastname
(+rw
(。 - 对于文件夹本身,您应该具有
+rx
(执行和读取(用于daemon
和PHP文件+r
(读取(。在我的 XAMMP 安装中,他们通过将htdocs
中的所有内容设置为公共可读来做到这一点,因此daemon
可以读取它,但不能写入它。 - Mac 有一个通常拥有
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
如果要使文件可由守护程序用户写入,则可以创建一个新文件夹,并使用组admin
将其命名为所有者(以便您也可以使用它(,并为用户和组提供+rwx
,并+rx
用于公共:
host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir