我正在尝试制作一些PHP脚本,这些脚本将在其他系统调用命令(如top和其他自定义脚本)之间运行。您可以看到下面的代码非常简单。我们在下面的php中遇到的问题是,当我从linux提示符调用php时:
#php checkTOP.php
它将返回屏幕中的顶部-n 1输出没有问题。
当我使用http://url.com/checkTOP.php从网络服务器运行脚本时,它只返回以下内容:
程序:/ usr / bin / top -n 1 ver1 = retval = 1返回不为零
这是我的调试声明。
<?php
$program="/usr/bin/top -n 1";
echo "program:{$program}<br /> \n";
$ver1=system($program,$retval);
echo "ver1 = {$ver1}<br />\n";
echo "retval = {$retval}<br /> \n";
if($retval==0)
{
echo "Returned 0<br />\n";
}
else
{
echo "Returned not zero <br />\n";
}
die;
?>
改变1:还有一件事。所有权限都设置正确/ usr / bin / top设置为root:apache with rxrxrx以及所有目录/ usr / bin。
答案 0 :(得分:2)
<?PHP
ob_start();
$program="/usr/bin/top -n 1 -b";
passthru($program);
$t=ob_get_contents();
ob_end_clean();
echo "<PRE>$t</PRE>";
?>
答案 1 :(得分:1)
听起来这是与用户帐户相关的问题。当您从命令行手动运行它时,您可能在不同于Web服务器尝试运行的用户下运行。
要检查的一些事项:
top
?答案 2 :(得分:1)
根据您要从系统收集的信息,从/ proc / filesystem收集信息可能更有用,也更安全。
你想从命令中得到什么?
答案 3 :(得分:1)
获得最高输出的一种方法是将-b开关发送到批处理模式下运行顶部,并使用exec()在数组中输出每行一个元素。
<?php
exec('/usr/bin/top -n 1 -b',$output);
echo '<pre>',implode("\n",$output),'</pre>';
答案 4 :(得分:0)
看起来系统函数返回失败,在这种情况下retval可能为null。
如果你无法获得系统命令,你可以尝试使用exec并查看它是否有效。它还会为您提供所需的一切,我认为它还会返回错误消息以帮助调试问题:
答案 5 :(得分:0)
top命令通常不会将其输出发送到stdout。您无法使用system命令捕获它。使用-b选项顶部为“批处理模式”,它应该适合您。
$program="/usr/bin/top -b -n 1";
当你从linux提示符运行它时,看起来它正在工作,因为输出进入显示。当我尝试它时,我注意到输出与我对echo命令的预期不完全匹配。这就是让我感到惊讶的是输出有些奇怪,并且检查了top页面确认了-b标志。
-
BMB