如何将PHP中的目录更改为当前登录的用户路径

问题描述:

我正在尝试编写脚本来检查特定目录是否通过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是正确的。我怀疑你是否使目录名称与登录的用户名相同?在那种情况下shell_exec(“whoami”)insted,你可以做chdir(“/ home /".$ loggedinUserName); –

您可以通过使用whomai因为你已经写了查找当前用户名。使用该名称在/etc/passwd中查找与该用户对应的行。从该行cut出来的家目录信息:

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

这是扩展解决方案,echo打印/家庭/ ramratan没有sudo -s和打印/根与sudo -s –

CLIPHP把环境变量$_SERVER[]。当前用户的主目录可以在$_SERVER['HOME']中找到。无需更改任何目录或运行任何外部命令。

在OSX和Ubuntu上测试它,但我确信它适用于任何Linux发行版。目前无法透露有关Windows的任何信息。

+0

这是简单的解决方案,echo打印'/ home/ramratan'没有sudo -s也用sudo -s打印'/ home/ramratan' –