从PHP调用C++应用程序-输出显示“;数组”;


Calling a C++ app from PHP - output shows "Array"

我想知道是否有人能帮我,我想调用一个小应用程序,只需返回输入即可-这只是一个简单的测试,看看我是否可以使用Ubuntu从php控制C++应用程序。然而,当我应该得到"你好"时,我得到的只是"数组"。

我这样做对吗?

这是PHP:

<?PHP 
    echo exec('whoami');
echo "---";
    echo exec('pwd');
echo "---";
    echo "Hello World - From PHP";
echo "---";
$dt = new DateTime();
echo $dt->format('Y-m-d H:i:s');
echo "---";
exec('var/www/aws-app-dev Hello', $output);
echo $output;
echo "---";
echo "end";
?>

这是一个简单的应用程序代码(全部!)

#include <iostream> using namespace std;
int main (int argc, char** argv) {
string i; i = argv[1];
cout << "aws-dev-app says | " + i << endl; // prints return 0; }

知道哪里出了问题吗?

浏览器中的输出为:

theadmin---/var/www/---Hello World - From PHP---2013-12-02 20:45:15---Array---end

然而它应该是:

theadmin---/var/www/---Hello World - From PHP---2013-12-02 20:45:15---Hello---end

始终首先检查文档!

从PHP.net中,我们看到exec的签名是

string exec ( string $command [, array &$output [, int &$return_var ]] )

注意,output(第二个参数)是一个数组。

output

如果存在output参数,则指定的数组将填充该命令的每一行输出。

要查看您的程序返回的内容,请替换:

echo $output;

带有

print_r($output);

尝试:

echo exec('var/www/aws-app-dev Hello');

如果您的程序只返回一行,则此操作有效。你也可以这样做:

exec('var/www/aws-app-dev Hello', $output);
foreach ($output as $line) {
   echo $line, "<br />'n";
}

echo更改为print_r,这样您就可以看到完整的输出,然后为我们粘贴出来——看起来可能存在换行符,导致PHP将输出作为数组而不是字符串。