【问题标题】:Running macports-installed programs from PHP shell_exec从 PHP shell_exec 运行 macports 安装的程序
【发布时间】:2016-09-15 07:01:11
【问题描述】:

我已经使用 Macports 在我的 Mac (OS X El Capitan) 上安装了 antiword:

sudo port install antiword

我现在想在网络服务器上的 PHP 程序中使用它,以便能够转换 Word 文档文件以在我的网络应用程序中使用。所以我试过了:

$retcode = shell_exec('which antiword');
if ($retcode) {
    $outtext = shell_exec('antiword -x db myfilename');
}

这种方法适用于我的 Linux (Centos 6) 服务器,也适用于 Linux Ubuntu 客户端。但是,它不适用于 Mac。

我认为问题在于 Macports 安装了 antiword 仅供我的用户使用,而 Apache 在另一个用户“_www”下运行。

有谁知道如何击败 Macports 和/或 Apache 以使 shell_exec()(或 exec() 或 system() - 它们的行为都相同)可以找到反词并使用它?

【问题讨论】:

  • which antiword 的输出是什么(在终端和 PHP 中)?它可能不在您的 shell_exec 环境中。

标签: php macos macports shell-exec


【解决方案1】:

(感谢 Chris,他的评论为我指明了正确的方向)。

问题是antiword必须在Apache执行shell命令时使用的路径中。您可以在 phpinfo Apache 环境部分找到它。我的看起来像:

/usr/bin:/bin:/usr/sbin:/sbin

以下链接说明了如何为 Ubuntu 设置路径:https://serverfault.com/questions/151328/setting-apache2-path-environment-variable

但是,这对我在 OS X El Capitan 上不起作用。我尝试使用 envvars 文件并将 SetEnv 指令添加到 .htaccess 或 httpd.conf 中 - 这些都不起作用。

最后,我放弃了尝试将 /opt/local/bin 添加到路径中,只是将 antiword 复制到 /usr/bin 中,这使一切正常。不理想,因为它不会升级,但总比没有好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2019-06-29
    相关资源
    最近更新 更多