2

exec() を使用して、php スクリプトから main() 関数で実行可能ファイルを呼び出しています。これは正常に機能しますが、配列を返すだけでなく、すべての printf() 値を返します。

main.cpp:

#include<stdio.h>
#include<string.h>
#include "foo.h"
int main(int argc, char *argv[] )
{
    char buffer[1024];
    char *ch;
    static int ar[2];
    strcpy(buffer,argv[1]);
    printf("Client : \n");
    if ( argc != 2 ) /* argc should be 2 for correct execution */
    {
              printf( "\n%s filename\n", argv[0] );
    }
    else 
    {
        printf("\nstring is :%s \n",buffer);
    ch=foo(buffer);
    ar[0]=((int*)ch)[0];
    ar[1]=((int*)ch)[1];
    printf("Counts is :%d  %d \n",ar[0],ar[1]);
    }
    return (int)ar;

}

私のtest.php

<?php
$s="critic worst";
escapeshellarg($s);
$a=array(shell_exec('/home/technoworld/Videos/LinSocket/client "nice bad"'));
print_r($a[0]);
//echo exec('whoami');
?>

出力を示します:

Client : string is :nice bad Positive count: 2 Negative count: 2 array item2 2 Count is :2 2

私も同じ問題を与える exec() で試しました。main.cpp から ar[0] と ar[1] を取得する方法を提案できる人はいますか?

Client : string is :nice bad Positive count: 2 Negative count: 2 array item2 2 

これは、foo.cpp ファイルに存在するすべての printf() からのものです。

exec() を使用すると、Count is :2 2

正確な ar[0] と ar[1] を取得する方法

4

3 に答える 3

2

助けてくれたエリアスに感謝します。これが解決策です:

<?php

if (preg_match_all('/[^=]*\=([^;@]*)/', shell_exec('/home/technoworld/Videos/LinSocket/client "nice bad worst good"'), $matches))
{
   $x = (int) $matches[1][0];//optionally cast to int
   $y = (int) $matches[1][1];
   echo $x. '<br/>'. $y. '<br/>'
}

?>

$x$yそれぞれ ar[0] と ar[1] を含む

于 2013-07-08T15:02:32.110 に答える
1

これも機能します:

if (preg_match_all('/[^=]*=([^;@]*)/', shell_exec("/home/technoworld/Videos/LinSocket/client '$s'"), $matches)) //Values stored in ma.
{
    $x = (int) $matches[1][0];  //optionally cast to int
    $y = (int) $matches[1][1];
}

echo "<br/>"; echo "Positive count :$x";
echo "<br/>"; echo "Negative count :$y"; echo "<br/>";
于 2013-07-14T06:11:36.653 に答える