2013-07-01 39 views
3

當我運行如何在php中使用exec命令編譯和運行c程序?

<?php 
echo exec('whoami'); 
?> 

它工作正常,即使是其他單個詞命令

exec('gcc -o a hello.c');它不創建對象文件。

或者當我嘗試使用預先創建的目標文件exec('./a');時,它不作任何更改。沒有錯誤沒有通知!

任何幫助是可觀的!

+2

嘗試指定「hello.c」和「a」的完整路徑。 –

+0

還取決於你是否有權使用你的用戶的gcc它是你的服務器還是虛擬主機? – Prix

+0

@AleksG:我試着用exec('gcc -o/opt/lampp/htdocs/a /opt/lampp/htdocs/hello.c');但沒有chage! – Catty

回答

1

你可以嘗試在PHP中使用shell_exec()

shell_exec('gcc -o a hello.c');應該工作

3

基本參考:

有了這些要素,它是直接獲得錯誤信息:

<?php 

exec('gcc -o a hello.c 2>&1', $output, $return_value); 

echo ($return_value == 0 ? 'OK' : 'Error: status code ' . $return_value) . PHP_EOL; 
echo 'Output: ' . PHP_EOL . implode(PHP_EOL, $output); 

例如,我得到這個在我的(Windows)中的計算機:

Error: status code 1 
Output: 
"gcc" no se reconoce como un comando interno o externo, 
programa o archivo por lotes ejecutable. 
+0

什麼是$ output和$ return_value的值? – Catty

+0

請原諒?你是在問我猜猜你的電腦裏輸出的是什麼? –

1

最有可能的解釋是,您的網站的用戶賬號服務器不具有對該目錄的寫入權限。您可以通過在php中運行whoami來確定帳戶名稱。

exec('whoami', $output); 
echo $output[0]; 

我不知道你會從得到什麼輸出,但讓我們說這是www-data這是我所看到的在Ubuntu。現在

,如果你看一下Web根目錄的權限,你可能會發現,它是由另一個帳戶擁有,也許和權限rwxr.xr.x所以只有訪問。

人給www數據寫訪問的方法是讓它的主人:

chown www-data . 

另外,您可以將組設置爲www數據並確保該組有寫權限。

chgrp www-data . 
chmod 775 . 

最糟糕的情況下,你可以給每個人寫入權限,但我不會推薦這個,除非沒有別的作品。

chmod 777 . 

理想情況下,你應該創建一個寫訪問一個單獨的目錄,並限制任何輸出到那裏,而不是改變在網站根目錄的權限。但是你可以先從根開始,並確保這是真正的問題,然後再付出太多的努力。