2011-08-25 83 views
4

這有點複雜。 :-)我有一個用PHP編寫的網站,需要調用.NET編寫的外部程序,在Mono下運行。它調用程序有:從PHP調用單聲道

/path/mono /path/executable arguments... 

按通常(我也試圖把這個變成一個bash腳本,並調用腳本本身的PHP)。

據我所知,一切都按照要求設置。 Mono本身運行正常,可執行文件(或腳本)具有可執行權限,所有者都可以。如果我從服務器上的命令行(Debian Lenny)發出上面的命令行(或者調用提到的腳本),那麼一切正常,我的可執行文件無錯地執行,所以也可以確定正確的設置。但是,如果PHP調用相同(使用exec(),system()或任何其他變體),我立即從Mono獲得6的退出代碼,並且我的可執行文件根本不運行(爲了測試它,我使用「Hello World」可執行文件,它只發出單個輸出行並返回0)。編譯沒有任何額外的依賴,只是一個真正的「你好詞」。這是絕對肯定的,這個程序不會返回退出代碼6,它必須來自單聲道,但我找不到它在任何地方記錄。

我可以從PHP調用其他任何東西,所以它不是安全模式或任何類似的限制,它們會阻止我從PHP執行外部程序。

感謝您的任何想法...

+0

單已經很大支持Web服務。如果你只是試圖執行用.NET編寫的東西,爲什麼不通過服務暴露它? –

+0

你是通過網絡服務器還是從命令行調用PHP腳本?請記住,在CLI模式下,PHP的設置通常是非常不同的。 SAPI模式。 –

+0

使用'exec()'是一個非常非常糟糕的主意。 – skolima

回答

2

嘗試在命令行,但與運行的網絡服務器(WWW的數據或Apache)用戶執行單。

ej。

#su apache 
$/path/to/mono /path/to/program.exe 

,我已經使用EXEC的共同問題是一個不同的環境變量(看,如果是bash或什麼Apache是​​用sh),權限用戶/阿帕奇組等