当前位置: 首页 > 知识库问答 >
问题:

php中的shell_exec命令工作不正常

佟和安
2023-03-14

我试图使用shell_exec命令执行一个C程序,它需要传递参数。它为一个输入工作,但不为其他输入工作。我试图通过终端运行C程序,它为所有输入工作。

这是我的执行程序。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个答案

戚兴思
2023-03-14

因为它在终端上工作,而不是在apache上工作,所以apache的php.ini文件可能会禁用shell_exec()的使用。

看见http://www.php.net/manual/en/ini.core.php#ini.disable-功能

您的apache的php。ini文件可能看起来像

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

从该列表中删除shell\u exec,然后重新启动web服务器,尽管这存在安全风险,我不建议这样做。

通常,诸如execshell\u execsystem等功能总是用于执行外部程序。甚至可以执行shell命令。如果启用了这两个功能,则用户可以输入任何命令作为输入并在服务器中执行。因此,人们通常在apache配置中禁用disable_函数,以保护他们的站点。

这对我来说很有效-这里是测试运行

样本测试ccode

[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

秦俊友
2023-03-14
<?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;
 类似资料:
  • 我目前有一个PHP页面,我的网络服务器服务。为了显示我需要在页面上显示的所有信息,我需要从外部python脚本输出。所以我一直在使用php的exec()命令来执行python脚本,并捕获字符串数组中的输出,如下所示: 然而,从来没有任何要打印的条目,但是当我直接在服务器的控制台上运行该命令时,它将正确输出。我已经尝试在我正在执行的网页上回显命令,这是正确的命令。我认为它唯一能做的就是exec()不

  • 我尝试将rgb颜色转换为透明 当我在命令行中使用这段代码时,它工作得非常好。 但当我将其与php一起使用时: 我得到一个错误: 转换:无法打开映像“/home/me/web/mynew”。png':@错误/blob。c/OpenBlob/2498。 有人有主意吗?

  • 我有一个工作的外壳脚本,使用Kilall杀死程序的所有实例,如下所示: 基尔abc 现在,我编写了一个php网页,使用shell_exec函数执行此脚本: shell_exec('sh./myscript.sh'); 问题是,我的PHP代码在命令行上正确地使用"phpmyscript.php",但在浏览器中不起作用!。然而,我知道命令行中的用户是root,而php中的用户是apache(我用who

  • 我已经下载了jdk 1.8.0\u 131 当我打开命令提示符并编写以下命令-java-version时,它会给出输出 但是当我编写以下命令时:javac-version它会给我输出 我已经编辑了系统变量路径-C:\Progra~1\Java\jdk1.8.0_131\bin; 当我执行以下命令时:"C:\Program Files\Java\jdk1.8.0_131\bin\javac"-ver

  • 我已经使用cocoapods安装了swiftlint,它工作正常 但当我试图在终端中使用命令时,它给出了以下错误 我是否需要做任何其他设置,使命令在终端工作? 注意:由于Mac上的一些限制,不能使用SwiftLint包。

  • 我有一个PHP脚本,用于从供应商合作伙伴导入数据。它需要做的一件事是通过shell_exec()调用另一个脚本,然后处理一个图像文件并将其上传到AmazonS3存储桶。我现在正在终端上观看这个脚本的输出,过了一会儿,我看到一系列消息,内容如下: 奇怪的是,同一个脚本在这个脚本中被多次调用,开始工作,然后停止。它也是从其他脚本调用的,在这些脚本中运行良好。当我复制它无法运行的命令并将其粘贴到我自己时