PHP:get_current_user()vs.exec(';whoami';)
问题的简短版本: 两者之间有什么区别PHP:get_current_user()vs.exec(';whoami';),php,apache,unix,xampp,chmod,Php,Apache,Unix,Xampp,Chmod,问题的简短版本: 两者之间有什么区别 获取当前用户()和exec('whoami') 问题的长版本: 我在Mac上的XAMPP本地主机上 我正在使用Apache,构建一个PHP 在 htdocs文件夹(在Linux+Apache的某些版本中为var/www) 我在玩数据库连接, 测试PDO::ERRMODE_异常,如下所述: 我得到了这个错误: 文件内容(PDOErrors.txt):无法打开流:权限 否认 所以我做了一些调查,似乎要解决这个问题,我需要将文件pdorerrors.txt的CHM
获取当前用户()代码>和exec('whoami')代码>
问题的长版本:
我在Mac上的XAMPP本地主机上李>
我正在使用Apache,构建一个PHP
在
htdocs文件夹(在Linux+Apache的某些版本中为var/www)李>
我在玩数据库连接,
测试PDO::ERRMODE_异常,如下所述:
我得到了这个错误:
文件内容(PDOErrors.txt):无法打开流:权限
否认
所以我做了一些调查,似乎要解决这个问题,我需要将文件pdorerrors.txt的CHMOD
设置更改为777
然而,我的问题是关于其他方面的。在这个过程中,我意识到我不清楚Apache、PHP和MySQL中的user
的概念
- PHP手册说,
get\u current\u user()
“获取当前PHP脚本的所有者的名称”
- PHP手册说,
exec('whoami')
返回“负责运行PHP/httpd进程的用户名”
- 当我使用
get\u current\u user()
时,我会得到我的firstnamelastname
,这是我在Mac上的帐户名
- 当我使用
exec('whoami')
时,我得到了守护进程
所以…
firstnamelastname
和daemon
之间的关系是什么
“当前PHP脚本的所有者”和“负责运行PHP/httpd进程的用户名”之间的关系是什么
谁需要权限才能写入pdorerrors.txt?它是firstnamelastname
还是daemon
李>
谁需要权限才能写入pdorerrors.txt?它是Apache还是PHP(或两者兼而有之)
类似unix的root
帐户的概念在这里的任何地方都有影响吗
编辑:我对其进行了更新,以反映我必须更改CHMOD设置的不是folderxyz。我必须更改文件pdorerrors.txt的设置
OP here:为了将来的参考,我在这里为Linux平台提出了一个平行的问题(附带一个关于发生了什么的直观解释):
get\u current\u user()
(应该)返回文件的所有者,在本例中为firstnamelastname
。但是,有报告指出,平台之间的此功能不一致。因此,我不相信它的结果daemon
是Apache运行的用户
PHP脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行ls-la
,以查找文件所属的用户和组
无论您使用哪个用户编辑脚本,都需要能够编写脚本,因此最有可能的情况是,firstnamelastname
(+rw
)
对于文件夹本身,对于守护进程
,您应该有+rx
(执行并读取),对于PHP文件,+r
(读取)。在我安装XAMMP时,他们通过将htdocs
中的所有内容设置为公共可读,从而daemon
可以读取它,但不能写入它
Mac有一个根帐户,通常拥有htdocs
或www
目录。它填补了传统unix根用户的角色
以下是有关文件所有者/组和进程所有者的一些信息:
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
,为public指定+rx
:
host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir
下面的Stackoverflow回答解释了为什么Apache用户在本地机器上显示为守护进程
,而在公共机器上显示为www data
(即,互联网上的任何人都可以使用)。我查看了本地机器中Apachehttpd.conf
文件中的设置,并且user
和group
设置确实被设置为daemon
: