php - 为什么 shell_exec 对某些命令不起作用/不输出?

标签 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()。有人知道发生了什么事吗?/我做错了什么?

谢谢你的时间

最佳答案

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

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

常见问题包括:

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

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

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

在你的情况下:

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

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

关于php - 为什么 shell_exec 对某些命令不起作用/不输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24594977/

相关文章:

php - 如何使函数全局化?

php - 单个sql查询多个表

php - 将 Ghostscript 从 v9.07 升级到 9.22

linux - 如何通过sysfs访问设备?

ruby-on-rails - 我们如何在 Rails 启动时运行一些操作系统命令?

linux cat 文件,不包括以特定前缀开头的文件

PHP proc_open() 超时

php - 从 php 在系统上运行命令

php - MySQL/PHP更新多对多表