原文連結:http://www.shuchengxian.com/article/637.html
在開發中需要使用到插件ffmpeg轉化語音的功能。在php中使用ffmpeg功能需要執行exec()函數。由于使用新環境原來的指令不起作用。
遇到這個問題,我的分析如下:
- 1、php中有沒有禁用這個函數的使用。
- 2、linux環境下,目錄是否有權限。
- 3、php使用者是否有權限執行指令。
帶着上面的兩個問題,我們逐一的分析解決。
一、首先,我們檢視系統是否禁用exec()函數的使用。
1.1 我們檢視php.ini配置檔案,檢視是否啟用安全模式,是否禁用exec()函數。
safe_mode =
disable_functions=
通過上面的配置可以直覺的看到安全模式和是否禁用exec()函數,如果有,則關閉掉。
二、檢視相應儲存檔案夾目錄是否有777權限。
直接通過ftp或者指令行檢視。
三、php使用者是否有權限執行指令。
這個需要運維技術支援,我不是很懂。
使用方法如下:
exec('ffmpeg -i ./uploads/gBQt5rxDwqz03dJk7.amr -ab 32 -ar 11025 ./uploads/gBQt5rxDwqz03dJk7.mp3 2>&1 | grep time',$callback)
var_dump($callback);
将此指令在xshell中運作,則可以正确,在php中執行則失敗。
于是乎,請教運維,在ffmpeg指令之前加上/sbin/即可。
正确如下:
exec('/sbin/ffmpeg -i ./uploads/gBQt5rxDwqz03dJk7.amr -ab 32 -ar 11025 ./uploads/gBQt5rxDwqz03dJk7.mp3 2>&1 | grep time',$callback)
var_dump($callback);
對于linux運維不是很懂,這是運維告訴我的寫法。上面的方法可以解決php執行exec()函數ffmpeg指令不生效的問題。