2014-02-10 35 views
0

我有一個簡單的Hello世界命令行應用程序,我試圖通過PHP執行,但我不知道如何切換到應用程序的調試文件夾,然後運行可執行文件。到目前爲止,我已經嘗試使用popen來移動終端所在的位置,但是在我已經完成的方式中看起來不正確,然後使用exec來執行該命令。通過參數與命令行路徑可執行文件與PHP

繼承人我的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; 
} 

所在的目錄,這樣做的debug文件夾是/Users/dave/Library/Developer/Xcode/DerivedData/HelloWorld-akuofooecqboeybtsfalcrelvfjt/Build/Products/Debug和執行該我用./HelloWorld x(輕微請注意,如果HelloWorld應用程序有空間,這將如何工作?)

一切工作正常,當我做從終端運行它,所以它不是一個C++文件的問題。

那麼有人可以告訴我怎麼才能從php執行這個應用程序?

回答

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/following鏈接瞭解更多關於提到的功能:

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

system — Execute an external program and display the output

+0

如何將這項工作?如果系統沒有被使用,而我不在正確的目錄中,它不會給我一個答案。 – user3144542

+0

您必須將您的可執行應用程序放入預定義的目錄中。例如在你的PHP應用程序的目錄中。其目錄是否動態變化? –

+1

你可以很容易地做到:system('PATH/HelloWorld j') –