簡體   English   中英

php中的shell_exec命令無法正常工作

[英]shell_exec command in php not working properly

我正在嘗試使用shell_exec命令執行C程序,該命令需要傳遞參數。 它適用於一個輸入,但不適用於其他輸入。 我試圖通過終端運行C程序,它適用於所有輸入。

這是我的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;
<?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;

因為你在終端而不是在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代碼

[akshay@gold 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;
}

[akshay@gold tmp]$ gcc test.c 

示例php腳本

[akshay@gold 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;
?>

執行和輸出

[akshay@gold 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM