要获取进程所有者的用户名(而不是文件所有者),可以使用
<?php
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
get_current_user — 获取当前 PHP 脚本所有者的名称
此函数没有参数。
返回用户名作为字符串。
示例 #1 get_current_user() 示例
<?php
echo 'Current script owner: ' . get_current_user();
?>
上面的示例将输出类似于
Current script owner: SYSTEM
要获取进程所有者的用户名(而不是文件所有者),可以使用
<?php
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
?>
在 Centos(Red Hat Linux 的克隆版)上,此指令给出文件的 OWNER(指令 'chown' 中的第一个参数)。它不揭示文件的 GROUP。
get_current_user() 不会揭示当前进程用户的身份。
参见:posix_getuid() - 返回当前进程的实际用户 ID
get_current_user() 返回的信息似乎取决于平台。
在 Windows NT 上使用作为 CGI 与 IIS 5.0 一起运行的 PHP 5.1.1,get_current_user() 返回运行脚本的进程的所有者,而不是脚本本身的所有者。
测试起来很简单 - 创建一个包含以下内容的文件
<?php
echo get_current_user();
?>
然后通过浏览器访问它。我得到:IUSR_MACHINE,Windows 上的 Internet Guest Account,这肯定不是脚本的所有者。
进一步测试 Windows 和 Linux 上的行为...
在 Linux 上,此函数确实返回脚本的所有者。如果您想知道 PHP 正在运行的用户名,可以使用 POSIX 函数(或带有 'whoami' 的 shell_exec)。
在 Windows 上,此函数返回 PHP 正在运行的用户名。对于 IIS(IUSR)和 Apache(SYSTEM - 来自 Apache 是 Windows 上的服务这一事实)都是如此。
Windows 上的行为实际上很有用,因为 POSIX 函数不可用。如果您需要在 Windows 上找到脚本的所有者,也许最好的方法是使用 shell_exec 来使用 dir /Q,并解析它。
由于这仅返回文件所有者,而不是实际运行脚本的用户,因此在 Linux 中的另一种方法是
<?php
$current_user = trim(shell_exec('whoami'));
?>
如果您想获取执行当前 PHP 脚本的用户名称,可以使用
<?php
$username = getenv('USERNAME') ?: getenv('USER');
echo $username; // 例如 root 或 www-data
?>
如果您启用了 userdir,get_current_user() 将返回托管 public_html 的用户的用户名。例如,http://example.com/~bobevans/somescript.php 将在调用 get_current_user() 时返回 bobevans。