2011-03-28 327 views
0

我對php有問題!我想用php運行一個外部程序。這個程序在命令行和Linux平臺上工作。所以它一定很好。但我嘗試更多的時間,我不能運行它。所以怎麼了! 這是該程序的鏈接:http://www.lalescu.ro/liviu/fet/ ,這是其在命令行正常工作的命令,而不是在PHP的情況下:用php運行一個外部程序

./fet --inputfile=Hopwood.fet --outputdir=out 

,這是PHP代碼:

<?php 
`./fet --inputfile=Hopwood.fet --outputdir=out` 
?> 

我希望能解決這個問題。 在此先感謝..

更新我上傳可執行程序和Hopwood.fet文件你試試吧.. 這是鏈接: http://rapidshare.com/files/454756427/fet.tar.gz

+0

它可以幫助我們,如果你格式化你的代碼,所以我們可以看到你試圖運行什麼。 – 2011-03-28 09:25:52

+1

你確定你在正確的子目錄下運行./fet嗎? – stillstanding 2011-03-28 09:28:01

+0

好,我現在去編輯我的問題。 – mkotwd 2011-03-28 09:28:27

回答

0

它看起來像你正在運行FET從本地安裝(基於您發佈的./fet命令)。

您需要將您的fet安裝位置添加到您的PATH變量中。

在Linux系統上,編輯您的〜/ .bashrc,並添加以下內容:

export PATH=$PATH:/home/mkotwd/fet 

如果/家庭/ mkotwd/FET是你已經安裝了FET。您也可以創建一個目錄〜/ bin,將它添加到您的PATH中(如上所述),並創建一個指向您的fet可執行文件的符號鏈接〜/ bin/fet。這是推薦的解決方案,因爲您不必在PATH中添加將來可能要運行的每個本地命令的目錄,只需在〜/ bin中爲每個可執行文件創建符號鏈接

您可能還想要檢查出http://php.net/manual/en/function.exec.php的調用細節,安全注意事項以及由使用該命令執行各種任務的用戶發佈的其他提示。

+0

是我嘗試所有這一切,但不是工作,執行命令返回0 int如果完成, fyi函數返回1的值! – mkotwd 2011-03-28 09:39:52

2

嘗試在全路徑做:

/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out 

所以你最終會執行:

exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out"); 

此外,確保運行過程中有寫信給你/path/to/your/out

能力UPDATE

爲了讓事情更清晰,請嘗試運行此命令:

exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out 2> /tmp/fet.error.log", $output, $status); 

echo "status: " . $status; 
echo "output: " . implode("\n", $output); 

if(file_exists("/tmp/fet.error.log")) 
{ 
    echo "Error Log: " . file_get_contents("/tmp/fet.error.log"); 
} 

UPDATE

爲@mkotwd告訴另一個答案(試圖調試代碼後,上面)。問題是因爲fet試圖訪問X服務器。所以,作爲@mkotwd答案是解決方案的補充:

export DISPLAY=:0 

,併成爲命令:

exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out"); 
+0

不幸的是,我設置了正確的權限和整個路徑,但沒有工作! – mkotwd 2011-03-28 09:37:00

+0

如果權限是正確的(您需要在程序和輸入/輸出目錄上執行,並在'fet'和它需要的任何資源上讀取+執行權限),並且您已經檢查過網絡服務器沒有運行chroot,沒有禁用執行功能,那麼它將工作。回去再試一次。 – symcbean 2011-03-28 11:59:13

+0

@symcbean謝謝,如果你可以試試這個程序,我把鏈接設置爲 – mkotwd 2011-03-28 13:07:33

0

檢查php -i | less爲:

它可能是防止這些重要命令(或兩者)的安全措施之一。

+0

執行命令適用於其他程序,我嘗試,如調整與Inkscape和mkdir命令,ls ..安全模式關閉! – mkotwd 2011-03-28 09:52:04

0

的解決方案是之前添加此命令:

export DISPLAY=:0 

所以代碼變成:

<?php 
exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out"); 
?> 
+0

您可能已經提到過,默認情況下,fet會嘗試啓動一個窗口。 – Amey 2011-03-29 10:05:07

+0

@Amey是的,我從錯誤日誌中讀到這個.. – mkotwd 2011-03-29 11:58:09

+0

@Amey,你應該閱讀整個評論和問題和答案;) – ariefbayu 2011-03-29 21:40:26