2012-06-25 31 views
0

我創建了一個簡單的C程序,它接受一個整數參數並輸出該整數加兩。我可以在終端與如何在PHP腳本中運行涉及外部庫的C程序?

./simplep 2

和PHP中

​​運行它。

我有一個更復雜的程序myprogram,它涉及一個外部庫。我可以在終端與

./myprogram a.mov

運行它,但它失敗,如果我在PHP與

exec('./myprogram a.mov', $output)

沒有產生輸出,這讓我覺得程序不運行它一直運行。

PS。我正在使用Mac。

更新

從錯誤輸出中,我知道這個問題是圖書館。它說

dyld: Library not loaded: /opt/local/lib/libjpeg.8.dylib". 

但庫文件在那裏。

+1

錯誤信息說什麼?如果沒有錯誤消息,請確保已啓用PHP錯誤報告。如果仍然沒有任何錯誤消息,那麼它聽起來像你的程序失敗了......是否正確報告錯誤? – cdhowie

+0

這是什麼操作系統?由於正斜槓,我假設了一個UNIX操作系統。 –

+0

Windows可以阻止gui應用程序打開,請參閱底部的註釋:http://php.net/manual/en/book.exec.php – Motes

回答

1

您是否有權限使用exec運行myprogram?試試這個

chmod +x myprogram 
+0

我試過了。仍然不起作用。 – DrXCheng

+0

您的error_reporting設置爲** error_reporting(E_ALL)**嗎? –

+0

是............ – DrXCheng

0

如果你的程序在命令行上運行,請嘗試使用shell_exec而不是exec。

2

這可能會產生一個錯誤,但它會去stderr而不是stdout。在這裏查看stderr一個簡單的辦法是改變:

exec('./myprogram a.mov', $output) 

exec('./myprogram a.mov 2>err.out', $output) 

,並查看文件err.out看到錯誤信息是什麼。

編輯:

現在你張貼的錯誤,它看起來像沒有被加載一個動態庫。最可能的原因是環境變量未被傳遞到exec,並且DYLD_LIBRARY_PATH環境變量正在被清除。看看DYLD_LIBRARY_PATH是你的終端上(通過env),然後嘗試運行:

exec('env DYLD_LIBRARY_PATH=XYZ ./myprogram a.mov 2>err.out', $output) 

,其中XYZ是DYLD_LIBRARY_PATH在終端上的價值。