为什么shell_exec不能为某些命令工作/不输出?

时间:2014-07-06 10:39:56

标签: php linux shell-exec

 echo shell_exec("ps auxwww");
 echo shell_exec("cut -d. -f1 /proc/uptime");
 echo shell_exec("date");

给出输出;

 echo shell_exec("ifconfig eth0");
 echo shell_exec("top -n 1");

不提供输出

当我通过putty以root身份登录并删除它们时,所有这些命令都能正常工作。我在这里读到了一些类似问题的问题,其中一个问题是添加" 2>& 1"到命令的最后将修复它。在我的情况下,这没有做任何事情。还尝试使用exec()而不是shell_exce()。任何人都知道发生了什么? /我做错了什么?

谢谢你的时间

1 个答案:

答案 0 :(得分:3)

据我所知,通过PHP生成输出的命令有这个共同点:

  • 不需要root权限
  • 他们只是将内容附加到标准输出

常见问题包括:

  • 程序执行失败,您永远不会知道,因为shell_excec()的错误检查功能确实很差(尽管您至少可以测试null的返回值)
  • 该命令将输出发送到交互式终端。

程序执行失败的原因与常规shell完全相同:

  • 缺乏特权
  • 环境变量错误或缺失
  • 参数和/或输入数据错误或缺失
  • 等等,等等。

在你的情况下:

  • ifconfig通常位于/sbin/ifconfig;非root用户的路径中没有/sbin
  • top期望更新TTY窗口中的随机字节

我的建议是使用提供exec()等更多信息的功能进行故障排除,但请确保您确实阅读了此类信息。阅读stderr也很有帮助 - 您可以直接将其重定向到其他位置(文件或stdout)或use a function that can read it