2013年10月18日 星期五

在Windows PHP安裝ffmpeg-php


關於在Windows內使用ffmpeg-php, 網路上有很多方法, 
e.g. myownserver 在 How to install ffmpeg-php for Windows Apache HTTP Server 介紹安裝在xampp的方法, 從 http://sergey89.ru/files/ffmpeg-php/ 下載ffmpeg-php-5.3-win32-all.zip後, 逐步安裝後再用一支程式測試.
但是我是用AppServ + PHP 5.3.5 所以我用的方法

取得 ffmpeg-php
php.ini
首先解開之後, 先把 php_ffmpeg.dll 複製到 php5/ext內; php.ini 增加 一行 
extension=php_ffmpeg.dll

http.conf
我不喜歡複製到 System32 , 所以我在 http.conf 增加下列幾行:
#php 5.3
之前就有的
Loadfile "C:\AppServ\php5\php5ts.dll"
Loadfile "C:\AppServ\php5\libpq.dll"
 這次增加的
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\avcodec-52.dll"
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\avcore-0.dll"
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\avdevice-52.dll"                                                 
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\avfilter-1.dll"
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\avformat-52.dll"
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\avutil-50.dll"
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\pthreadGC2.dll"
Loadfile "C:\AppServ\php5\ext\ffmpeg-php-5.3.1\swscale-0.dll"

phpinfo測試

測試ffmpeg.php
結果畫面

done.

PHP在Windows環境下執行

名詞解釋

首先說明VC6及VC9:

VC6 : 就是使用 Visual Studio 6 compiler 這個編譯器編譯的.
VC9 : 就是用微軟的 Visual Studio 2008 compiler 編譯的.
TS : Thread Safe 線程安全, 執行時會進行線程(Thread)安全檢查, 以防止有新要求就啟動新線程的CGI執行方式而耗盡系統資源
NTS : Non Thread Safe 非線程安全, 在執行時不進行線程(Thread)安全檢查
ISAPI(Internet Server Application Programming Interface)執行方式是以DLL動態庫的形式使用, 可以在被用戶請求後執行, 在處理完一個用戶請求後不會馬上消失, 所以需要進行線程安全檢查, 這樣來提高程序的執行效率.
FastCGI : 執行方式是以單一線程來執行操作, 所以不需要進行線程的安全檢查, 除去線程安全檢查的防護反而可以提高執行效率.

 

PHP 官網說明:

Which version do I choose?

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
If you are using PHP with IIS you should use the VC9 versions of PHP
VC6 Versions are compiled with the legacy Visual Studio 6 compiler
VC9
Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed

Do NOT use VC9 version with apache.org binaries
 

Thread Safe線程安全

Linux 使用多進程(process)不同於Windows採用的多線程(Thread)的工作模式; 而CGI是以Linux的多進程所設計的, 所以如果在IIS 的 PHP 使用 CGI 模式, 每次HTTP的請求PHP都需重新加載及缷載, 所以速度慢。
IIS另外一個選擇是使用ISAPI的方式(早期的ASP.NET也是用這種方式), 因為php5nsapi.dll是用多線程設計的(Thread safe),符合Windows多線程的設計,速度較快。
但是在選擇PHP Extension時就要注意, 必須使用TS(Thread safe)的版本, 否則會搞垮IIS. 但是大部份的PHP_Extension都是針對Linux的多進程設計的.
為了在Windows IIS兼顧速度及線程安全, 微軟推出FastCGI; FastCGI保留了CGI的工作模式, 又提供一個pool機制管理重覆使用的進程, 確保non-thread-safe的libraries可以正常執行。
 

結論

使用ISAPI方式, php extension 就要用Thread Safe的版本; 如果使用FastCGI就不用Thread Safe(non-thread-safe)了,效能還更好呢.