我正在尝试为运行 nginx 和 php-fpm 的 Web 服务器制作一个简单的控制面板。
我已设法捕获service php5-fpm restart
和的结果service nginx reload
,但的输出nginx -t
显然不能以相同的方式工作?
我尝试过$out = shell_exec('nginx -t');
,就像我在上面另外两个例子中使用的那样。但是当我运行脚本时,它只会打印出结果,变量$out
为空。
我也尝试过同时shell()
使用输出参数和popen()
与之结合fread()
,但结果是一样的。
我想要实现的是使用的结果更新我的 mysql 数据库中的一个字段nginx -t
。
有什么办法可以做到这一点吗?
答案1
这更多的是一个编程问题而不是 ubuntu 问题所以它可能应该在 stack overflow 中。
但是您的问题可能是错误没有被捕获,因为您要求的是 STDOUT,而错误被输出到 STDERR。
有两种可能的解决方案。
第一个是使用 php 函数捕获 STDERR。我对 php 了解不够多,无法回答这个问题。
第二种是将 STDERR 定向到 STDOUT。运行
nginx -t 2>&1
这告诉 shell 将写入 STDERR 的所有内容移至 STDOUT。
有关文件流和 stderr 的更多信息:http://en.wikipedia.org/wiki/Standard_streams#Standard_error_.28stderr.29