Я установил antiword на мой Mac (OS X El Capitan), используя Macports:
sudo port install antiword
Теперь я хотел бы использовать его из PHP-программы на веб-сервере, чтобы иметь возможность преобразовывать файлы Word Document для использования в моем веб-приложении. Итак, я попробовал:
$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 () — они все вели себя одинаково) могли найти антислово и использовать его?
(Спасибо Крису, чей комментарий указал мне правильное направление).
Проблема в том, что антислово должно быть в пути, используемом Apache, когда он выполняет команды оболочки. Вы можете найти это в разделе окружения 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 в путь, просто скопировал антислово в / usr / bin, и все заработало. Не идеально, так как он не поднимет апгрейды, но это было лучше, чем ничего.
Других решений пока нет …