好的我想用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;
它没有按预期工作,所以我需要对我的代码做任何想法,建议或其他任何事情。如果你能告诉我一个例子我会很棒。感谢提前!!!
答案 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");
?>