2016-01-21 3 views
1

Я пытаюсь написать скрипт для проверки того или иного каталога, который выйдет или нет, в текущем домашнем каталоге пользователя через PHP.Как сменить каталог в 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 не /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, а не пользователь, которого вы вошли на свой сайт. – DarkBee

+0

@DarkBee, echo shell_exec ("whoami"); возвращает ramratan не пользователь nginx. –

+0

@ DarkBee верен. Мое сомнение заключается в том, что вы указываете имя каталога так же, как и имя пользователя? в этом случае insted из shell_exec ("whoami"), вы можете сделать chdir ("/ home /".$ loggedinUserName); –

ответ

0

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

$currentUserHomeDir = exec('grep `whoami` /etc/passwd | cut -d ":" -f6'); 
+0

Это расширенное решение, эхо-печать/home/ramratan без sudo -s, а также prints/root с sudo -s –

1

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

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

+0

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

Смежные вопросы