天天看點

如何解決php執行exec函數ffmpeg指令不生效的問題

原文連結: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指令不生效的問題。