2013-07-07 64 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命令,它完美的工作!

謝謝大家!

相關問題