我想使用PHP 'exec‘一个pgp加密命令。不管命令行如何,我都会得到一个错误64 (解析器错误)或162 (在编码期间完全失败)。因此,我已经将PHP程序中的命令行简化为这个简单的指纹显示,它仍然会出错:
exec("/opt/pgp/bin/pgp --fingerprint", $results);如果我在命令行上运行"/opt/pgp/bin/pgp -指纹“,就会得到”找到两个键“和预期的显示。但是PHP下的同一个exec给出了解析器错误64。我对string命令尝试了"\n“,这并没有什么区别。用户在具有pgp执行权限的浏览器中以“任何人”的身份运行。(如果pgp至少没有启动,我甚至不会从它中看到‘解析器错误’。)
为了在PHP下运行pgp,我需要做什么特别的事情吗?
我又开始尝试对数据文件进行加密。下面是pgp创建的“状态文件”输出。它清楚地显示了我试图加密的'test.txt‘文件的最后一行“拒绝权限”上的错误。那是假的。我已经将世界范围的r/w都授予了这个文件,它很清楚地访问了它,因为它的状态表明它已经加密了内容。所以,真正的问题是,什么是被拒绝的许可?
其他一些信息:如果我从命令行对这个调用pgp的PHP脚本运行PHP,它就可以正常工作--文件会被加密。当从浏览器调用ALso时,PERL运行相同的命令(使用SYSTEM())。但是,当浏览器调用这个PHP脚本时,它会失败。显然,作为“无人”运行存在一些权限问题。
/export/home/pgphome/..pgp/pubring.pkr:公开密钥环(1006:公共密钥环)/导出/home/pgphome/..pgp/secring.skr:开放式密钥环(1007:专用密钥环) 0x221DC947:encrypt (1030:密钥添加到收件人列表) /export/home/eckankar/dev/www/info/test.txt:encrypt (3048:用密码AES-128加密的数据) /export/home/eckankar/dev/www/info/test.txt:encrypt (3124:拒绝许可)
这里是PHP ()命令的论据: /opt/pgp/bin/pgp -加密/导出/home/eckankar/dev/inc/test.txt-output /export/home/eckankar/dev/www/info/test.xxx -r成员--重写删除--home-dir /export/home/pgphome/.pgp -v -状态-文件/导出/home/eckankar/dev/inc/test.txt.err
ALl此命令中的文件夹/目录已将'rwx‘授予世界。
如果从命令行(/opt/csw/php 5/bin/php test.php)运行,而不是通过浏览器运行,则当加密成功时,状态输出文件如下所示:
pgp:加密(3157:当前当地时间2009-06-30T11:51:17-05:00) /export/home/pgphome/.pgp/.pgp/pubring.pkr:公开密钥环(1006:公共密钥环)/导出/home/pgphome/.pgp/secring.skr:打开密钥环(1007:私人密钥环) 0x221DC947:encrypt (1030:密钥添加到收件人列表) /export/home/eckankar/dev/inc/test.txt:encrypt (3048:用密码AES-128加密的数据)/导出/home/eckankar/dev/inc//test.txt:encrypt (0:输出文件/导出/home/eckankar/dev/inc/test.txt.pgp)
发布于 2009-06-30 23:17:26
答案是:需要在命令行中指定一个-temp。
发布于 2009-06-29 18:30:07
这个PHP脚本运行在什么执行上下文中?交互命令行,cron作业,Web服务器(我不希望如此)?
根据对此的答案,我可能会开始研究PGP所依赖的环境变量,这些变量在从这个脚本运行时没有设置。
发布于 2015-05-21 20:05:04
我知道这很旧,但我被咬了。(pgp 8.5)
正如Jim所说,这是一个目录权限问题。但是至少pgp 8.5不允许您以任何方式设置tmpdir。
我的解决方案(伪码):
save cwd
chdir(/tmp/)
system()/exec() pgp command
chdir(saved_cwd)奇怪的是,pgp强制在cwd中创建tmp dir,但是我没有看到任何影响位置的标志。
https://stackoverflow.com/questions/1059723
复制相似问题