我需要编写一个脚本,为用户提供给定 Unix 帐户的信息(脚本所在的同一台 Unix 服务器)。主要是在 passwd 文件中或通过手指可用的东西。
PHP 处于安全模式,因此我无法通过 php 内置的东西访问 passwd 文件,例如file_get_contents()
. 此外,由于它处于安全模式,因此禁用了其他各种命令行功能。
我以为我可以通过套接字获取信息(尚不知道这意味着什么,但我想我会尝试)但我得到socket_create()
一个未知函数的致命错误。我调出了 php-config 文件(我无法更改,仅供参考),果然,没有启用套接字。
但是,当我在那里时,我看到了'--with-exec-dir='
没有设置实际目录的行。
所以后来我记得当我尝试每个命令行功能时,有些人会抛出“不允许在安全模式下”类型错误,而其他人什么也没做。如果我放一些类似的东西:
echo "[[";
exec("finger user");
echo "]]";
我最终会得到[[]]
. 所以没有错误,也没有结果。
底线:
有什么我没有尝试过的吗?(一般来说)我可以设置运行时配置选项exec()
吗?
快速说明:我也试过passthru()
了,特别passthru("pwd")
是仍然没有输出。
更新
根据反馈,我尝试了以下两种方法:
$stuff = exec("pwd", $return);
echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);
这导致:
stuff=
return=Array
(
)
和
$stuff = passthru("pwd", $return);
echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);
这导致:
stuff=
return=1
1 听起来很有希望,但还不是我想要的。
主意
所以这实际上是一个已经存在的脚本的更新(请不要问)我无权访问。这是一个通过 cgi 调用的 perl 脚本。有没有办法通过 cgi 来做 php(所以我不必处理 perl 或依赖旧代码)?