2011-07-19 27 views
1

は私がのgpgの暗号化に失敗しました:ファイルオープンエラー

私はCentOSのサーバーにインストールされているGnuPGをしている。これでナットを行くされていると私は(PHPページを介してアップロード)アップロードされたファイルを暗号化してみてください。コマンドラインを介してサーバー上で、それは完全に動作します。しかし、PHPスクリプトを経由して、それがこのエラーで失敗します。

gpg: /path-to-my-file/my-file: encryption failed: file open error 

(私はEXECコマンドを実行するために使用されていると思います)、ユーザーapacheのは、ファイルのディレクトリに読み取り/書き込みました。

ファイルが正常にアップロードされました(暗号化されていないファイルの削除をコードから削除したため、後で見ることができます)、PHPサイトから正しく削除できます。

私は実行コマンドは、次の

/path-to-gpg/gpg --homedir=/path-to-my-home-gnupg/.gnupg -e -r [email protected] the-unencrypted-file 

私はこれに取り組む可能性がどのように任意のアイデアですか? おかげ

答えて

1

いくつかのことをチェックする:

  • 実行system("ls " . escapeshellarg($file))をして結果を確認してください - それはファイルが見つかりませんか?アクセス拒否?それはデバッグに役立ちます。
  • system("whoami")を実行して、PHPがあなたが思っている通りに動作していることを確認してください。
  • echo "<pre>ls " . escapeshellarg($file) . "</pre>"を実行し、コマンドをコピーしてシェルから実行し、ファイルへのパスが期待どおりであることを確認します。

また、CentOSはデフォルトでSELinuxを実行していると思います。インストールされている場合は、ログが(/var/log/)でApacheがGPGを実行できないかどうか確認してください。

+0

私はこのすべてをチェックして、ファイルがあった結果 –

+1

に戻ってきましょう。私はApacheとして実行していた..しかし、エラーログは、実際に非常に有用であったので、それを指摘してくれてありがとう。私は実際にrootで所有されていて、apacheではなくどこにあるのか分かりました。結果として、Apacheはそれらを読み取ることができず、ファイルを暗号化できませんでした。所有権をApacheに変更することで問題が解決しました。ありがとうございましたdavid –

+0

恐ろしい、私は助けることができてうれしい。 –

0

は冗長モードで実際のapacheのユーザ権限でコマンドを実行してみてください:

su apache -c /path-to-gpg/gpg -vv ... 
関連する問題