使用php传递带有命令行可执行文件路径的参数

时间:2014-02-10 20:42:58

标签: php c++ xcode executable

我有一个简单的hello world命令行应用程序,我试图通过php执行,但我不知道如何切换到应用程序的调试文件夹,然后运行可执行文件。到目前为止,我已经尝试使用popen来移动终端所在的位置,但是在我完成它的方式上似乎不正确,然后使用exec来执行命令。

继承我的PHP文件:

<?php
$loc = '/Users/dave/Library/Developer/Xcode/DerivedData/HelloWorld-akuofooecqboeybtsfalcrelvfjt/Build/Products/Debug';
$argv = "./HelloWorld j";
popen($loc, 'r');
echo exec($argv);

继承我的c ++命令行程序:

#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
    if( argc < 2 )
    { printf("Please enter a value \n");
        return -1;
    }
    std::cout << argv[1]<<"\n";
    std::cout << "Hello, World!\n";
    return 0;
}

调试文件夹的目录是/Users/dave/Library/Developer/Xcode/DerivedData/HelloWorld-akuofooecqboeybtsfalcrelvfjt/Build/Products/Debug并执行此目的我使用./HelloWorld x(稍微注意如果HelloWorld应用程序有空格,这将如何工作?)

当我从终端运行时,一切正常,所以这对c ++文件来说不是问题。

有人可以告诉我如何从php执行此应用程序?

1 个答案:

答案 0 :(得分:2)

在php中你可以通过system()函数执行命令:

system('YOUR COMMAND - FOR EXAMPLE ./HelloWorld (in your path)');

获取结果,您可以将其放入变量中。

$test=system("some command");
var_dump($test);

在你的情况下:

system('PATH/HelloWorld j'); // runs your HelloWorld executable file

另一种解决方案是使用shell_exec()功能。作为php.net的例子:

$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
每个人都有自己的优点和缺点。您可以在php.net/关注链接中阅读有关所提及功能的更多信息:

shell_exec — Execute command via shell and return the complete output as a string

system — Execute an external program and display the output