gpt4 book ai didi

PHP:get_current_user() 与 exec ('whoami' )

转载 作者:IT王子 更新时间:2023-10-29 00:05:45 27 4
gpt4 key购买 nike

问题的简短版本:

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

问题的长版:

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

我得到了这个错误:

file_put_contents(PDOErrors.txt): failed to open stream: Permissiondenied...

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

但是,我的问题是关于别的东西。在这个过程中,我意识到我对Apache、PHP 和MySQL 中user 的概念理解不清楚。

  • PHP 手册说get_current_user() “获取当前PHP 脚本所有者的名称” Link
  • PHP 手册说exec('whoami') 返回“拥有正在运行的php/httpd 进程的用户名” Link
  • 当我使用 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 帐户的概念是否考虑到了这里的任何地方?

编辑:我更新了它以反射(reflect)它不是我必须更改 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 我得到的是 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 本地主机)或 www-data(互联网服务器上的 Linux)并且我应该使用 exec('whoami') 来确定这一点,我不应该太在意 get_current_user() (可能应该命名为 get_current_owner())。

最佳答案

  1. get_current_user()(应该)返回文件的所有者,在本例中为 firstnamelastname。然而,已报告此功能在平台之间不一致的问题。因此,我不会相信它的输出。 daemon 是 Apache 运行的用户。
  2. 根据操作系统,PHP 脚本的所有者是拥有文件本身的用户。您可以在脚本所在的目录中运行 ls -la 以查找文件所属的用户和组。
  3. 与您一起编辑脚本的任何用户都需要能够编写脚本,所以最有可能的是 firstnamelastname (+rw)。
  4. 对于文件夹本身,您应该为 daemon 和 PHP 文件设置 +rx(执行和读取)+r(读)。在我安装 XAMMP 时,他们通过将 htdocs 中的所有内容设置为公共(public)可读来完成此操作,因此 daemon 可以读取它,但不能写入它。
  5. Mac 有一个 root 帐户,通常拥有 htdocswww 目录。它填补了传统 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 用于公共(public):

host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir

关于PHP:get_current_user() 与 exec ('whoami' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28548743/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com