2012-12-06 77 views
1

我想編寫PHP腳本,它在Linux機器上執行C++可執行文件。我使用exec()或system()PHP函數。但它不執行C++可執行文件。 我的代碼如下。 Proc是編譯的C++可執行文件。完全相同的命令在shell中工作正常。在PHP上運行C++可執行文件

echo system('/var/www/image_proc/proc "/var/www/image_proc/images/original/5_1.png" 70 0 0 "/var/www/image_proc/images/processed/5_2.png"'); 

我檢查了執行和寫入文件的所有權限。我正在使用絕對路徑來確保它不是路徑問題。

有人知道,有什麼可能是一個問題? 任何幫助表示讚賞。

+0

您是否看到錯誤?或者你只是看不到你期望的輸出? –

+0

我沒有得到任何錯誤。 – Karmar

+0

以下工作? <?php error_reporting(E_ALL); ini_set(「display_errors」,1);回聲系統(「ls」); ?>如果沒有,它顯示任何東西? – 2012-12-06 17:32:07

回答

1

我懷疑問題是使用引號。 SHELL可能擴展/評估這些,但是調用system()不會。因此libc system

建議的解決辦法是:

<?php 
    error_reporting(E_ALL); 
    ini_set("display_errors", 1); 
    $src = "/var/www/image_proc/images/original/5_1.png"; 
    $dst = "/var/www/image_proc/images/processed/5_2.png"; 
    $cmd = sprintf("/var/www/image_proc/proc %s 70 0 0 %s", $src, $dst); 
    $result = system($cmd, $retval); 
    printf("Result: '%s'\n\nReturn value: %d\n\n", $result, $retval); 
?> 

這既會輸出的命令,或一個有用的錯誤信息的結果。尤爲重要的是,這給了我們一個返回值,我們可以根據這個值來找出發生的事情。

+0

感謝您的回答。我也試過這個,但仍然是同樣的問題,返回碼是127,這意味着system()無法找到可執行文件,但路徑是正確的,並且該命令在shell中正常工作。 – Karmar

+1

@Karmar這意味着路徑無效。更確切地說,PHP無法看到這條路徑。 Apache可能在chroot或其他安全的環境下運行,這會阻止它讀取/ var/www/image_proc或(不太可能的原因)添加參數會導致命令失敗。我建議從這裏開始運行chdir(「/ var/www/image_proc」); (作爲$ filename的glob(「*。*」)){ echo $ filename。 「
\ n」; }它會輸出/ var/www/image_proc中的所有文件嗎?如果沒有,這是chroot/security case。 // glob必須包含star-dot-star(*。*)。出於某種原因,它沒有正確顯示。 – 2012-12-10 02:10:31

+0

@Kamar在回答這個問題後,我應該能夠告訴你如何使它工作。 – 2012-12-10 02:16:17

相關問題