PHP文件执行

时间:2011-03-11 19:30:44

标签: php shell

嘿,我正在尝试使用PHP执行一个shell命令,该命令将远程运行我的盒子上的服务器。这是我的PHP代码:

if ($key == "test") { echo "<font color='green'>Key is valid. Server satrted.</font>";
   $start = system('cd /root/st/; ls;');
}

问题是,ls命令从与Web服务器相同的目录运行,该服务器返回/ var / www / html中的所有文件而不是/ root / st /。我也尝试过chdir命令无济于事。任何人都知道如何让目录更改,以便命令可以从指定的目录运行?感谢。

5 个答案:

答案 0 :(得分:2)

PHP正在运行的用户(例如,调用CLI脚本的用户)是否有权读取目录?如果您要进入/root/但不是root,则需要为当前用户添加cd sudoers,或者选择其他目录。

编辑:请注意,除了本地的,仅限您自己的脚本之外,将cd添加到sudoers甚至都不可能。 :)

答案 1 :(得分:1)

我有两种方法可以解决这个问题。

1:使用正确的unix命令,看看它们是否有效。 IE:

if ($key == "test") { echo "<font color='green'>Key is valid. Server satrted.</font>";
    $start = system('ls /root/st/');
}

2:让它在系统上运行一个脚本,该脚本可以超出网络服务器的chroot。

if ($key == "test") { echo "<font color='green'>Key is valid. Server satrted.</font>";
    $start = system('server.sh');
}

和server.sh是

#!/bin/bash
cd /root/st
ls

答案 2 :(得分:0)

PHP具有chdir()功能。不确定它是否适用于exec /系统调用,但值得一试。

答案 3 :(得分:0)

将位置存储在变量中,例如$loc = '/root/st',然后在代码中执行ls $loc。希望这会有所帮助。

答案 4 :(得分:0)

您的问题不是脚本运行的目录(或者更确切地说是运行脚本的用户的当前工作目录),但cd /root/st/在任何合理配置的UNIX / Linux系统上都会失败。 /root通常归root所有,任何其他用户都无法访问。

使用您的代码段会因为您使用分号而不是cd无条件地将ls&&命令链接起来而无声地失败。