我有一个简单的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执行此应用程序?
答案 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