我需要从PHP脚本执行C程序

时间:2012-06-17 07:59:27

标签: php c++ c exec

好的我想用PHP脚本创建一个爬虫。我的爬虫的某些部分需要对字符串进行真正的快速操作,这就是为什么我决定使用C / C ++程序来帮助我完成该特定工作的PHP脚本。以下是我的代码:

$op=exec('main $a $b');
echo $op;

main是使用我的C文件main.c生成的可执行文件,即main.exe。在上面的操作中,我只做了一个简单的C程序,它从PHP接受2个值并返回两个值的总和。以下是我的C程序看起来像

#include< stdio.h >
#include< stdlib.h >
int main(int argc, char *argv[])
{
  int i=add(atoi(argv[1]),atoi(argv[2]));
  printf("%d\n",i);
  return 0;
}

int add(int a, int b)
{
  int c;
  c=a+b;
  return c;
}

我尝试通过CMD main 1 1执行该程序,并返回2 ....它有效!当我在这样的php脚本中输入它们时,

$a=1;
$b=1;
$op=exec('main $a $b');
echo $op;

它没有按预期工作,所以我需要对我的代码做任何想法,建议或其他任何事情。如果你能告诉我一个例子我会很棒。感谢提前!!!

3 个答案:

答案 0 :(得分:3)

您应该使用双引号括起exec的参数,因为您传递的是变量。并且程序的输出位于exec的第二个参数中。

exec("main $a $b", $out);
print_r($out);

请参阅exec() reference

答案 1 :(得分:2)

函数atoi()无法区分无效和有效输入。 我建议你改用strtol()

#include <stdio.h>
#include <stdlib.h>

void quit(const char *msg) {
  if (msg) fprintf(stderr, "%s\n", msg);
  exit(EXIT_FAILURE);
}

int add(int, int);

int main(int argc, char *argv[]) {
  int a, b, i;
  char *err;

  if (argc != 3) quit("wrong parameter count");
  a = strtol(argv[1], &err, 10);
  if (*err) quit("invalid first argument");
  b = strtol(argv[2], &err, 10);
  if (*err) quit("invalid second argument");

  i = add(a, b);
  printf("%d\n", i);
  return 0;
}

int add(int a, int b) {
  return a + b;
}

答案 2 :(得分:0)

您需要创建可执行文件./main。 然后使用此代码。它可以工作

<?php
 $a=1;
 $b=1;
 echo exec("./main $a $b"); 
?>