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

时间:2015-12-31 10:04:40

标签: perl

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

当我从ubuntu执行时:$ root @ ubuntu:/ var / test / geek #firefox http:/localhost/test.html,我将/ var / cgi-bin作为perl cgi页面中的输出而不是/ var /测试/怪胎。

使用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脚本的路径。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

答案 1 :(得分:0)

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