2016-05-18 11 views
-1

Ich habe auf meinem Mac (OS X El Capitan) installiert antiword mit Macports:Lauf Macports installierten Programme von PHP shell_exec

sudo port install antiword 

Ich möchte nun, es zu benutzen aus einem PHP-Programm auf einem Webserver in Um Word-Dokumentdateien für die Verwendung in meiner Webanwendung konvertieren zu können. Also habe ich versucht:

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

Dieser Ansatz funktioniert gut auf meinem Linux (CentOS 6) Server und auch auf einem Linux-Ubuntu-Client. Es funktioniert jedoch nicht auf dem Mac.

Ich nehme an, dass das Problem ist, dass Macports AntiWord nur für die Verwendung mit meinem Benutzer installiert hat, während Apache unter einem anderen Benutzer ausgeführt wird, "_www".

Weiß jemand, wie es möglich ist, Macports und/oder Apache in die Einreichung zu schlagen, so dass Shell_exec() (oder exec() oder system() - sie alle gleich verhalten) antiword finden und verwenden können?

+1

Was ist die Ausgabe von 'which antiword' (sowohl in einem Terminal und in PHP)? Es ist möglich, dass es in Ihrer 'shell_exec'-Umgebung nicht auf dem Pfad ist. – Chris

Antwort

0

(Danke an Chris, dessen Kommentar mich in die richtige Richtung wies).

Das Problem ist, dass antiword in dem Pfad sein muss, der von Apache verwendet wird, wenn es Shell-Befehle ausführt. Sie finden dies im Bereich phpinfo Apache environment. Mine sah aus wie:

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

Der folgende Link wird erläutert, wie Sie den Pfad für Ubuntu setzen: https://serverfault.com/questions/151328/setting-apache2-path-environment-variable

Dies ist jedoch nicht für mich auf OS X El Capitan funktionierten. Ich habe versucht, sowohl die envvars-Datei und fügen Sie eine SetEnv-Direktive in .htaccess oder httpd.conf - keiner von beiden funktionierte.

Am Ende gab ich es auf, zu versuchen,/opt/local/bin in den Pfad hinzuzufügen, kopierte einfach antiword in/usr/bin, was alles funktionierte. Nicht ideal, da es keine Upgrades aufnehmen wird, aber es war besser als nichts.

Verwandte Themen