如何从PHP脚本执行命令行
我需要编写一个脚本,为用户提供给定Unix帐户的信息(脚本所在的Unix服务器)。主要是passwd文件中的或通过finger可用的东西 PHP处于安全模式,因此我无法通过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配置文件(仅供参考,我无法
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可读的文件中吗?你可能需要立即启动它链子。如果它是一个重要的工具,那么就需要有人与信息技术的预防者进行斗争。