【问题标题】:How to find path of user's home directory in PHP Cli on linux?如何在 Linux 上的 PHP Cli 中找到用户主目录的路径?
【发布时间】:2016-04-27 13:06:56
【问题描述】:

我正在尝试编写一个脚本来检查特定目录是否存在于当前通过 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

【问题讨论】:

  • “当前登录用户”是什么意思? whoami 将返回运行 apache 的用户,而不是您在站点上登录的用户。
  • @DarkBee, echo shell_exec("whoami");正在返回 ramratan 而不是 nginx 用户。
  • @DarkBee 是正确的。我怀疑您是否将目录名与登录的用户名相同?在这种情况下,安装了 shell_exec("whoami"),你可以做 chdir("/home/".$loggedinUserName);
  • php -a 交互式 shell php > $logedin = shell_exec("whoami"); php > 回声 $logedin; ramratan php > $path = "/home/".$logedin; php > 回声 $path; /home/ramratan php > echo shell_exec("pwd"); /home/ramratan/knexus-codebase php > chdir($path); PHP 警告:chdir():第 1 行的 php shell 代码中没有这样的文件或目录 (errno 2) PHP 堆栈跟踪:PHP 1. {main}() php shell 代码:0 PHP 2. chdir() php shell 代码: 1 php > 回声 shell_exec("pwd"); /home/ramratan/knexus-codebase php > echo $path; /home/ramratan
  • 我终于找到了解决方案,有一个新行,我使用 trim 作为 whoami 路径,它可以工作! chdir("/home/".trim(shell_exec("whoami")));回声 shell_exec("密码"); /home/ramratan

标签: php linux shell ubuntu home-directory


【解决方案1】:

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

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

【讨论】:

  • 这是一个简单的解决方案,echo 在没有 sudo -s 的情况下打印 /home/ramratan,也使用 sudo -s 打印 /home/ramratan
【解决方案2】:

您可以使用whomai 找到当前用户名,正如您已经写的那样。使用该名称在/etc/passwd 中查找与该用户对应的行。从那行cut 取出主目录信息:

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

【讨论】:

  • 这是扩展解决方案,echo 打印 /home/ramratan 不带 sudo -s 也打印 /root 带 sudo -s
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多