2012-03-21 50 views
1

我尋求幫助,並嘗試了所有在this thread,但仍不能使這項工作。我正在嘗試使用shell_exec()從我的PHP腳本運行sox(Sound eXchange)命令行實用程序。我需要連接兩個音頻文件,這兩個文件與PHP腳本位於相同的目錄中(即可通過apache訪問)。無法通過PHP運行sox命令shell_exec

這裏的困惑:

  1. 一些SOX命令工作正常使用了shell_exec()。例如,我可以播放音頻文件或檢索有關它的信息。
  2. 如果我回顯連接命令(因此我知道PHP發送到shell的確切內容),然後將其複製並粘貼到shell窗口中,它將完美運行。
  3. 我的apache用戶(_www)對PHP腳本所在的目錄以及sox目錄擁有完整的權限。我在兩個目錄上運行了「chown -R _www:_www」和「chmod -R 777」。
  4. 我正在使用sox可執行文件和音頻文件的完整路徑。

所以這部作品在外殼:

"/soxpath/sox /filepath/file1.wav /filepath/file2.wav /filepath/combined.wav" 

但是,這並不從PHP工作:

shell_exec('/soxpath/sox /filepath/file1.wav /filepath/file2.wav /filepath/combined.wav'); 

任何人都可以闡明這一些輕?我錯過了什麼?謝謝。

+0

shell_exec()返回什麼? – 2012-03-21 22:42:52

+0

/soxpath/sox ????是完整路徑還是樣本.... – Baba 2012-03-21 23:01:03

+0

shell_exec()返回NULL。而「/ soxpath /」只是實際完整路徑的佔位符。在我的情況下,它是「/bin/sox-14.4.0/」 – brettcito 2012-03-22 00:14:32

回答

0

好吧,我終於開始工作了,所以我想我應該清除任何我創建的混淆。這個問題是無關緊要的。所以,是的,您可以使用shell_exec()從PHP運行sox命令。

我只是遇到了JavaScript的時間問題。我使用wami recorder在客戶端捕獲音頻,然後將音頻文件保存在服務器上。所以我的PHP腳本是在ajax調用處理程序的上下文中定義的,它是異步的。應該早點實現。

問題是,當連接sox命令運行時,文件沒有保存,所以自然失敗,因爲該文件還不存在。當我使呼叫同步時,它就起作用了。