2013-07-07 65 views
1

我有一个C程序进行系统调用(CentOS的6.0),加密文件,我的代码是:如何通过浏览器在php中执行系统调用?

#include <stdlib.h> 
int main() { 
system ("gpg -c --batch --passphrase mypass file.txt"); 
return 0; 
} 

可执行对象被称为encrypt_file 当我通过命令行运行./encrypt_file直接运行完全我得到我的file.txt.gpg,但是当我尝试通过浏览器执行它,我没有得到任何回应。 代码在PHP:

shell_exec("./encrypt_file"); 

我选择了把交流计划的原因是我需要的密码是在代码,但不可见的,当我删除包含所有我已经离开了密码.c文件是我的.exe并没有可见的密码。

我已经变的权限apache用户通过发出以下内容:

chown apache.apache /var/www/html/ 

而且添加在/ etc/sudoers文件的下一行:

apache ALL=(ALL) NOPASSWD:ALL 

注:唯一的命令我有问题是gpg,我可以使用任何其他需要使用的命令进行系统调用,甚至可以运行python脚本以及其他不包含任何与gpg相关的C程序。

希望快速回复!我需要使用很多这个encrypt_file!

+0

你作为一个c文件的原因是没有水,把它放在一个php文件中,然后删除它。 – 2013-07-07 20:30:38

+0

请问你能更具体一点吗?我不明白“不喝水”的部分。 – HIDS2013

+0

使用绝对路径到gpg或确保它在Apache的'PATH'中。 –

回答

0

检查在/ var error_log里/日志/的httpd/error_log中,我看到这行:

gpg: Fatal: can't create directory `/var/www/.gnupg': Permission denied 

然后我发现在这个网站的解决方案 - >http://gnupg.10057.n7.nabble.com/Exi...pt-td7342.html

我增加了--homedir选项用我在apache的error.log中找到的PATH到gpg命令,它完美的工作!

谢谢大家!

相关问题