Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

04.12.2005, 13:29

Exec funktioniert bei einem Programm nicht...

Hi,

ich benutze den PHP-Befehl exec(), um ein paar Programme unter Debian Linux auszuführen. Erst möchte ich "latex" ausführen, dann "dvipng", folgendermaßen:

Quellcode

1
cd /www/michael | latex test.tex | dvipng -q -T tight -bg Transparent -D 300 -o /www/michael/test.png /www/michael/test.dvi



Wenn ich das so in SSH ausführe funktioniert alles wunderbar. Wenn ich das ganze allerdings per exec() in PHP ausführe, wird der Befehl dvipng nicht ausgeführt. Auch passthru("dvipng") gibt nichts aus, obwohl da eine Liste mit den verfügbaren Optionen erscheinen sollte. Ich hab auch schon einen absoluten Pfad angegeben, also passthru("/usr/bin/dvipng"), hilft aber alles nichts. Das Programm wird einfach nicht ausgeführt.

Woran kann das liegen? Liegt es an den Benutzerrechten? SSH läuft unter root, apache aber unter nobody. Ich probier hier schon 2 Stunden rum und komm nicht drauf.

MfG, Herr-Vorragend

2

04.12.2005, 13:57

Guck mal nach, ob PHP im Safe_mode läuft, bzw. ob der Benutzer nobody die Tools überheupt im Pfad hat.

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

3

04.12.2005, 14:03

PHP ist nicht im safe_mode, exec("latex") funktioniert ja auch, es funktioniert eigentlich alles außer exec("dvipng").

Zitat

bzw. ob der Benutzer nobody die Tools überheupt im Pfad hat.
#

was meinst du damit? Die executable befindet sich in /usr/bin/dvipng, genauso wie /usr/bin/latex usw.

4

04.12.2005, 14:29

noch eine Möglichkeit: hat nobody überhaupt die passenden Deteirechte, um dvipng auszuführen?

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

5

04.12.2005, 14:30

Wie kann ich das denn überprüfen? chmod von dvipng hab ich mal auf 777 gestellt...

6

04.12.2005, 14:42

Damit kann jeder die Datei lesen, schreiben und ausführen ... das möchtest Du nicht wirklich (schreiben!) ...

Gewöhne Dir mal an, chmod "ohne Zahlen" zu verwenden, da macht man zu leicht Fehler!
chmod a+rx dvipng sollte genügen (nun, da Du "a+rwx" gesetzt hast, benötigst Du chmod go-w) ...


Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

7

04.12.2005, 14:53

Hilft leider nichts, folgendes liefert gar nichts als Ausgabe:

Quellcode

1
passthru("dvipng");


normal müsste da die info-seite kommen...

8

04.12.2005, 18:58

Hm, hat keiner ne Lösung für dieses Problem? Ist echt wichtig...:-/

Chucky the Devil

Pianist im Puff

  • »Chucky the Devil« ist männlich

Beiträge: 1 636

Wohnort: Koeln

Beruf: Network Architect

  • Nachricht senden

9

04.12.2005, 19:58

Zuersteinmal solltest Du mit dem absoluten Pfad arbeiten. Wenn ein Skript gestartert wird hat es meist kein PATH-Env. Und dann hast Du doch sicher schonmal davon gehoert, dass Programmiersprachen eine Exitcode/Errorhandling mitbringen?

In perl wuerde ich es in etwa so aussehen lassen:

Quellcode

1
2
my $program="/usr/bin/dvipng";
system($program) == 0 || die "Error during execution of $program: $?";


Dann weisst Du zumindest schomal den exit code und kannst nachschauen, was
er in Deinem Fall bedeutet.

Thema bewerten