首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP: get_current_user()与exec(“whoami”)

PHP: get_current_user()与exec(“whoami”)
EN

Stack Overflow用户
提问于 2015-02-16 19:16:48
回答 1查看 24.5K关注 0票数 20

问题的简短版本:

get_current_user();exec('whoami');有什么区别?

问题的长篇版本:

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

我得到了一个错误:

file_put_contents(PDOErrors.txt):未能打开流:权限被拒绝.

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

,但是,我的问题是关于其他问题的,在这个过程中,我意识到我不清楚Apache和MySQL中user的概念。

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

所以.

  1. firstnamelastnamedaemon之间有什么关系?
  2. “当前PHP脚本的所有者”和“拥有正在运行的php/httpd进程的用户名”之间有什么关系?
  3. 谁需要许可才能写到PDOErrors.txt?是firstnamelastname还是daemon
  4. 谁需要许可才能写到PDOErrors.txt?是Apache还是PHP (或两者兼而有之)?
  5. 像unix一样的root帐户的概念在这里的任何地方都有影响吗?

编辑:我对此进行了更新,以反映我必须更改CHMOD设置的不是folderxyz。我必须更改文件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 on A internet server),我应该使用exec('whoami')来确定这一点,我不应该太在意get_current_user() (可能应该命名为get_current_owner())。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 19:53:11

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

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

代码语言:javascript
复制
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用于公共:

代码语言:javascript
复制
host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28548743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档