2009-11-24 7 views
8

私は、ubuntuサーバーでphpのexec()関数を使いたいと思います。 問題は、私はたまにエラーが発生し、コマンドが見つからないということです。 /エコー::私にはphpのexec()のシェルを変更するには

を見つけていない、私はbashのを使用しているしたい場合、PHPは、shシェルを使用しているように、それが見え例えば

exec("echo 123"); 

プリント

SHを使用して。 私は/ etc/passwdのwww-dataのシェルを変更しようとしましたが、どちらも助けにはなりませんでした。

誰かがどこから問題が発生しているのか、あるいは私がphpのubuntuユーザーのためにシェルを変更する方法を知っている人はいませんか?

おかげで、ティモ


[EDIT]

はたぶんこのことができます:

私はティモとしてSSHからbashスクリプトを呼び出し、このスクリプトは、execを使用した、PHPスクリプトを呼び出します。私はそれが奇妙に聞こえるが、それはより大きい開発環境の一部であることを知っている...

重要なのは、execの中のスクリプトが実行されているユーザのことです。


[EDIT]

今では私は関与して別の権利の問題がなければならないことを考え出しました。 私がexecの中からbashスクリプトtest.sh(完全​​パスで!)を呼び出そうとしても、php test.phpはちょうど言うでしょう。

SH:/test.shは:

答えて

0

を発見していない私はこの問題は何の$ PATH設定がないことだと思います。

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

それから私はこれが(関係なく、シェルの)働くだろうと想像:

何がやりたいことであれば /binに/

+0

あなたには超高速応答があります。残念ながら、それは問題を解決しませんでした。/bin/echoは動作しません。あなたが見ることができるように、私が実際にやってみたかった何 この は/ usr/binに/ mysqlの--user = --password =空自mydbという<./dump.sql 空自で、私も絶対パスを使用しました。エコーはもっとシンプルにするための一例にすぎません... 他のアイデアは? – Timo

0

エコー、すなわち、あなたのバイナリへの完全なパスを使用してみてください/usr/bin/mysql --user=asdf --password=asdf mydb < /full/path/to/dir/dump.sql

+0

ああ、実際にPHPでシェルを設定する方法はわかりませんが、実際にはbashが必要な場合は、最初の行に "#!/ bin/bash"それを行う別の方法を見つける)。 –

+0

問題は、私のダンプが見つかりませんが、mysqlが見つかりません... – Timo

+0

本当にバイナリが/ usr/bin/mysqlにインストールされていれば、shはそれを見つけて問題を解決します - safe-modeのようなものが有効になっています(safe-mode-exec-dirなどのドキュメントをチェックアウトします)。チェックするもう一つのことはopen_basedirです。これはexecがアクセスできるものも制限することができます。 –

8

代わりにshell_exec()を試してください。 execは、プログラムを実行するためにANYシェルを呼び出すべきではありません。代わりに、execのようなexecを使用してbashを呼び出すこともできます

+0

"sh:/ bash:not found"と表示されます。 /のすべてのバイナリのphp検索のようです。 php.ini safe_mode_exec_dirには何も設定されていないので、私はそれが何の制限もないと思います! (それを変更することは助けにはならない) – Timo

+2

私はセーフモードの経験がないので、おそらくそれがあなたの問題です。それをオフにしてみますか?とにかくそれを使用するべきではありません、それは離れて行くと、最初から悪い考えでした(ほとんどのPHP言語の "機能"のリスト)http://php.net/manual/en/features.safe-mode.php – Trey

+0

Didn誰かがこれを既に言及していたことに気付かないで、安全なモードは有害であると考えられている。 safe_mode_exec_dirに関して、セーフモードがオンで、これが空に設定されている場合、それは説明します(/に設定する必要があるものを実行したい場合)。意味のあるものに設定し、その道で何かを呼び出すことをお勧めします。 –

関連する問題