2016-07-07 22 views
-1

Ich habe eine design tool extension, die auf einer Website verwendet wird, an der ich arbeite. Das Design-Tool verwendet die inkscape Befehlszeile zum Exportieren von Bildern. Es gibt eine PHP-Schnittstelle, um mit den Befehlszeilenoperationen zu arbeiten, die letztendlich aufrufen. Nachdem ich festgestellt hatte, dass die Bilddateien nicht exportiert wurden, habe ich ein paar Tests zum Debuggen erstellt. Ich habe die auszuführen Linie shell_exec($inkscapeCmd . ' 2>&1') um die Fehlermeldung zu sehen:Inkscape in PHP kann nicht ausgeführt werden shell_exec() Befehl

sh: inkscape: command not found

... was merkwürdig ist, da es auf jeden Fall installiert ist und zugänglich. Ich habe einen Scheck für den Benutzer auf meiner Testseite, um sicherzustellen, die Befehle von einem Benutzer mit Zugriff auf inkscape ausgeführt wurden:

$processUser = posix_getpwuid(posix_geteuid()); echo 'user: ' . $processUser['name'];

Dann habe ich in den Server ssh'd, um zu bestätigen, dass ich laufen konnte die gleichen Befehle wie dieser Benutzer, und konnte sie ohne Probleme ausführen (was auch bestätigt, inkscape war im PATH). Ich bin in der Lage ohne Probleme andere, grundlegende Shell-Befehle von PHP zu laufen, etwa so:

echo shell_exec('ls');

Aber jetzt ich ratlos bin; Ich bin mir nicht sicher, was ich sonst noch überprüfen sollte, um herauszufinden, warum ich den Fehler 'Befehl nicht gefunden' bekomme. Jede Richtung wäre hilfreich.

Der Server (und nicht alt, ich weiß):

  • CentOS 6.7
  • PHP 5.3.3
  • Inkscape v0.47
+0

Warum wird dies abgelehnt? Ich dachte, ich hätte eine vernünftige Frage gestellt und letztendlich die Antwort bekommen, nach der ich gesucht habe. Das Design-Tool benötigte den Pfad zur ausführbaren Datei (es wurde in einer Konfigurationsdatei falsch definiert). – spencerready

Antwort

1

Der Prozess kann nicht die Lage hat für Inkscape auf dem Weg.

Sie müssen den vollständigen Pfad zur ausführbaren Datei angeben.

Beispiel

/usr/bin/inkscape

in der Befehlszeile Typ 'whereis inkscape' Lage ist zu finden.

+0

Das hat es getan. Gibt es eine Chance, dass Sie erklären können, warum der Prozess in diesem Fall den vollständigen Pfad benötigt? Wird der Pfad des Prozessbenutzers nicht verwendet? – spencerready

+0

Der Benutzer, mit dem Sie sich anmelden, ist nicht derselbe Benutzer, mit dem der Webserver ausgeführt wird. Führe 'echo $ PATH' in der Befehlszeile aus. Dies wird deinen Weg zeigen. Sie können ausführbare Dateien ausführen, ohne den vollständigen Programmpfad angeben zu müssen. Der Benutzer, auf dem der Webserver mehr als wahrscheinlich ausgeführt wird, ist auf das absolute Minimum reduziert. Deshalb, wenn Sie viele webbasierte Software betrachten, müssen Sie Pfade für bestimmte Systemsoftware ausfüllen. –

+0

Zuvor habe ich mich als Webserver-Benutzer angemeldet, als ich über die Befehlszeile getestet habe. Gibt es eine Art von modifizierten Einstellungen/Pfad, wenn der Webserver der Initiator ist? Nicht sicher, ob das die richtige Art ist, diese Frage zu stellen? – spencerready