如何从PHP脚本执行命令行

如何从PHP脚本执行命令行,php,command-line,exec,safe-mode,Php,Command Line,Exec,Safe Mode,我需要编写一个脚本,为用户提供给定Unix帐户的信息(脚本所在的Unix服务器)。主要是passwd文件中的或通过finger可用的东西 PHP处于安全模式,因此我无法通过PHP中内置的file\u get\u contents()访问passwd文件。此外,由于它处于安全模式,其他各种命令行功能也被禁用 我以为我可以通过套接字获取信息(目前还不知道这意味着什么,但我想我会尝试),但我得到了一个致命错误,即socket\u create()是一个未知函数。我调出了php配置文件(仅供参考,我无法

我需要编写一个脚本,为用户提供给定Unix帐户的信息(脚本所在的Unix服务器)。主要是passwd文件中的或通过finger可用的东西

PHP处于安全模式,因此我无法通过PHP中内置的
file\u get\u contents()
访问passwd文件。此外,由于它处于安全模式,其他各种命令行功能也被禁用

我以为我可以通过套接字获取信息(目前还不知道这意味着什么,但我想我会尝试),但我得到了一个致命错误,即
socket\u create()
是一个未知函数。我调出了php配置文件(仅供参考,我无法更改),果然没有启用套接字

然而,当我在那里的时候,我看到了行
”——带有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=
return=1

其结果是:

stuff=
return=Array
(
)
stuff=
return=1
1听起来很有希望,但还不是我想要的

主意
所以这实际上是一个已经存在的脚本的更新(请不要问),我没有访问权限。这是一个通过cgi调用的perl脚本。有没有办法通过cgi实现php(这样我就不必处理perl或依赖旧代码)?

Exec返回一个值,所以:

$var = exec("finger user"); 
然后解析输出以获得所需内容。您可以通过添加可选变量来获得退货状态,因此:

exec("finger user", $var, $return_status);
或者只是:

echo exec("finger user");

如果您只想查看输出。

恐怕您无法在安全模式下执行此操作。如果可以控制服务器配置,则必须删除安全模式


我认为不能依靠套接字读取本地文件,套接字用于网络相关的东西。

exec本身不返回任何数据

试一试

exec("finger user",$output);

echo "[[";
foreach($output as $key => $value){
echo $value;
}
echo "]]";

感谢所有的回应,以下是最终起作用的:

  • 创建一个CGIBIN文件夹
  • 将以下内容添加到php脚本的顶部:

     #!/usr/local/bin/php-cgi
    

我不知道这在我的服务器配置上是否有什么特殊之处,但我可以运行
exec()
,然后得到我想要的。

禁用安全模式,或者获得更好的托管解决方案。也有便宜的选择。这是一个公司服务器,他们更喜欢安全模式。说服他们让我在场外为他们的内联网托管一个脚本,这样我就可以拥有一个不太安全的页面,这可能与让他们禁用安全模式一样。你能说服他们让你编写一个cron作业,定期将有用的信息导出到一个PHP可读的文件中吗?你可能需要立即启动它链子。如果它是一个重要的工具,那么就需要有人与信息技术的预防者进行斗争。