PHP. 获取用户主目录(用于虚拟主机)

6
我希望在PHP中获取当前脚本用户(nginx / www / apache等)的主目录。 我使用:

$output_message = shell_exec('echo ~');
var_dump($output_message);

我的本地服务器和亚马逊实例上都能正常运行,但在虚拟主机上只输出“~”。

也许你有解决获取当前用户的家目录的方法吗?

先感谢您的帮助。


这个问题是关于Linux还是一般性的?我问这个问题是因为在一些评论中,我看到一些人评论了Microsoft Windows,他们可能想回答这个问题而不会被踩。感谢您的澄清。 - Valerio Bozz
3个回答

23

我找到了可行的解决方案:

$user = posix_getpwuid(posix_getuid())

这将返回数组,例如:

Array
(
    [name] => username
    [passwd] => ********
    [uid] => 501
    [gid] => 20
    [gecos] => Full Name
    [dir] => /home/username
    [shell] => /bin/bash
)

访问用户主目录,使用 $user['dir']


请注意,此功能仅适用于类Unix环境。 - Valerio Bozz
另外请注意,您可能会对 posix_geteuid()(有效用户ID)感兴趣,而不是 posix_getuid()(真实用户ID)-https://www.php.net/manual/en/function.posix-geteuid.php - Valerio Bozz

2

使用 $_SERVER['HOME'] 或者你可以尝试用

$home = getenv("HOME");

注意:这需要您通过命令行执行脚本。

1
getenv返回FALSE。$_SERVER ['HOME']不存在(注意:未定义索引:HOME) - indapublic
1
@Anish的回答中的这两个示例都需要通过命令行执行脚本。 - Travis
1
在 Windows 系统中,您可以使用 $home = getenv("USERPROFILE") - Markus Zeller

1
在大多数常规服务器上,这些守护进程(apache、nginx等)没有真正的“主目录”。
如果考虑“虚拟主机”,那是不可能的,因为每个用户只能有一个主目录,但每个守护进程可以有多个虚拟主机。
我想你所要寻找的是环境变量DOCUMENT_ROOT(当前虚拟主机文档的根目录)。
$_SERVER['DOCUMENT_ROOT']

请注意,原问题提问者正在使用shell_exec运行shell命令,因此我认为用户对于获取Unix/Linux HOME目录非常感兴趣,以便使用该目录运行一些命令,而用户可能并不关心文档根目录。但我同意这仍然有助于澄清。 - Valerio Bozz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接