Я понял, что есть несколько способов определить дом пользователя, в зависимости от платформы (в основном Unix / Linux против Windows).
Composer использует переменную среды, в композитор / Платформа пакет:
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 Пакет использует другие переменные среды:
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");
}
В чем разница между этими двумя методами? Один надежнее другого?
Примечание: я использую PHP в CLI, так что это всегда фактический текущий пользователь, использующий PHP.
РЕДАКТИРОВАТЬ> Я понимаю, что этот вопрос, кажется, спрашивать мнение, но это не так. Я НЕ ЗНАЮ Windows и не понимаю, почему некоторые пакеты используют разные способы определения домашнего каталога пользователя. Я прошу объяснений по поводу двух упомянутых методов: один из них надежнее другого и почему?
Я отредактировал название и вопрос, чтобы отразить эту точность.
Задача ещё не решена.
Других решений пока нет …