PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell-Befehle ausführen



sebezahn
25-09-2001, 15:47
Ich brauche mal Eure Hilfe, ich selbst kriege noch die Motten!

Nach dem Upload eines Bildes über den Webbrowser soll ein Thumbnail erzeugt werden. Auf der Shell-Ebene gebe ich dazu ein:

djpeg /usr/local/httpd/htdocs/demos/foto.jpg | pnmscale -width 136 | cjpeg -outfile /usr/local/httpd/htdocs/demos/tn_foto.jpg

Das funktioniert auch, aber wenn ich kann diesen Befehl in PHP einbaue mit

exec("djpeg [.....] tn_foto.jpg");

bekomme ich gar nichts. Keine Fehlermeldung, kein gar nichts. Ich habe die Rechte des Scripts schon auf den wwwrun gesetzt, auf root gesetzt, das bild diesen Besitzern zugeordnet, die Ordnerrechte geändert... NIX! Ich bin langsam am verzweifeln. Wenn jemand eine Lösung hat, wäre ich sehr dankbar.

Bis denn und Dank im Voraus,
Sebastian

sebezahn
25-09-2001, 16:17
Das darf doch nicht wahr sein! Der Fehler liegt gar nicht im Script direkt selbst. Das startet den Aufruf. Doch läuft der falsch...

Im error_log der Apaches steht es:

sh: /djpeg: No such file or directory

Daraufhin habe ich den Befehl abgeändert und ein usr/bin/djpeg daraus gemacht. Gleiche Meldung im error_log...

Auch ein ./usr/bin/djpeg bringt nichts, bis auf exakt die gleiche Fehlermeldung.

Ich setze eine SuSE 7.0 ein. Hat jemand eine Idee?

Danke,
Sebastian

stefaan
25-09-2001, 16:30
Servus!

Und was sagt ein
/usr/bin/djpeg ?

Grüße, Stefan

sebezahn
25-09-2001, 16:32
genau das gleiche...

micha
25-09-2001, 16:36
Hallole,

bin mir nicht ganz sicher, aber sucht der Apache nicht unterhalb des Document-Root (bei SuSE /usr/local/httpd/) ??

Gruß micha

sebezahn
25-09-2001, 16:40
das kann sein, aber ich habe auch versucht ../und so weiter zu nutzen. Das ist allerdings nicht erlaubt. Und ein absoluter Pfad sollte ja eigentlich funktionieren.

sebezahn
25-09-2001, 16:45
Jetzt was ganz kurrioses... Ich habe den Befehl mal umgeschrieben

$ausgabe = shell_exec("djpeg ... ");

Dann bekomme ich die Antwort:

Warning: Cannot execute using backquotes in safe mode in /usr/local/httpd/htdocs/demos/index.php on line 7

Im error_log erscheint trotzdem die Meldung:

sh: /djpeg: No such file or directory

Gruß
Sebastian

micha
25-09-2001, 16:50
Das ist schon klar, das ein absoluter Pfad funktionieren sollte, allerdings würde der absolute bei Dir dann /usr/local/httpd/usr/bin/djpeg heißen, falls meine Theorie stimmt ;)
Probiers doch mal aus, erstell unter Deinem Document-Root (bin mir nich sicher ob /usr/local/httpd oder /usr/local/httpd/htdocs) das Verzeichnis /bin und kopier djpeg da rein, dann rufst Du es mit /bin/djpeg auf....

Gruß micha

sebezahn
25-09-2001, 17:00
Ich habe das überall rein kopiert, hin und her kopiert, in jedem Verzeichnis gehabt. aber nöööö.... Nein, funktioniert nicht. Immer die gleiche Fehlermeldung in der error_log.

Ich gebs bald auf...

stefaan
25-09-2001, 18:22
Servus!

Blöde Frage:
Geht das Programm auf der Kommandozeile?

Ich habe mit Imagemagick herumprobiert und das hat problemlos geklappt...

Grüße, Stefan

sebezahn
25-09-2001, 18:28
das geht einwandfrei...

Martin Ament
25-09-2001, 19:17
geht djpeg auch als user wwwrun ?

sebezahn
25-09-2001, 19:33
Auch das geht. Langsam gehen mir die Ideen aus...

Martin Ament
25-09-2001, 19:49
Hi,

was ist mit den beiden anderen befehlen die in der zeile stehen ?

poste mal die entprechenden ausschnitte aus deinem script, der access.log und der error.log und von /var/log/messages und evtl warn...

martin

Linux redet mit uns, nur manchmal ist es schwierig die sprache zu verstehen.......

;-)

sebezahn
25-09-2001, 20:04
Mein Script beinhaltet zum Test nur diese eine Zeile, bzw. drei Zeilen:

<?
exec ("djpeg /usr/local/httpd/htdocs/demos/foto.jpg | pnmscale -width 136 | cjpeg -outfile /usr/local/httpd/htdocs/demos/tn_foto.jpg");
?>

Das foto.jpg existiert auch, der Befehl an der Shell klappt einwandfrei. Im error_log steht:

sh: /djpeg: No such file or directory
sh: /pnmscale: No such file or directory


Im access_log ist alles in Ordnung:

.... GET /demos/index.php HTTP/1.1" 200 22

Die /var/log/messages spuckt gar nichts relevantes aus.

Nun ja. Ich danke Euch an dieser Stelle schon mal für Eure bisherige Hilfe.

Gruß
Sebastian

Martin Ament
25-09-2001, 20:27
Hi,

also ich hab so was auch mal gemacht, hab es nur leider nicht hier, werde morgen in der Arbeit mal schauen, ob ich es da noch irgendwo habe..

Aber so geht das auf jeden fall nicht, du musst die Pfade mit angeben:

allerdings muss das in einem verzeichnis liegen, das ausführbar ist, sprich also cgi-bin oder wie auch immer du es in der httpd.conf eingestellt hast. Ausserdem muss dieses verzeichnis +exec (oder so ähnlich, bin leider keine wandelnde doku) ausführbar gemacht werden, ausserdem wenn du mit
/usr/local/httpd/htdocs/demos/foto.jpg

arbeitest, sucht er in

was auch immer dein document_root in der Httpd-conf/usr/local/httpd/htdocs/demos/foto.jpg

also bei suse standart in
/usr/local/httpd/htdocs/usr/local/httpd/htdocs/demos/foto.jpg

glaube nicht, dass du es so beabsichtigt hast.

Es ist nunmal so, dass der document_root in der httpd neu gesetzt ist, und somit mit /
immer /usr/local/httpd/htdocs

gemeint ist.

Gruss Martin

PS: es hat schon seinen guten Grund, dass dateien nur in bestimmten verzeichnissen (z.B. cgi-bin) ausgeführt werden dürfen, da wir ja wohl ein sicheres system haben wollen, und nicht jeder benutzer unseres servers zugriff auf die bins haben soll. Das ganze ist nur dann aufgehoben, wenn man als root den server startet, aber das macht niemand ernsthaft. Ausser er will, dass sein system innerhalb von ein paar tagen geknackt wird.

mache jetzt schluss, hoffe es hilft, ansonsten feel free to post bin morgen frueh wieder online

[ 25. September 2001: Beitrag editiert von: Martin Ament ]

sebezahn
25-09-2001, 22:00
Ich habs noch weiter probiert und gebe jetzt erst einmal auf. Auch mit cgi-bin habe ich experimentiert, hat aber ebenfalls nicht geklappt.

Wenn dir was einfällt, wäre es nett, wenn du mir das mit teilst. Ich mache jetzt erst mal eine konstruktive Denkenspause. ;-)

Gute Nacht,
Sebastian

lolli
04-10-2001, 17:52
Hallo,
wenn du es nicht so "sicher"brauchst, oder du als
einziger den webserver verwaltest, kannst du mal probieren,
den safe_mode in der php.ini abzuschalten...das sollte
eigentlch laufen

Warning: Cannot execute using backquotes in safe mode in
/usr/local/httpd/htdocs/demos/index.php on line 7

oliver

lolli
04-10-2001, 18:15
schau mal bei http://php3.de/manual/en/features.safe-mode.php

und http://php3.de/manual/en/configuration.php#ini.safe-mode-exec-dir

sebezahn
04-10-2001, 18:27
Hab ich schon versucht... Nur brauche ich es sicher und es hat auch nicht geholfen... aber erst mal egal, ich habe das jetzt hinten an gestellt.

Dennoch danke ;-)

pitu
15-10-2001, 15:48
Ich weiss noch nicht obs das ist, aber ich habs ein paar threads weiter vorne gefunden:

In der php.ini gibt es einen safemode, der muss auf off stehen.

Muss das aber selbst erst nochmal ausprobieren.

; Safe Mode
safe_mode = Off

thorsten

sebezahn
18-10-2001, 11:52
Nein, das ist nicht das Problem...

pitu
18-10-2001, 13:20
Bei mir hats funktioniert.

thorsten

sEPTmEMBER
20-10-2001, 00:45
wie waers mit ln -s /usr/bin/djpeg /usr/local/httpd/htdocs/djpeg

mfg:septi