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

tha*_*nce 15 php unix apache xampp chmod

问题的简短版本:

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

长版问题:

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

我收到了这个错误:

file_put_contents(PDOErrors.txt):无法打开流:权限被拒绝...

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

但是,我的问题是关于别的.在这个过程中,我意识到我并没有清楚地理解userApache,PHP和MySQL 的概念.

  • 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帐户的概念是否在这里?

编辑:我更新了这一点,以反映我不得不更改CHXOD设置的folderxyz.我不得不更改文件PDOErrors.txt的设置


OP在这里:为了将来的参考,我在这里提出了一个Linux平台的并行问题(附带直观的解释,发生了什么):https://stackoverflow.com/questions/31389892/why-is-the-output- WWW的数据功能于一身的病例和根合另一

Sam*_*amT 10

  1. get_current_user()(应该)返回文件的所有者,firstnamelastname在这种情况下.然而,已经报道了这个功能在平台之间不一致的问题.因此,我不相信它的输出.daemon是Apache正在运行的用户.
  2. PHP脚本的所有者是根据操作系统拥有文件本身的用户.您可以ls -la在脚本所在的目录中运行,以查找该文件所属的用户和组.
  3. 无论您正在编辑脚本的哪个用户都需要能够编写脚本,因此很可能是firstnamelastname(+rw).
  4. 对于文件夹本身,您应该为PHP文件(读取)+rx执行(执行和读取).在我安装XAMMP时,他们通过将所有内容设置为公共可读来完成此操作,因此可以读取它,但不能写入它.daemon+rhtdocsdaemon
  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
Run Code Online (Sandbox Code Playgroud)

如果您想让守护程序用户可以写入文件,您可以创建一个新文件夹,并将其命名为该组的所有者admin(因此您也可以使用它),并将其分配给+rwx用户和组,以及+rx公共:

host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir
Run Code Online (Sandbox Code Playgroud)