Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:get_current_user()vs.exec(';whoami';)_Php_Apache_Unix_Xampp_Chmod - Fatal编程技术网

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
    (即,互联网上的任何人都可以使用)。我查看了本地机器中Apache
    httpd.conf
    文件中的设置,并且
    user
    group
    设置确实被设置为
    daemon