Как найти путь к домашнему каталогу пользователя в PHP Cli на Linux?

1

Я пытаюсь написать скрипт, чтобы проверить, что какой-то конкретный каталог выйдет или нет, в текущем домашнем каталоге пользователя в сети через PHP.

когда на терминале я использую

    cd ~
    pwd

Он показывает /home/ramratan.

Но когда я пробовал через PHP то же самое, что и ниже

    chdir("~");
    PHP Warning:  chdir(): No such file or directory (errno 2) 
    in php shell code on line 1
    PHP Stack trace:
    PHP   1. {main}() php shell code:0
    PHP   2. chdir() php shell code:1

Я также пробовал ниже

 chdir("/home");
 echo shell_exec("pwd");

Он отображает /home not /home/ramratan, если кто-то поможет мне, что мне делать в chdir("/home") чтобы он возвращал /home/ramratan.

Я также пробовал ниже, но не успел

 chdir("/home/".shell_exec("whoami"));
 PHP Warning:  chdir(): No such file or directory (errno 2) 
 in php shell code on line 1
 PHP Stack trace:
 PHP   1. {main}() php shell code:0
 PHP   2. chdir() php shell code:1
  • 0
    Как вы понимаете "текущий вошедший в систему пользователь"? whoami вернет, от имени какого пользователя apache работает, а не пользователя, которого вы вошли на свой сайт.
  • 0
    @DarkBee, echo shell_exec ("whoami"); возвращается ramratan не пользователь nginx.
Показать ещё 3 комментария
Теги:
home-directory

2 ответа

0
Лучший ответ

Вы можете найти текущее имя пользователя, используя whomai как вы уже писали. Используйте это имя, чтобы найти строку, соответствующую этому пользователю, в /etc/passwd. Из этой строки cut о домашнем каталоге:

$currentUserHomeDir = exec('grep 'whoami' /etc/passwd | cut -d ":" -f6');
  • 0
    Это расширенное решение, вывод эха / home / ramratan без sudo -s, а также печать / root с sudo -s
1

Версия CLI для PHP добавляет переменные среды в $_SERVER[]. Домашний каталог текущего пользователя можно найти в $_SERVER['HOME']. Нет необходимости менять какую-либо директорию или запускать любую внешнюю команду.

Протестировал его на OSX и Ubuntu, но я уверен, что он работает с любым дистрибутивом Linux. На данный момент ничего не могу сказать о Windows.

  • 0
    это простое решение: эхо-печать /home/ramratan без sudo -s, а также печать /home/ramratan с sudo -s

Ещё вопросы

Сообщество Overcoder
Наверх
Меню