【问题标题】:php exec() return error when calling external program (postmap)调用外部程序(postmap)时php exec()返回错误
【发布时间】:2019-08-03 21:52:30
【问题描述】:

我正在尝试更新 php 代码(基于 Apache linux 的服务器)中的后缀数据库

我尝试像这样使用 shell_exec() 和 exec() 命令:

$out =shell_exec('postmap /etc/postfix/virtual; echo $?');
var_dump($out);

虽然postmap /etc/postfix/virtual 在命令行中工作,但在我的 php 中像这样调用它时出现 1 错误代码,但它什么也不做。 /etc/postfix/virtual 在 chmod 666 和 /usr/sbin/postmap -rwxr-xr-x “当然”当我将 php 作为 cli 调用时它可以工作。

其他程序,如(ls 或 echo)也可以。 你知道为什么它不起作用吗?

【问题讨论】:

    标签: php linux


    【解决方案1】:

    问题已解决: 1.为了检查问题到底出在哪里(我猜是权限问题),我将STDERR重定向到STDOUT,这样我就可以清楚地调试代码了。

    exec('postmap /etc/postfix/virtual 2>&1',$output);

    然后我得知 postmap 正在寻找 /etc/postfix/virtual.db 而不是 /etc/postfix/virtual 并且无权写入。 将文件 chmod 设置为 666 可以解决问题。

    【讨论】:

    • 您是否知道您正在禁用安全性并且您计算机中的任何用户现在都可以弄乱 Postfix 配置?
    • @ÁlvaroGonzález 是的,这只是一个解决方案示例,并没有在我的实际环境中实现。仅将权限授予 apache 会更好,但最后我停止使用此文件,现在使用 SQL 方法,无需编辑任何服务器文件
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2022-07-19
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多