在Linux中传递PHP和C可执行文件之间的数据

tom*_*136 6 php c linux string parameter-passing

在Linux下,如果我想将纯字符串从PHP传递给C,我该怎么做?我尝试过的是:

exec("./myexec.bin -a mystring");
Run Code Online (Sandbox Code Playgroud)

在PHP和

getopt(argc,argv, "a:");
Run Code Online (Sandbox Code Playgroud)

在C.

一切正常,但是当我传递字符串而不是MAX_ARG_STRLEN(131072)时,它将不再返回0而是返回127,这是命令未找到....

有没有其他方法将字符串数据传递给Linux可执行文件?还是有办法克服这个MAX_ARG_STRLEN问题?

Lin*_*een 6

您可以使用popen()打开可执行文件的管道:

$fp = popen('./myexec.bin', 'w');
fwrite($fp, $data);
pclose($fp);
Run Code Online (Sandbox Code Playgroud)

然后,如前所述,从stdinC程序中读取:

fopen(stdin, "r");
// ...
Run Code Online (Sandbox Code Playgroud)

使用popen()它比使用"更安全",而不是exec('/bin/echo')因为你可以编写本来由shell(&,|,...)解释的字符.请注意,popen() 必须关闭从PHP返回的句柄pclose().