gpt4 book ai didi

php - 如何在 PHP 中查找 Windows 和 Linux 上的用户主目录

转载 作者:可可西里 更新时间:2023-11-01 10:42:01 27 4
gpt4 key购买 nike

我知道有几种方法可以确定用户的家,具体取决于平台(主要是 Unix/Linux 与 Windows)。

Composer 在 composer/Platform 中使用环境变量包裹:

public static function getUserDirectory()
{
if (false !== ($home = getenv('HOME'))) {
return $home;
}
if (self::isWindows() && false !== ($home = getenv('USERPROFILE'))) {
return $home;
}
if (function_exists('posix_getuid') && function_exists('posix_getpwuid')) {
$info = posix_getpwuid(posix_getuid());
return $info['dir'];
}
throw new \RuntimeException('Could not determine user directory');
}

public static function isWindows()
{
return defined('PHP_WINDOWS_VERSION_BUILD');
}

Webmozart's path-util包使用其他环境变量:

public static function getHomeDirectory()
{
// For UNIX support
if (getenv('HOME')) {
return static::canonicalize(getenv('HOME'));
}
// For >= Windows8 support
if (getenv('HOMEDRIVE') && getenv('HOMEPATH')) {
return static::canonicalize(getenv('HOMEDRIVE').getenv('HOMEPATH'));
}
throw new RuntimeException("Your environment or operation system isn't supported");
}

这两种方法有什么区别?一个比另一个更可靠吗?注意:我在 CLI 中使用 PHP,因此始终是实际的当前用户在运行 PHP。

EDIT> 我知道这个问题似乎是征求意见,但事实并非如此。我不知道 Windows,也不明白为什么有些软件包使用不同的方式来确定用户的主目录。我要求对上述两种方法进行解释:其中一种比另一种更可靠吗?为什么?我编辑了标题和问题以反射(reflect)这种精确性。

最佳答案

好久没研究这个问题了,我终于决定肯定地回答这个问题。

Windows 上定义了一些有用的环境变量:USERPROFILEAPPDATALOCALAPPDATA。它们可以通过 getenv() 函数轻松访问:

getenv('USERPROFILE');
根据 https://learn.microsoft.com/fr-fr/windows/desktop/shell/knownfolderid

USERPROFILE 存在于任何 Windows 上

所以,在 Windows 上,它似乎是可靠的。

如果您需要为当前用户存储数据,APPDATALOCALAPPDATA 是找到该位置的好变量。

我已经编写了一个包来使这些工具可重用:https://github.com/Arcesilas/Platform

它仍在进行中,当然需要改进。欢迎提供任何帮助,以使该工具在任何平台上都可靠。

感谢eryksun,他的意见对解决这个问题有很大帮助。

关于php - 如何在 PHP 中查找 Windows 和 Linux 上的用户主目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48798527/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com