Сборка расширения ffmpeg-php (php_ffmpeg.dll) для PHP 5 на Windows
15 Apr 2008
Рабочее окружение:
Создайте рабочую папку, в которой будут размещаться все необходимые файлы, например, C:\Development\PHP\ffmpeg. Распакуйте туда исходные коды PHP, дистрибутив PHP, исходные коды ffmpeg-php, библиотеки и заголовочные файлы FFmpeg. Также положите в эту папку заголовочные файлы inttype.h и stdint.h.
Создайте новый проект в MVS. Тип проекта – Win32, шаблон – Win32 Project. Введите имя проекта, например: php_ffmpeg (по имени будущей dll). Укажите в качестве места расположения созданную ранее папку. В окне Application Wizard перейдите на вкладку Application Settings. Установите Application Type – DLL, Additional Options – Empty Project. Завершите создание проекта, нажатием кнопки Finish.
В окне Solution Explorer добавьте в папку Header Files заголовочные файлы ffmpeg-php: ffmpeg_animated_gif.h
ffmpeg_frame.h
ffmpeg_movie.h
gd.h
gd_io.h
php_ffmpeg.h Там же добавьте в папку Source Files файлы исходных кодов ffmpeg-php: ffmpeg_animated_gif.c
ffmpeg_errorhandler.c
ffmpeg_frame.c
ffmpeg_movie.c
ffmpeg_php.c Приступим к конфигурированию проекта. Откройте меню Project и выберите пункт Properties. Перед вами появится окно настройки проекта. Сразу же откройте вкладку Configuration Properties. Вверху выберите конфигурацию - Release. Перейдите на вкладку C/C++ -> General. В поле Additional Include Directories добавьте следующие пути: C:\Development\PHP\ffmpeg
C:\Development\PHP\ffmpeg\php-5.2.5
C:\Development\PHP\ffmpeg\php-5.2.5\TSRM
C:\Development\PHP\ffmpeg\php-5.2.5\Zend
C:\Development\PHP\ffmpeg\php-5.2.5\main
C:\Development\PHP\ffmpeg\ffmpeg-r10461-include\include\ffmpeg
C:\Program Files\Microsoft Platform SDK\Include Перейдите на вкладку C/C++ -> Preprocessor и в поле Preprocessor Definitions добавьте следующие строки: PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0
HAVE_LIBGD20=1
COMPILE_DL_FFMPEG Теперь перейдите на вкладку Linker -> General. В Additional Library Directories добавьте два пути: c:\Development\PHP\ffmpeg\php-5.2.5-Win32\dev
C:\Development\PHP\ffmpeg\ffmpeg-r10461-lgpl-lshared-win32\lib Перейдите на вкладку Linker -> Input и введите в поле Additional Dependencies строки: php5ts.lib
avcodec-51.lib
avformat-51.lib
avutil-49.lib Перейдите на вкладку Linker -> Command Line и в поле Additional options добавьте: /FORCE:MULTIPLE Если вы указали имя проекта отличное от php_ffmpeg, перейдите на вкладку Linker -> General и в поле Output File введите: $(OutDir)\php_ffmpeg.dll Это нужно для того, чтобы не пришлось переименовывать dll после сборки.
Попробуйте собрать расширение, нажав клавишу F7. В консоле появятся сообщения о ошибках.
Устранение ошибок. fatal error C1083: Cannot open include file: 'config.h': No such file or directory Откройте файл ffmpeg-php-0.5.2.1\ffmpeg_frame.c и найдите следующую строку:
После этого попробуйте снова собрать расширение. Больше сообщений об ошибках быть не должно. На выходе получится заветный dll php_ffmpeg\release\php_ffmpeg.dll. Скопируйте его в папку с расширениями PHP и добавьте в php.ini строку: extension=php_ffmpeg.dll Также скопируйте файлы из папки ffmpeg-r10461-lgpl-lshared-win32\dll и файл pthreadGC2.dll в папку system32.
Проверить загрузилось расширение или нет можно через консольную версию php.
Скачать php_ffmpeg.dll для PHP 5 (ZIP, 12.5 Кб)
Скачать php_ffmpeg.dll и необходимые DLL для PHP 5 (ZIP, 2.59 Мб)
- Microsoft Windows XP SP 2
- Microsoft Visual Studio 2005 Express Edition - http://www.microsoft.com/express/2005/download/default.aspx
- Microsoft Platform SDK - http://www.microsoft.com/downloads/details.aspx?familyid=0baf2b35-c656-4969-ace8-e4c0c0716adb
- Исходные коды PHP 5.2.5 - http://www.php.net/downloads.php
- Дистрибутив PHP 5.2.5 для Windows - http://www.php.net/downloads.php
- Исходные коды ffmpeg-php - http://ffmpeg-php.sourceforge.net/
- Shared библиотеки и заголовочные файлы FFmpeg для Windows (обязательно LGPL) - http://ffmpeg.arrozcru.org/builds/
- Заголовочные файлы inttype.h и stdint.h - http://msinttypes.googlecode.com/svn/trunk/inttypes.h, http://msinttypes.googlecode.com/svn/trunk/stdint.h
Создайте рабочую папку, в которой будут размещаться все необходимые файлы, например, C:\Development\PHP\ffmpeg. Распакуйте туда исходные коды PHP, дистрибутив PHP, исходные коды ffmpeg-php, библиотеки и заголовочные файлы FFmpeg. Также положите в эту папку заголовочные файлы inttype.h и stdint.h.
Создайте новый проект в MVS. Тип проекта – Win32, шаблон – Win32 Project. Введите имя проекта, например: php_ffmpeg (по имени будущей dll). Укажите в качестве места расположения созданную ранее папку. В окне Application Wizard перейдите на вкладку Application Settings. Установите Application Type – DLL, Additional Options – Empty Project. Завершите создание проекта, нажатием кнопки Finish.
В окне Solution Explorer добавьте в папку Header Files заголовочные файлы ffmpeg-php: ffmpeg_animated_gif.h
ffmpeg_frame.h
ffmpeg_movie.h
gd.h
gd_io.h
php_ffmpeg.h Там же добавьте в папку Source Files файлы исходных кодов ffmpeg-php: ffmpeg_animated_gif.c
ffmpeg_errorhandler.c
ffmpeg_frame.c
ffmpeg_movie.c
ffmpeg_php.c Приступим к конфигурированию проекта. Откройте меню Project и выберите пункт Properties. Перед вами появится окно настройки проекта. Сразу же откройте вкладку Configuration Properties. Вверху выберите конфигурацию - Release. Перейдите на вкладку C/C++ -> General. В поле Additional Include Directories добавьте следующие пути: C:\Development\PHP\ffmpeg
C:\Development\PHP\ffmpeg\php-5.2.5
C:\Development\PHP\ffmpeg\php-5.2.5\TSRM
C:\Development\PHP\ffmpeg\php-5.2.5\Zend
C:\Development\PHP\ffmpeg\php-5.2.5\main
C:\Development\PHP\ffmpeg\ffmpeg-r10461-include\include\ffmpeg
C:\Program Files\Microsoft Platform SDK\Include Перейдите на вкладку C/C++ -> Preprocessor и в поле Preprocessor Definitions добавьте следующие строки: PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0
HAVE_LIBGD20=1
COMPILE_DL_FFMPEG Теперь перейдите на вкладку Linker -> General. В Additional Library Directories добавьте два пути: c:\Development\PHP\ffmpeg\php-5.2.5-Win32\dev
C:\Development\PHP\ffmpeg\ffmpeg-r10461-lgpl-lshared-win32\lib Перейдите на вкладку Linker -> Input и введите в поле Additional Dependencies строки: php5ts.lib
avcodec-51.lib
avformat-51.lib
avutil-49.lib Перейдите на вкладку Linker -> Command Line и в поле Additional options добавьте: /FORCE:MULTIPLE Если вы указали имя проекта отличное от php_ffmpeg, перейдите на вкладку Linker -> General и в поле Output File введите: $(OutDir)\php_ffmpeg.dll Это нужно для того, чтобы не пришлось переименовывать dll после сборки.
Попробуйте собрать расширение, нажав клавишу F7. В консоле появятся сообщения о ошибках.
Устранение ошибок. fatal error C1083: Cannot open include file: 'config.h': No such file or directory Откройте файл ffmpeg-php-0.5.2.1\ffmpeg_frame.c и найдите следующую строку:
#include "config.h"
Замените её на:
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
error C2466: cannot allocate an array of constant size 0
Откройте файл php-5.2.5\main\config.w32.h и закомментируйте строку:
//#define _USE_32BIT_TIME_T 1
Сборка расширения.После этого попробуйте снова собрать расширение. Больше сообщений об ошибках быть не должно. На выходе получится заветный dll php_ffmpeg\release\php_ffmpeg.dll. Скопируйте его в папку с расширениями PHP и добавьте в php.ini строку: extension=php_ffmpeg.dll Также скопируйте файлы из папки ffmpeg-r10461-lgpl-lshared-win32\dll и файл pthreadGC2.dll в папку system32.
Проверить загрузилось расширение или нет можно через консольную версию php.
> php -v
PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
> php -r "var_dump(extension_loaded('ffmpeg'));"
bool(true)
Процесс сборки расширения можно считать законченным.
PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
> php -r "var_dump(extension_loaded('ffmpeg'));"
bool(true)
Скачать php_ffmpeg.dll для PHP 5 (ZIP, 12.5 Кб)
Скачать php_ffmpeg.dll и необходимые DLL для PHP 5 (ZIP, 2.59 Мб)
