如何在PHP和Windows上以Windows和Linux查找用户的主目录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在PHP和Windows上以Windows和Linux查找用户的主目录相关的知识,希望对你有一定的参考价值。
我知道有几种方法可以确定用户的家,这取决于平台(主要是Unix / Linux vs 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的实际当前用户。
编辑>我明白这个问题似乎要求一个意见,但事实并非如此。我不知道Windows,也不明白为什么有些软件包使用不同的方法来确定用户的主目录。我要求解释两种提到的方法:其中一种比另一种更可靠,为什么?我编辑了标题和问题以反映这种精确度。
在长时间不工作之后,我终于决定肯定回答这个问题了。
在Windows上定义了一些有用的环境变量:USERPROFILE
,APPDATA
,LOCALAPPDATA
。可以通过getenv()函数轻松访问它们:
getenv('USERPROFILE');
根据USERPROFILE
的说法,https://docs.microsoft.com/fr-fr/windows/desktop/shell/knownfolderid存在于任何Windows上
因此,在Windows上,它似乎是可靠的。
如果您需要为当前用户存储数据,APPDATA
和LOCALAPPDATA
是找到该位置的好变量。
我写了一个包,让这些工具可以重复使用:https://github.com/Arcesilas/Platform
它仍在进行中,当然需要改进。欢迎任何帮助,使该工具在任何平台上都可靠。
感谢eryksun,他的评论在解决这个问题上提供了很多帮助。
以上是关于如何在PHP和Windows上以Windows和Linux查找用户的主目录的主要内容,如果未能解决你的问题,请参考以下文章
Int在CentOS 7.1和Laravel 5.1上以PHP形式处理
如果 Itunes:Keep iTunes Folder Organized 在 Windows 上以编程方式设置,我该如何解决