質問
このphpコードを使用しています:
exec("unrar e file.rar",$ret,$code);
と不正なコマンドのエラーコード、すなわち127を取得します...しかし、sshを介してこのコマンドを使用しているときは...サーバーにunrarがインストールされているため...正しいものですか?
解決
アプリケーションの直接パス(/ usr / bin / unrarのいずれか)を使用してみてください。phpがアプリケーションを見つけられないようです。
他のヒント
Apacheとphpをchrootした場合は、/ bin / shをchrooted環境に配置することもできます。そうしないと、exec()またはpassthru()が適切に機能せず、エラーコード127、ファイルが見つかりません。
これはグーグルのトップアンサーとして登場するので、修正を共有したいと思いました:
私が持っていた簡単な修正は、php.iniファイルでsafe_modeを無効にすることでした
; Safe Mode
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off
ご回答ありがとうございました!!
これを試しました
//somedir is inside the directory where php file is
chdir("somedir");
exec("/home/username/bin/unrar e /home/path/to/dir/file.rar");
そして今では終了コードを返しませんでした...他のコマンドはファイルを実行しています..mkdirなどを試してみました..:s
他の誰かがこの問題を解決できない場合は、こちらの投稿をご覧ください:
http://gallery.menalto.com/node/2639#comment-8638
引用:
問題が見つかりました。問題は、私のセキュリティパラノイドなOpenBSDでした。 3.1から3.2にアップグレードすると、次のように追加されました。
- Apacheはデフォルトでchroot'dを実行します。これを無効にするには、新しい-uオプションを参照してください。
chrootにより、Apacheはディレクトリの外部にアクセスできなくなりました。そのため、netpbmを含むすべてをapacheディレクトリに移動しました。すべてがアクセス可能で実行可能でしたが、まだ何らかの「セーフモード」であったと思います。 exec()が常に127を返したためです。
とにかく、-uオプションを指定してhttpdを実行すると、安全性の低いchrootされていないApache起動に戻り、exec()が再び動作するようになりました。
ohkiee guyz thanx ...はい
exec("/home/user/bin/unrar e /home/user/xxx/yyy/file.rar");