Как получить домашнюю директорию с PHP-скрипт командной строки?
из командной строки, я могу получить домашний каталог такой:
~/
Как я могу получить домашний каталог внутри моего скрипта php CLI?
#!/usr/bin/php
<?php
echo realpath(~/);
?>
10 ответов:
использовать
$_SERVER['HOME']
Edit:
чтобы сделать его полным, посмотрим, что
print_r($_SERVER)
дал мне, выполнил из командной строки:Array ( [TERM_PROGRAM] => Apple_Terminal [TERM] => xterm-color [SHELL] => /bin/bash [TMPDIR] => /var/folders/Lb/LbowO2ALEX4JTK2MXxLGd++++TI/-Tmp-/ [TERM_PROGRAM_VERSION] => 272 [USER] => felix [COMMAND_MODE] => unix2003 [__CF_USER_TEXT_ENCODING] => 0x1F5:0:0 [PATH] =>/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin [PWD] => /Users/felix/Desktop [LANG] => de_DE.UTF-8 [SHLVL] => 1 [HOME] => /Users/felix [LOGNAME] => felix [DISPLAY] => /tmp/launch-XIM6c8/:0 [_] => ./test_php2 [OLDPWD] => /Users/felix [PHP_SELF] => ./test_php2 [SCRIPT_NAME] => ./test_php2 [SCRIPT_FILENAME] => ./test_php2 [PATH_TRANSLATED] => ./test_php2 [DOCUMENT_ROOT] => [REQUEST_TIME] => 1260658268 [argv] => Array ( [0] => ./test_php2 ) [argc] => 1 )
Я надеюсь, что я не раскрываю соответствующую информацию о безопасности;)
Совместимость С Windows
отметим, что
$_SERVER['HOME']
недоступно в Windows. Вместо этого переменная разбивается на$_SERVER['HOMEDRIVE']
и$_SERVER['HOMEPATH']
.
эта функция берется из Drush project.
/** * Return the user's home directory. */ function drush_server_home() { // Cannot use $_SERVER superglobal since that's empty during UnitUnishTestCase // getenv('HOME') isn't set on Windows and generates a Notice. $home = getenv('HOME'); if (!empty($home)) { // home should never end with a trailing slash. $home = rtrim($home, '/'); } elseif (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH'])) { // home on windows $home = $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH']; // If HOMEPATH is a root directory the path can end with a slash. Make sure // that doesn't happen. $home = rtrim($home, '\/'); } return empty($home) ? NULL : $home; }
PHP позволяет получить домашний каталог любого из пользователей ОС. Есть 2 способа.
Способ #1:
прежде всего, вы должны выяснить идентификатор пользователя ОС и хранить его где-то ( база данных или файл конфигурации, например).
// Obviously this gotta be ran by the user which the home dir // folder is needed. $uid = posix_getuid();
этот бит кода может быть запущен любым пользователем ОС, даже обычным веб-сервером www-data user, если вы передаете правильный идентификатор целевого пользователя ранее собранный.
$shell_user = posix_getpwuid($uid); print_r($shell_user);
Способ № 2:
та же логика из posix_getpwuid (). Здесь вы должны передать имя пользователя целевой ОС вместо их uid.
$shell_user = posix_getpwnam('johndoe'); print_r($shell_user);
зависит от того, где вы находитесь и что вы пытаетесь сделать.
$_SERVER
совершенно ненадежно для несерверного скрипта, но$_ENV['HOME']
может быть лучше для стандартного сценария оболочки. Вы всегда можетеprint_r( $GLOBALS )
и посмотреть, что ваша среда дает вам играть.phpinfo()
также выплевывает plaintxt при вызове из скрипта CLI, и просто хороший olephp -i
выполняется из оболочки будет делать то же самое.
если по какой-либо причине
getenv('HOME')
не работает, или серверная ОС Windows, вы можете использоватьexec("echo ~")
илиexec("echo %userprofile%")
чтобы получить каталог пользователя. Конечно же
Это метод, который я использовал в недавнем проекте:
exec('echo $HOME')
Я сохранил его в свой объект, сделав это:
$this->write_Path = exec('echo $HOME');
но вы могли бы действительно сохранить его так, как вы хотите, и использовать его в любом случае вы считаете нужным.