2017-02-04 174 views
3

我想用shell_exec命令執行一個C程序,它需要傳遞參數。它爲一個輸入工作,但不爲其他人工作。我試圖通過終端運行C程序,它正在爲所有的輸入工作。在php中shell_exec命令不能正常工作

這是我的execprog.php文件。我必須給2個輸入作爲文件的命令行參數。 /var/www/project是路徑。

$query = "/var/www/project/./a.out /var/www/project/constraints.txt /var/www/project/constraints_keyword.txt /var/www/project/FIB.txt /var/www/project/ANS.txt"; 

echo $query; 

$var = shell_exec($query); 

echo $var; 
+2

歡迎堆棧溢出!你可以先參加[遊覽]並學習[問]一個很好的問題,然後創建一個[mcve]。這使我們更容易幫助你。 – Katie

+3

Atleast向我們展示了迄今爲止你做了什麼? –

+0

嘗試引用參數:http://stackoverflow.com/a/16932201/454827 – ZiTAL

回答

0
<?php 
$query = "/var/www/project/./a.out"; 
$arguments = array 
(
    '/var/www/project/constraints.txt', 
    '/var/www/project/constraints_keyword.txt', 
    '/var/www/project/FIB.txt', 
    '/var/www/project/ANS.txt' 
); 
$string = ''; 
for($i=0;$i<count($arguments);$i++) 
    $string.= ' %s'; 

$command = vsprintf("{$query}{$string}", $arguments); 
$var = shell_exec($command); 
echo $var; 
+0

不工作..!我在瀏覽器上打印查詢即$命令..如果我運行此查詢打印在瀏覽器上的終端其工作正常.. –

+0

驗證Web服務器用戶是否可以運行此代碼。 – ZiTAL

+0

如何驗證? –

0

正如你它工作在終端上,而不是在apache那麼Apache的php.ini文件可能會被禁止使用的shell_exec()

http://www.php.net/manual/en/ini.core.php#ini.disable-functions

你的Apache的php.ini文件可能看起來像

disable_functions=exec,passthru,shell_exec,system,proc_open,popen 

從該列表中刪除shell_exec並重新啓動Web服務器,雖然這是一個安全風險,我不建議這樣做。

在一般功能如execshell_execsystem總是用來執行外部程序。即使是一個shell命令也可以被執行。如果啓用了這兩個功能,那麼用戶可以輸入任何命令作爲輸入並執行到您的服務器中。所以通常人們在Apache配置中禁用爲disable_functions來保護他們的網站。

它爲我的作品 - 這是試運行

抽樣檢測c代碼

[[email protected] tmp]$ cat test.c 
#include<stdio.h> 

int main(int args, char *argv[]) { 
int i = 0; 
for (i = 0; i < args; i++) 
printf("Arg[%d] = %s\n",i, argv[i]); 
return 0; 
} 

編譯

[[email protected] tmp]$ gcc test.c 

樣品php腳本

[[email protected] tmp]$ cat test.php 
<?php 
$query = "/tmp/./a.out /var/www/project/constraints.txt /var/www/project/constraints_keyword.txt /var/www/project/FIB.txt /var/www/project/ANS.txt"; 
$var = shell_exec($query); 
echo $var; 
?> 

執行和輸出

[[email protected] tmp]$ php test.php 
Arg[0] = /tmp/./a.out 
Arg[1] = /var/www/project/constraints.txt 
Arg[2] = /var/www/project/constraints_keyword.txt 
Arg[3] = /var/www/project/FIB.txt 
Arg[4] = /var/www/project/ANS.txt 
+0

它的工作,如果我們在終端上運行的PHP文件,但它不工作的瀏覽器.. –

+0

再次閱讀我的答案,你必須檢查配置其禁用我猜 –

+0

我已經檢查過它。它沒有被禁用。 –