<?php
echo exec('whoami');
?>
它工作正常,即使是其他單個詞命令
但exec('gcc -o a hello.c');
它不創建對象文件。
或者當我嘗試使用預先創建的目標文件exec('./a');
時,它不作任何更改。沒有錯誤沒有通知!
任何幫助是可觀的!
<?php
echo exec('whoami');
?>
它工作正常,即使是其他單個詞命令
但exec('gcc -o a hello.c');
它不創建對象文件。
或者當我嘗試使用預先創建的目標文件exec('./a');
時,它不作任何更改。沒有錯誤沒有通知!
任何幫助是可觀的!
你可以嘗試在PHP中使用shell_exec()
:
shell_exec('gcc -o a hello.c');
應該工作
基本參考:
exec()
manual page有了這些要素,它是直接獲得錯誤信息:
<?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.
什麼是$ output和$ return_value的值? – Catty
請原諒?你是在問我猜猜你的電腦裏輸出的是什麼? –
最有可能的解釋是,您的網站的用戶賬號服務器不具有對該目錄的寫入權限。您可以通過在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 .
理想情況下,你應該創建一個寫訪問一個單獨的目錄,並限制任何輸出到那裏,而不是改變在網站根目錄的權限。但是你可以先從根開始,並確保這是真正的問題,然後再付出太多的努力。
嘗試指定「hello.c」和「a」的完整路徑。 –
還取決於你是否有權使用你的用戶的gcc它是你的服務器還是虛擬主機? – Prix
@AleksG:我試着用exec('gcc -o/opt/lampp/htdocs/a /opt/lampp/htdocs/hello.c');但沒有chage! – Catty