2009-11-24 5 views
8

Ich möchte PHP exec() -Funktion auf einem Ubuntu-Server verwenden. Das Problem ist, ich bekomme immer einen Fehler, dass der Befehl nicht gefunden wird. Zum BeispielWie ändere ich die Shell für PHP exec()

exec("echo 123"); 

druckt

sh mit:/echo: nicht

Für mich gefunden, es sieht aus wie PHP die sh-Shell verwendet, wenn ich bash zu verwenden wollen . Ich habe versucht, die Shell für www-Daten in/etc/passwd zu ändern, was auch nicht geholfen hat.

Hat jemand eine Idee wo sonst könnte das Problem herkommen oder wie kann ich die Shell für PHP Ubuntuutzer ändern.

Danke, Timo


[EDIT]

Vielleicht hilft:

ich ein Bash-Skript von ssh als timo nennen, dieses Skript ruft ein PHP-Skript, das exec verwendet. Ich weiß, es klingt komisch, aber es ist Teil einer größeren Entwicklungsumgebung ...

Der Punkt ist, ich bin nicht sicher, als welcher Benutzer das Skript innerhalb exec ausgeführt wird.


[EDIT]

Inzwischen ich, dass es herausgefunden muss eine andere Rechte Problem beteiligt sein. Selbst wenn ich versuche, ein Bash-Skript test.sh (über den vollständigen Pfad!) Von exec aus aufzurufen, wird php test.php einfach sagen.

sh: /test.sh: nicht

gefunden

Antwort

0

ich glaube, das Problem ist, dass es kein $ PATH-Setup ist. Versuchen Sie es mit vollständigen Pfade zu Ihren Binärdateien /bin dh/echo

+0

aufrufen. Danke für Sie super schnelle Antwort. Leider hat das das Problem nicht gelöst./bin/echo funktioniert auch nicht. Was wollte ich eigentlich ist diese /usr/bin/mysql --user = asdf asdf --password = meinedb <./dump.sql Wie Sie sehen können tun, habe ich auch den absoluten Pfad.Das Echo war nur ein Beispiel, um es einfacher zu machen ... Irgendwelche anderen Ideen vielleicht? – Timo

0

Wenn das, was Sie tun möchten, ist:

/usr/bin/mysql --user=asdf --password=asdf mydb < ./dump.sql

Dann stelle ich mir dies funktionieren würde (unabhängig von Shell):

/usr/bin/mysql --user=asdf --password=asdf mydb < /full/path/to/dir/dump.sql

+0

Oh, und ich bin nicht sicher, wie man die Shell in PHP tatsächlich setzt, aber Sie könnten ein Skript von sh mit "#!/Bin/bash" als erste Zeile aufrufen, wenn Sie wirklich bash brauchen (und können ' t einen anderen Weg finden, es zu tun). –

+0

das Problem ist nicht, dass mein Dump nicht gefunden werden kann, aber mysql kann nicht gefunden werden ... – Timo

+0

Wenn wirklich eine Binärdatei unter/usr/bin/mysql installiert ist, dann würde sh sie finden und das Problem ist etwas anderes - Wie vielleicht Safe-Modus ist aktiviert (Auschecken der Dokumente für Safe-Mode-Exec-Dir und ähnliches). Eine andere Sache, die überprüft werden muss, ist open_basedir, was auch einschränken kann, welche exec Zugriff hat. –

8

Versuchen Sie stattdessen Shell_exec(). exec sollte keine Shell aufrufen, um Ihr Programm auszuführen. Alternativ können Sie bash mit exec wie

+0

das wird nur sagen "sh:/bash: nicht gefunden". sieht aus wie php sucht nach allen Binärdateien in /. in php.ini safe_mode_exec_dir ist auf nichts gesetzt, also ich denke, das bedeutet, es gibt keine Einschränkungen !? (Ändern scheint es nicht zu helfen) – Timo

+2

Ich habe keine Erfahrung mit dem abgesicherten Modus, also vielleicht ist das Ihr Problem. Versuchen Sie es auszuschalten? Sie sollten es sowieso nicht verwenden, es geht weg und war von Anfang an eine schlechte Idee (listen Sie die meisten PHP-Sprachfunktionen auf) http://php.net/manual/en/features.safe-mode.php – Trey

+0

Didn Beachten Sie, dass jemand dies bereits erwähnt hat - der abgesprochene sichere Modus wird als schädlich angesehen. In Bezug auf safe_mode_exec_dir, wenn der abgesicherte Modus aktiviert ist und dieser auf leer gesetzt ist, würde dies erklären (wenn Sie etwas ausführen möchten, müsste es auf/gesetzt werden). Ich schlage vor, dass Sie versuchen, etwas Bedeutungsvolles zu setzen und etwas auf diesem Pfad aufzurufen. –

Verwandte Themen