2

コマンドを実行すると

gpg -e -r john@doe.com my_secret_file.txt

UNIX コマンド プロンプトから、正常に動作しています。しかし、PHP を使用して同じコマンドを使用しようとすると、機能しません。

$gpg = '/usr/bin/gpg';
$recipient = 'john@doe.com';
$secret_file = 'secret_file.txt';

echo shell_exec("$gpg -e -r $recipient $secret_file");

解決策を教えてください。

4

3 に答える 3

3

Demento が示唆するパーミッションの問題とは別に、スクリプトを実行するユーザーがコマンドラインで作業する場合と同じではない可能性もあり、このユーザーは john@doe.com の公開鍵を持っていないため、彼のためにファイルを暗号化することはできません。では、このスクリプトを実行するユーザーは誰でしょうか? だとするとwww-data、もしそうなら

carlos@server:~$ su - www-data
(insert www-data's password or do sudo su - www-data if sudo it's available)
www-data@server:~$ gpg --list-keys

john@doe.com のキーが見えますか?

于 2011-05-10T13:25:13.907 に答える
2

私のマシンであなたの例を試してみましたが、期待どおりに動作します。その結果、 という名前のローカル ディレクトリにsecret_file.txt.gpg、 に対して暗号化された追加のファイルが作成されjohn@doe.comます。これにより、実際のスクリプトに問題がないことが確認され、他の問題が存在する可能性があります。

スクリプト自体からの出力は表示されません。暗号化されたファイルは無音で生成されます。echo問題がなければ gpg は出力を生成しないため、プログラムの最後の行の は何もしません。shell_execのマニュアルをご覧ください。

ファイルがマシン上に作成されていない場合は、権限の問題である可能性があります。コマンド ラインからではなく Web アプリケーションからスクリプトを呼び出す場合、Web サーバー ユーザーには、新しいファイルを作成するためのファイル システムに対する適切な権限が必要です。

于 2011-05-10T12:58:13.523 に答える
0

次のコマンドを使用すると、エラーを確認できます。

$output = exec("$gpg -e -r $recipient $secret_file 2>&1", $out); 
echo "<pre>$output</pre>";

これはあなたを導きます。

考えられる問題:

  • 暗号化しようとしているファイルが正しいパスにありません。
  • GnuPGは、ユーザーとして「apache」を使用して/root/.gnupgディレクトリに書き込もうとしています。明らかに、このディレクトリへのアクセス権を変更しない限り、これは不可能です(推奨されません)。
  • GnuPGルートディレクトリへの適切なアクセス権がありません(どこにいても)
  • apacheが新しいファイルを作成しようとしているディレクトリにWRITEがありません。

あなたのコードが何を出力するか教えてください。私がお手伝いします。私はすでにこれに遭遇しました、それは退屈です。

于 2011-06-26T17:16:42.413 に答える