3

出力を計算してその出力を返す c++ .exe に値を渡す PHP ファイルを作成しています。ただし、.exe からの出力を PHP ファイルに戻すことができないようです。

PHP コード:

$path = 'C:enter code here\Users\sumit.exe';
$handle = popen($path,'w');
$write = fwrite($handle,"37");
pclose($handle);

C++ コード:

#include "stdafx.h"
#include <iostream>
using namespace std;

// Declaation of Input Variables:
int main()
{
int num;
cin>> num;

std::cout<<num+5;
return 0;
}
4

3 に答える 3

3

コマンド以外はお勧めしませsystemん:php.netpopenproc_open

のように呼びます

$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr, also a pipe the child will write to
);
proc_open('C:enter code here\Users\sumit.exe', $descriptorspec, $pipes);

その後、プログラム ( )$pipesにデータを送信し、プログラム ( ) からデータを受信するためのハンドルが入力されます。また、プログラムから stderr を取得するために使用できるものがあります (または、stderr を使用しない場合は単に閉じます)。[0][1][2]

proc_close()でプロセス ハンドルを閉じ、 でパイプハンドルを閉じることを忘れないでくださいfclose()$pipes[0]ハンドルを閉じるか空白文字を書き込む前に、プログラムは出力が完了したことを認識しないことに注意してください。パイプを閉じることをお勧めします。

system()またはでコマンド ライン引数を使用popen()することは有効ですが、大量のデータや生データを送信する場合は、コマンド ラインの長さの制限や特殊文字のエスケープで問題が発生します。

于 2013-03-11T14:53:34.690 に答える
1

あなたのC++コードでは、必要な変数を渡すために何も表示されません

 int main(int argc, char* argv[])

それ以外の

 int main()

argc は変数の数であり、ファイルへのパスが含まれていることに注意してください。したがって、引数は 1 から始まり、各 argv はその引数の c-string です。10 進数が必要な場合は、atof を使用するか、整数を表す atoi を使用します。

次に、popen を使用しています。 PHP のドキュメントには、読み取りまたは書き込みにのみ使用できると書かれています。双方向ではありません。proc_openを使用して双方向をサポートしたい。

とにかく、これは私があなたのC++コードを書く方法です:

#include "stdafx.h"
#include <iostream>

// Declaation of Input Variables:
int main(int arc, char* argv[])
{
   int num;
   num = atoi(argv[1]);

   std::cout<<num+5;
   return 0;
 }

注:メイン関数 (つまり) でまだ名前空間を使用しようとしていて、それをグローバル名前空間から除外した方がよいusing namespace stdことに気づいたので、削除しました。std::cout

于 2013-03-11T14:47:26.490 に答える
0

exeファイルに書き込んでいる場合、引数を次のように渡す必要があります

system("C:enter code here\Users\sumit.exe 37");
于 2013-03-11T14:36:48.083 に答える