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

时间:2015-02-16 19:16:48

标签: php apache unix xampp chmod

问题的简短版本:

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

问题的长版本:

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

      

    file_put_contents( PDOErrors.txt ):无法打开流:权限   否认...

    所以我做了一些调查,似乎要解决这个问题,我需要将文件 PDOErrors.txt CHMOD设置更改为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帐户的概念是否在这里因素?

    6. 编辑:我更新了这个以反映我不得不更改CHMOD设置的 folderxyz 。我必须更改文件 PDOErrors.txt

      的设置
      OP在这里:为了将来的参考,我在这里提出了一个Linux平台的并行问题(附带直观的解释,发生了什么):https://stackoverflow.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another

1 个答案:

答案 0 :(得分:10)

  1. get_current_user()(应该)返回文件的所有者,在这种情况下为firstnamelastname。然而,已经报道了这个功能在平台之间不一致的问题。因此,我不相信它的输出。 daemon是Apache正在运行的用户。
  2. PHP脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行ls -la,以查找该文件所属的用户和组。
  3. 您编辑脚本的用户需要能够编写脚本,因此最有可能firstnamelastname+rw)。
  4. 对于文件夹本身,您应该+rx(执行和读取)daemon和PHP文件+r(读取)。在我安装XAMMP时,他们通过将htdocs中的所有内容设置为公共可读来完成此操作,因此daemon可以读取它,但不能写入它。
  5. Mac有一个root帐户,通常拥有htdocswww目录。它充当了传统的unix root用户的角色。
  6. 以下是有关文件所有者/组和流程所有者的一些信息:

    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的所有者(因此您也可以使用它),然后给它{{ 1}}用于用户和组,公共+rwx

    +rx
相关问题