我需要帮助使用GPG加密PHP中的文件。我做了一些研究,但我找不到解决方案。
在命令行中使用GPG可以很好地工作,但是当我从PHP尝试时,我得到一个返回值2。 我也尝试将'--yes --always-trust'作为额外的开关传递给命令,如其中一个答案中提出的那样,但没有快乐。
我尝试使用PHP内置的gnupg函数 - 我发现的所有示例都显示了如何加密字符串而不是文件。将文件作为字符串读取对我来说不起作用,因为我正在处理大到15MB的大文件。
我需要帮助!
环境详情
OS: Windows 7
PHP installation: WAMP Server 2.1
代码
$path = "c:\wamp\www";
$recipient = "Test user";
$encrypted_file = "c:\wamp\www\test.txt.gpg";
$decrypted_file = "c:\wamp\www\decrypted_test.txt";
$plain_file = "c:\wamp\www\test.txt";
exec('gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt $plain_file --yes --always-trust', $answer, $rtn);
var_dump($answer);
var_dump($rtn);
echo "<br />ANSWER: ".$answer;
echo "<br />RTN: ".$rtn;
输出
array(0) { } int(2)
ANSWER: Array
RTN: 2
PHP User: nt authority\system
答案 0 :(得分:1)
尝试更改
exec('gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt $plain_file --yes --always-trust', $answer, $rtn);
要
exec("gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt $plain_file --yes --always-trust", $answer, $rtn);
注意我将单引号改为双引号
答案 1 :(得分:0)
你混淆使用单引号和&amp;双引号。
$path = 'c:\wamp\www';
$recipient = 'Test user';
$encrypted_file = 'c:\wamp\www\test.txt.gpg';
$decrypted_file = 'c:\wamp\www\decrypted_test.txt';
$plain_file = 'c:\wamp\www\test.txt';
在这一行:
exec("C:\\Wamp\\WWW\\gpg --homedir $path --recipient $recipient --output $encrypted_file --encrypt $plain_file --yes --always-trust", $answer, $rtn);
当需要PHP解析字符串时使用双引号(记下Escape字符);当字符串不需要解析时使用单引号。