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/