質問: phpからlhaコマンドを使いたい こんにちは、linux初級です。 phpからlhaコマンドが使えなくて困っています。 実は他の掲示板でも質問しているのですが、私が初級ということもあってか(?)、途中で途切れてしまっています。 何とか、解決までおつきあいいただけないでしょうか? 以下、現状です。 ・サーバーはcentos5.2で、lhaは自力でインストール ・sshからのlhaコマンド実行は問題無し sshで実行したコマンド "lha efiw=絶対パス 絶対パス/対象圧縮ファイル" //問題無く解凍できました。 ・サーバーレンタル会社へ質問するもサポート外との返事 ただし、phpの実行ユーザーで動くはずだと思う・・・との事 ・php実行時のhttpd.confのエラーログは"sh: lha: command not found" それで、phpの処理の流れは、アップロードされたlzh圧縮ファイルを解凍するというものです。 if (!shell_exec("lha -e '絶対パス' '絶対パス/$up_file'")) { exit("解凍できません!"); } とか、 if (!system('lha efiw=絶対パス 絶対パス/$up_file')) { exit("解凍できません!"); } とか、-eをeやxに変えたりといろいろやってみましたが、結果は全て"解凍できません!"となります。 ちなみに、zipファイルは解凍できますので、セーフモードでは無いようです。 shell_exec("unzip -j '{絶対パス}$up_file' -d '{絶対パス}'"); //これはok また、絶対パスはzipの方で確認していますので、間違いありません。 phpの記述の問題なのか、サーバー側の問題なのか、さすがに困り果てました。 何か情報が不足しておりましたら、ご指摘下さい。 どうぞ宜しくお願いいたします。
回答: sh: lha: command not found ってでるとゆーことは、実行してるユーザーだとそのコマンド が見つから無いって言われてるんで、 phpからはシェルスクリプトを呼び出す処理を書いて そのシェルスクリプトを使って 環境変数を設定して、そのあとlhaコマンドを実行すればいーんじゃ ないですかね? 例えばlinuxってコマンドを実行する時、sshでコマンドを実行する場合と、 cronとかでコマンドを実行する場合だと実行してるユーザーが変わるので、環境変数にコマンドを入れておかないと、 実行できるコマンドが違うので、 sh: lha: command not found みたいに、コマンドが見つかりませんってゆーエラーが出ると思います。 ※あまりサーバーに詳しくないので、表現が間違ってましたら、誰か訂正してください。