2011-12-19 72 views
3

我的託管服務器上有一個C++二進制文件(使用Arvixe FYI託管)。我在我的網站上有一個需要3個輸入的表單。我把這3個輸入,並使用PHP將它們放入一個文件。我正試圖從PHP中調用我的C++應用程序。該應用程序需要2個參數,第一個是帶有輸入的文件,第二個是需要輸出的文件。使用PHP在Linux服務器上運行C++可執行文件

當我使用終端運行時,該應用在我的Mac上正常工作,但是當我將它放在託管服務器上時,該應用未運行。

這裏是我的腳本PHP代碼:

$user = JFactory::getUser(); 
$time_date = date("m-d-Y").time(); 
$file1 = "model1_".$user->id."_".$time_date."_input.txt"; 
$file2 = "model1_".$user->id."_".$time_date."_output.txt"; 
$path1 = "/home/hhansen/public_html/ads/".$file1; 
$path2 = "/home/hhansen/public_html/ads/".$file2; 

$file_handle = fopen($path1,'w'); 

$content = trim($_POST['form']['Input 1'])."\r\n"; 
$content .= trim($_POST['form']['Input 2'])."\r\n"; 
$content .= trim($_POST['form']['Input 3'])."\r\n"; 

fwrite($file_handle,$content); 
fclose($file_handle); 

$output = exec("/home/hhansen/public_html/ads/./model1 $path1 $path2",$retval); 

是否有人可以提供一些線索?輸入文件正在直接創建。我對服務器內的應用程序具有執行權限。我不確定可執行文件是否完全沒有運行,或者它是否因爲權限問題或其他原因而沒有生成輸出。

  • 它是我的語法嗎?
  • 我使用了錯誤的功能嗎?
  • 我應該在PHP中使用什麼命令將命令發送到終端並執行此操作?
+0

你把它編譯成Linux二進制文件嗎?你不能從Mac複製和粘貼到Linux。二進制文件是「model1」,對嗎? – FakeRainBrigand 2011-12-19 00:35:51

+0

正確。這可能是我的問題。無論如何,我可以將它編譯到我的Mac上的Linux二進制文件? – hanleyhansen 2011-12-19 00:41:40

+0

我認爲它是依賴於架構的,但是有[交叉編譯技術](http://www.gc-linux.org/wiki/Cross-compiling)。我沒有經驗做我自己,但它看起來像gcc/g ++將是一個很好的解決方案。還有[維基百科文章](http://en.wikipedia.org/wiki/Cross_compiler#GCC_and_cross_compilation)。 – FakeRainBrigand 2011-12-19 00:56:44

回答

0

大多數商業共享主機以安全模式運行PHP,它不允許使用exec()或至少將其限制爲特殊目錄。用簡單的可執行文件檢查。

+0

exec()被允許並且安全模式未被啓用。 – hanleyhansen 2011-12-19 00:46:29

相關問題