9

私はこのphpコードを使用しています:

exec("unrar e file.rar",$ret,$code);

そして、不正なコマンドのエラーコード、つまり127を取得しています...しかし、sshを介してこのコマンドを使用している場合、サーバーにunrarがインストールされているため...誰もがなぜexecが正しいことをしていないのか推測できますか?

4

6 に答える 6

27

アプリケーションの直接パス (/usr/bin/unrar など) を使用してみてください。php がアプリケーションを見つけられないようです。

于 2009-01-13T11:02:23.697 に答える
8

Apache と php を chroot した場合は、chroot した環境に /bin/sh も配置する必要があります。そうしないと、exec() または passthru() が正しく機能せず、エラー コード 127、ファイルが見つかりませんが生成されます。

于 2010-11-17T07:59:57.557 に答える
4

これはGoogleでトップの回答として出てくるので、修正を共有したいと思いました:

私が行った簡単な修正は、php.ini ファイルで safe_mode を無効にすることでした。

; Safe Mode
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off
于 2012-05-22T17:22:26.250 に答える
2

あなたの応答に感謝します!!

私はこれを試しました

//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

于 2009-01-13T11:25:38.080 に答える
1

他の誰かがまだこの問題を抱えている場合に備えて、ここの投稿を見てください。

http://gallery.menalto.com/node/2639#comment-8638

見積もり:

問題が見つかりました。問題は、私のセキュリティ偏執症の OpenBSD でした。3.1 から 3.2 にアップグレードする際に、以下が追加されました。

  • Apache はデフォルトで chroot されて実行されます。これを無効にするには、新しい -u オプションを参照してください。

chroot により、Apache はディレクトリの外部にアクセスできなくなりました。そのため、netpbm を含むすべてを apache ディレクトリに移動しました。すべてがアクセス可能で実行可能でしたが、exec() が常に 127 を返したため、何らかの「セーフ モード」のままだったと思います。

とにかく、 -u オプションを指定して httpd を実行すると、安全性の低い chroot されていない apache 起動に戻り、exec() が再び機能するようになりました。

于 2011-03-25T10:00:54.213 に答える
0

ohkiee guyz ありがとうございます ...そして、はい、$PATH にエラーが発生する可能性があります ...しかし、指定されたフル パスでは機能します :)

exec("/home/user/bin/unrar e /home/user/xxx/yyy/file.rar");

于 2009-01-13T15:29:53.000 に答える