2

わかりました、PHP スクリプトを使用してクローラーを作成したかったのです。クローラーの特定の部分では、文字列を非常に高速に操作する必要があるため、C/C++ プログラムを使用してその特定のジョブの PHP スクリプトを支援することにしました。以下は私のコードです:

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

main は、私の C ファイルを使用して生成された実行可能ファイルmain.cですmain.exe。上記の操作では、PHP から 2 つの値を受け取り、2 つの値の合計を返す単純な C プログラムを作成しました。以下は、私の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;
}

私はCMDmain 1 1を介してプログラムを実行しようとしましたが、返されました2....うまくいきました! このようにphpスクリプトに入力すると、

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

期待どおりに機能しなかったので、アイデア、提案、またはコードで行う必要があるその他のこと。例を示していただければ幸いです。前もって感謝します!!!

4

3 に答える 3

3

変数を渡すので、引数を二重引用符で囲む必要がありexecます。そして、プログラムの出力は の 2 番目の引数にありexecます。

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

exec()リファレンスを参照してください。

于 2012-06-17T08:06:02.333 に答える
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;
}
于 2012-06-17T08:10:18.843 に答える
0

実行可能ファイル ./main を作成する必要があります。そして、このコードを使用してください。

<?php
 $a=1;
 $b=1;
 echo exec("./main $a $b"); 
?>
于 2012-06-17T08:36:21.747 に答える