从perl-cgi获取用户机器的当前工作目录



我正在尝试使用Perl 获取当前工作目录路径

当我从ubuntu执行时:$root@ubuntu:/var/test/geek#firefoxhttp://localhost/test.html,我在perl-cgi页面中获得/var/cgi-bin作为输出,而不是/var/test/gee。

使用的perl代码:

my $pwd=cwd();
 bla bla
print "<h1> pwd </h1>";

上面的代码给出了test.pl的路径,而不是用户的工作目录路径

编辑:当我从终端单独运行脚本时,它运行得很好。例如:

$root@ubuntu:/var/test/geek# /var/cgi-bin/test.pl 

我得到/var/test/geek。但当我使用提交按钮在html页面中调用脚本时,它会给出perl脚本的路径。

每个进程都有自己的工作目录,在创建时从其父进程继承。

cwd()返回当前进程的工作目录。

对于CGI脚本,浏览器不会将其工作目录作为请求的一部分传递给服务器。要获得这一点,你需要在提交它的客户端系统上运行代码。这可能是用户下载的应用程序,也可能是一些浏览器内代码,如Javascript或Java小程序(但出于安全原因,这些信息可能会隐藏在浏览器内代码中)。

(其余假设为Linux,其他操作系统可能会有所不同)

以下部分假设您正在服务器上查找用户的工作目录:

为了为特定用户的工作目录获取特定的shell,您需要识别shell的PID并从/proc/<pid>/cwd符号链接获取工作目录(要读取这些内容,进程必须属于运行代码的用户,或者代码必须以root的形式运行(这对CGI脚本来说是个坏主意)…)。要获得shell的PID,您可能需要从w命令输出或其数据源/var/run/utmp开始。系统::Utmp可能对此有用。。。然后,您可能还需要检索大量额外的信息,以找到所有可能具有您正在查找的工作目录的进程。

我认为您混合了web服务器和本地用户。当您运行脚本时,web服务器有一个工作目录,这就是cwd()返回的目录。

最新更新