Пишем dll для php
После работы над очень старым проектом, основанным на PHP 5.3, где для его работы требовалась библиотека APC, я понял, насколько трудно найти расширение APC, чтобы оно работало на платформе Windows. Для Linux этот процесс может быть довольно простым с PECL, однако в Window это было настоящей проблемой.
Вот почему сегодня я собираюсь показать вам, как с нуля компилировать расширение PHP из его исходного кода в среде Windows, в частности с помощью библиотеки APC и PHP 5.3.8.
2. Open Visual Studio Command Prompt
In order to run some administrative commands related to the development and build of your extension, you will need a command prompt with the context of Visual Studio. Namely the Developer Command Prompt for VS that you can find at the path:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\\Visual Studio Tools
Here you will find an executable of the command prompt that has access to all the tools that you will need to build the extension, execute it with administrator rights:
As mentioned, is a normal command prompt that contains the tools that we need for the next steps:
Let it open as we'll need in the step 5.
Исходники
test.php
php_hello.c
php_hello.h
config.w32
2. Откройте командную строку Visual Studio
Чтобы выполнить некоторые административные команды, связанные с разработкой и сборкой вашего расширения, вам потребуется командная строка с контекстом Visual Studio. А именно, Командная строка разработчика для VS, которую вы можете найти по пути:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\\Visual Studio Tools
Здесь вы найдете исполняемый файл командной строки, который имеет доступ ко всем инструментам, которые вам понадобятся для создания расширения, выполнить его с правами администратора:
Как уже упоминалось, это обычная командная строка, которая содержит инструменты, которые нам нужны для следующих шагов:
Пусть он откроется, как нам нужно в шаге 5.
Теперь, когда у вас есть необходимые инструменты для компиляции PHP вместе с вашим расширением, вам также потребуется исходный код PHP. Вы можете получить исходный код нужной вам версии PHP из официальная веб-страница релизов PHP здесь.
Как только вы загрузите tar / zip-файл с кодом, извлеките его в каталог с коротким путем, чтобы избежать проблем с длиной путей в Windows. В нашем случае мы извлечем исходный код PHP 5.3.8 в c:/php-src каталог:
Мы запустим команды для сборки PHP вместе с вашим кодом в этом каталоге в командной строке позже. Стоит отметить, что папка ext будет содержать код вашего расширения, но мы добавим его на следующем шаге.
6. Сборка PHP и расширение
Наконец, запустите команду nmake, чтобы запустить сборку расширения с помощью PHP в каталоге исходного кода PHP с помощью командной строки разработчика. NMake — это утилита make, предоставляемая Microsoft и доступная в Visual Studio. Это удобный инструмент для создания автоматизированных сборок.
Просто запустите команду:
Это запустит компиляцию и займет некоторое время. Он также сгенерирует подробный вывод с предупреждениями и т.д .:
Как только он закончится, новый каталог появится внутри c:/php-src каталог, а именно Release или Release_TS в соответствии с конфигурацией Thread Safety. Там вы найдете очень простую сборку PHP, но наиболее важную причину, почему вы создали исключительно PHP, свой файл DLL расширения (в нашем случае php_apc.dll ):
5. Настройте PHP и расширение build
Вернитесь в командную строку разработчика Visual Studio и перейдите в каталог с исходным кодом PHP:
Затем запустите buildconf.bat файл с --force аргумент:
Это создаст новый файл .bat, а именно configure.bat это будет иметь конфигурацию вашей сборки PHP. Запустите bat с помощью следующей команды и включите расширение, используя --enable- аргумент. В нашем случае это расширение APC, и мы сохранили исходный код в c:/php-src/ext/apc каталог, поэтому имя расширения будет APC. Запустите команду, чтобы настроить его:
Важная заметка
Если вы выполнили предыдущую команду и столкнулись с исключением, потому что bison.exe не был найден:
- Сохранение параметров конфигурации в config.nice.bat
- Проверка на cl.exe …
- Обнаружен компилятор MSVC9 (Visual C ++ 2008)
- Обнаружен 32-битный компилятор
- Проверка на наличие link.exe … C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ BIN Проверка на наличие nmake.exe …
- Проверка на lib.exe …
- Проверка на bison.exe …
- ОШИБКА: требуется бизон
Загрузите бинарные файлы Bison с сайта Source Forge здесь. Затем вставьте bison.exe а также m4.exe в каталоге bin Visual Studio, например C:\Program Files (x86)\\VC\bin , Это сделает исполняемый файл зубра доступным для пути, и исключение, которое требуется, зуб больше не будет отображаться.
--disable-all Флаг поможет нам предотвратить любые другие исключения расширений, которые нам не нужны, просто сосредоточившись на расширении APC, которое нам нужно. И все, вы получите подробный вывод, включающий список со всеми расширениями, которые будут собраны вместе с PHP и его режимом, например, Static (встроенные классы в PHP) или Shared (DLL-библиотека динамических ссылок):
Как и ожидалось, наше расширение PHP будет встроено в файл DLL так, как мы этого хотим. По умолчанию это создаст «потокобезопасную» сборку (PHP 5.3.8 TS). Если вы хотите не-потокобезопасную сборку, просто добавьте --disable-zts флаг для команды настройки.
Спасибо
Эта статья представляет собой повторную сборку нескольких источников, которые могут оказаться полезными при компиляции расширения с открытым исходным кодом или вашего собственного расширения:
А давайте сегодня взглянем на PHP немного с другой точки зрения, и напишем к нему расширение. Так как на эту тему уже были публикации на Хабре (здесь и здесь), то не будем углубляться в причины того, для чего это может оказаться полезным и для чего может быть использовано на практике. Эта статья расскажет, как собирать простые расширения под Windows с использованием Visual C++ и под Debian с использованием GCC. Также я постараюсь немного осветить работу с PHP-массивами внутри расширений и провести сравнение производительности алгоритма, написанного на native PHP и использующего код, написанный на C.
Компиляция под Win32
Итак, начнем с Windows. Как известно, разработчики PHP используют Visual C++ 9 или Visual Studio 2008 для компиляции своего детища под Windows. Поэтому мы будем использовать Visual Studio 2008, бесплатная Express версия тоже подойдет, как впрочем, наверное, и более поздние и ранние версии студии.
- Скомпилированные бинарники PHP 5.3, которые можно взять здесь,
- Исходники PHP 5.3, которые можно скачать с сайта или вытянуть из общедоступного SVN,
- Желание поэкспериментировать и немного терпения.
Теперь давайте напишем hello world, добавим в наш cpp файл следующее:
Теперь подключим этот модуль в PHP и попробуем запустить что-нибудь такое:
На что мы должны получить ответ «hello habr».
4. Prepare Extension Source Code
In order to build your extension, either you build an open source extension or create your own extension. In our case, we will build the APC extension, the version 3.1.6 specifically for PHP 5.3.8 (the same version of our PHP source code). This will ensure that the generated dll of PHP will be compatible with the PHP version that we need.
Once you download the source code of your extension (or you write your own code for it), extract it inside the ext folder of the PHP source code. In our case, the directory for the extension would be c:/php-src/ext/apc and it will contain the code of the extension (this is very important as the extension will be compiled along as a dynamic library with PHP):
Be sure as well that the config.w32 file in the root directory of the source code of the extension, in the line that registers the extension with the EXTENSION function, the third parameter is set to true in order to generate a DLL (dynamic mode):
Because as you may know you can integrate the extension directly with PHP, but in this tutorial we are showing how to generate the DLL file that in our case will be php_apc.dll .
1. Prepare Visual Studio environment
Before getting started with the compilation of a PHP extension, you need to know that not every VS compiler is compatible with any version of PHP, so you will need to know which Visual Studio you need to use according to the version of PHP that you want compile your extension (obtain DLL file). Check out the following table that specifies which version of Visual Studio you need to compile your desired PHP version:
- Yes: this version is supported and the PHP team provide binaries built with this compiler
- No: Not supported
PHP Version | 5.2.x | 5.3.x | 5.4.x | 5.5.x | 5.6.x | 7.0.x | 7.1.x | 7.2.x | 64bits (***) |
---|---|---|---|---|---|---|---|---|---|
Visual C++ 6 (SP6 only) | Yes | Yes | No | No | No | No | No | No | No |
Visual C++ 7/7.1 (2002, 2003, 2003+sp1) | Yes (**) | Yes (**) | No | No | No | No | No | No | No |
Visual C++ 8 (VS 2005) | Yes (**) | No | No | No | No | No | No | No | No |
Visual C++ 9 (VS 2008 SP1 only) | Yes (**) | Yes | Yes | Yes (**) | No | No | No | No | No |
Visual C++ 11 (VS 2012) | No | No | Yes (**) | Yes | Yes | Yes (**) | No | No | Yes |
Visual C++ 14 (VS 2015) | No | No | No | No | No | Yes | Yes(**) | Yes(**) | Yes |
Visual C++ 15 (VS 2017) | No | No | No | No | No | Yes(**) | Yes(**) | Yes | Yes |
- (*) May be dropped before the final release
- (**) Not officially supported but known to work
- (***) Supported for this given compiler according to the current official support (or known to work)
So to make it easy to understand, if you are willing to compile an extension for PHP 7, you will need the source code of PHP 7, the code of the extension as well and at least Visual Studio 2012 assuming that you want to compile it for PHP 7.0, because if you want it for PHP 7.1, then you would need at least Visual Studio 2015.
Knowing this, if you are sure that you have the correct version you shouldn't face any trouble while you compile the extension. Otherwise you will face weird exceptions during the configuration of the build:
In this tutorial we'll build the APC extension for PHP 5.3.8, so in our case we'll need to work with Visual Studio 2008 SP1 for visual c++ 9.
4. Подготовьте расширение исходного кода
Чтобы создать свое расширение, либо вы создаете расширение с открытым исходным кодом, либо создаете свое собственное расширение. В нашем случае мы будем строить расширение APC, версия 3.1.6 специально для PHP 5.3.8 (та же версия нашего исходного кода PHP). Это гарантирует, что сгенерированная DLL PHP будет совместима с нужной нам версией PHP.
Как только вы загрузите исходный код вашего расширения (или напишите свой собственный код для него), распакуйте его внутри ext папка с исходным кодом PHP. В нашем случае каталог для расширения будет c:/php-src/ext/apc и он будет содержать код расширения (это очень важно, так как расширение будет скомпилировано как динамическая библиотека с PHP):
Также убедитесь, что config.w32 файл в корневом каталоге исходного кода расширения, в строке, которая регистрирует расширение с РАСПРОСТРАНЕНИЕ функция, третий параметр имеет значение true для генерации DLL (динамический режим):
Потому что, как вы знаете, вы можете интегрировать расширение напрямую с PHP, но в этом уроке мы покажем, как создать файл DLL, который в нашем случае будет php_apc.dll ,
Компиляция под *nix
- Иметь установленный PHP на машине,
- Иметь установленный PHP-dev. Для этого нужно выполнить всего одну команду:
Первый нужен для магической компиляции расширения, а во втором будет его исходный код. В config.m4 напишем следующее:
Внутри test.c добавьте
И после этой сроки скопируйте содержимое cpp-файла из Windows-версии.
Теперь идем в консоль и:
На этом все. Теперь можно открыть php.ini, добавить там свое расширение:
И проверить его работоспособность командой
Выводы
Если судить о производительности модуля по сравнению с интерпретируемым кодом, то мы видим, что ощутимые результаты можно получить на больших объемах данных и на малых количествах итераций. То есть, для часто использующихся, однако, не очень ресурсоемких алгоритмов не имеет смысла вынесение их в компилируемый код. Но для алгоритмов, работающих с большими объемами данных, это может иметь практический смысл. Также, опираясь на мои измерения, можно заметить, что результаты работы PHP-кода сравнимы на разных системах (напомню, что это были две разные машины), а вот результаты работы расширения очень сильно отличаются. Из этого лично я делаю вывод, что существуют какие-то особенности компиляции, которые мне не известны. Впрочем, я сильно сомневаюсь, что кто-то использует Windows-сервера для PHP-проектов. Хотя я также очень сомневаюсь, что кто-то прямо сейчас побежит переписывать что-то на С, эта статья все-таки больше just for fun, чем руководство к действию. Просто я хотел показать, что написать PHP extension очень просто, и иногда может быть очень полезно.
Каждый php программист, хотя бы раз в жизни, задумывался о написания своего расширения для php. Сегодня я хочу рассказать о том как написать расширение с помощью библиотеки PHP-CPP. На примере вывода алерта с кнопкой, с помощью gtk.
Тем кому интересен процесс прошу под кат.
1. libgtk2.0-dev
2. php7.0-dev
3. php-cpp — библиотека которая нам поможет все разработать
Первые две зависимости ставятся из репозиториев вашей linux дистрибутива.
И так всё готово, теперь мы можем приступить к разработки, создаём директорию с проектом у меня она называется gtkPHP7. Прежде чем начать, скачаем скелетон будущего расширения по ссылке empty-extension.zip, и распаковываем архив в папку проекта. После чего, у нас появятся следующие файлы:
1. extensions.ini
2. Makefile
3. main.cpp
4.
Переименуем extensions.ini и откроем его на редактирование. Заменим строку 'extensions=extensions.ini' на 'extensions=gtkphp7.ini'. Далее, нам необходимо внести изменения в файл Makefile, отредактировав в нём следующие строки:
NAME — имя нашего extensions
INI_DIR — директории для конфигураций модулей php, у меня получилась /etc/php/7.0/mods-available/ ваше же может отличаться.
COMPILER_LIBS — подгружает необходимые нам библиотеки в данном случае gtk
И последним я добавил COMPILER_LIBS в цель all.
Перейдём, непосредственно, к разработки расширения. Для этого я установил clion от jetbrains и импортировал проект в ide. Все остальные работы мы будем проводить в файле main.cpp. Я решил разработать класс который будет инстанцироваться в php, и с последовательными методами формировать окошко alert'а.
Это прототип класса расширения:
1. setTitle — устанавливает заголовок окна
2. setButtonTitle — заголовок кнопки
3. createWindow — создаёт окно
4. setButton — создаёт кнопку и устанавливает в окне
5. callback — кэлбэк функция которая вызывается при клике на кнопку
6. render — выводит окно с кнопкой на экран
Первые два метода опустим, так как они просто устанавливают соответствующие переменные для использования в качестве заголовков.
Для того что бы инициализировать gtk, мы создали переменные argc и argv соответственно передав им 0 и NULL, как будто бы, приложение было запущено без параметров. Окно мы создаём методом 'gtk_window_new' и присваиваем переменной _window — это приватный параметр класса.
Этот метод создаёт виджет кнопки и присваивает её окну _window. Функция g_signal_connect отслеживает нажатие кнопки мы передаём в функцию следующие параметры:
1. объект кнопки
2. тип действия
3. callback функция (она не должна быть членом класса, другими словами она должна быть либо статичной либо отдельной функцией)
4. здесь мы передаём объект окна для использования в callback функции.
Второй параметр это как рас, то что было передано 4 параметром в функции выше, первый собственно наша кнопка. Функция проста она просто выходит из gtk. Ну и последнем рассмотрим функцию render:
В общем метод показывает все виджеты окна, и запускает gtk. После остановки, посредством callback функции она вернёт true.
Последним шагом, мы должны зарегистрировать наш класс и его методы:
Полный код main.cpp под спойлером:
Переходим к следующему шагу, компиляции и установки расширения:
После установки делаем симлинки для подключения или phpenmod:
Для пересборки и переустановки расширения достаточно выполнить:
Для теста был написан простой скрипт на php:
Результат скрипта, те самые скриншоты в заголовке статьи… Для удобства работы над расширением была написана функция:
Она вызывает php функцию var_dump, довольно удобно делать дампы переменных массивов php и т.д.
В качестве выводов приведу несколько ссылок:
1. Документация по php-cpp
2. Репозиторий с примером из статьи
p.s. На c++ это один из первых опытов, по этому, если что не так с кодом, пишите в комментарии, и хороших выходных.
В предыдущей статье я рассказывал как скомпилировать свое расширение PHP под Linux. Теперь разберемся, ка сделать это же под Windows.
Requirements
- Visual Studio: the version needs to provide some compatibility with the accepted versions of Visual C++, see the first point for more information.
- PHP Source Code: The source code of PHP for Windows at the version that you need to be compatible with the extension.
- Extension Source Code: The source code of the extension for PHP that you want to compile into a dynamic link library (DLL file).
Having said that, let's get started with the compilation !
1. Подготовьте среду Visual Studio
Прежде чем приступить к компиляции расширения PHP, вы должны знать, что не каждый VS-компилятор совместим с любой версией PHP, поэтому вам нужно знать, какую Visual Studio вам нужно использовать в соответствии с версией PHP, которую вы хотите. скомпилируйте ваше расширение (получите файл DLL). Ознакомьтесь со следующей таблицей, в которой указывается, какая версия Visual Studio необходима для компиляции желаемой версии PHP:
- Да: эта версия поддерживается, и команда PHP предоставляет двоичные файлы, созданные с помощью этого компилятора.
- Нет: не поддерживается
- (*) Может быть удалено до окончательного выпуска
- (**) Официально не поддерживается, но известно, что работает
- (***) Поддерживается для данного компилятора в соответствии с текущей официальной поддержкой (или известной работой)
Таким образом, чтобы облегчить понимание, если вы хотите скомпилировать расширение для PHP 7, вам потребуется исходный код PHP 7, а также код расширения и, по крайней мере, Visual Studio 2012, предполагающий, что вы хотите скомпилировать его. для PHP 7.0, потому что если вы хотите его для PHP 7.1, то вам понадобится хотя бы Visual Studio 2015.
Зная это, если вы уверены, что у вас правильная версия, у вас не должно возникнуть проблем при компиляции расширения. В противном случае вы столкнетесь со странными исключениями при настройке сборки:
Заметка
В этом руководстве мы создадим расширение APC для PHP 5.3.8, поэтому в нашем случае нам нужно будет работать с Visual Studio 2008 SP1 для Visual C ++ 9.
Требования
- Visual Studio: версия должна обеспечивать некоторую совместимость с принятыми версиями Visual C ++, см. Первый пункт для получения дополнительной информации.
- Исходный код PHP: Исходный код PHP для Windows в версии, которая должна быть совместима с расширением.
- Исходный код расширения: Исходный код расширения для PHP, который вы хотите скомпилировать в динамическую библиотеку (файл DLL).
Сказав это, давайте начнем с компиляции!
Спасибо!
Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:
One Response to “Пишем своё расширение PHP на C. Часть 2: Windows”
Так и не понял, зачем config.w32?
Она нужна для phpize, а здесь phpize никак не используется..
Learn how to compile PHP extensions from its source code using Visual Studio in a Windows environment.
After working on a very old project based on PHP 5.3, where the APC library was required to make it work, i knew how difficult is to find the APC extension to make it work on the Windows platform. For Linux, the process can be pretty easy with PECL, however in Window this was a real problem.
That's why today i'm going to show you how to compile a PHP extension from its source code from scratch in a Windows environment, specifically with the APC library and PHP 5.3.8.
3. Download PHP Source Code
Now that you have the necessary tools to compile PHP along with your extension, you will need as well the source code of PHP. You can get the source code of the PHP version that you need from the official releases webpage of PHP here.
Once you download the tar/zip file with the code, extract it into a directory with a short path to prevent any problem with the length of the paths in Windows. In our case, we'll extract the source code of PHP 5.3.8 in the c:/php-src directory:
We'll run the commands to build PHP along with your code in this directory within the command prompt later. It's worth to mention that the ext folder will contain the code of your extension but we will add it in the next step.
6. Build PHP and Extension
Finally, run the nmake command to start the build of your extension with PHP within the directory of the PHP source code with the developer command prompt. NMake is a make utility provided by Microsoft and available in Visual Studio. It is a handy tool for creating automated builds.
Just run the command:
This will start the compilation and will take a while. It will generate a verbose output as well with warnings etc:
Once it finishes, a new directory will appear inside the c:/php-src directory, namely Release or Release_TS according to the Thread Safety configuration. There you will find a very basic built of PHP, but most important, the reason why you exclusively built PHP, your extension DLL file (in our case php_apc.dll ):
Производительность
Для проверки производительности я выбрал несколько синтетический пример: подсчет вхождения каждого символа в строку. Другими словами, мы должны получить функцию, которая принимает строку в качестве параметра, и отдает массив, в котором указано количество употреблений каждого символа в данной строке. Этот пример продемонстрирует работу с большими строками.
У меня получилась такая реализация, сильно не пинайте за код, я все-таки больше пишу на PHP, чем на C:
Этот код выдает следующий результат:
А теперь давайте сравним скорость выполнения этого кода и аналогичного на native PHP:
Сравнивать я буду время выполнения обоих решений с помощью функции microtime. Возьмем строку в 100 символов, строку в 5000 символов, и строку в 69000 символов (я взял книгу A Message from the Sea, написанную Чарльзом Диккенсом, надеюсь, что он мне это простит), и для каждого варианта прогоним оба решения по несколько тысяч раз. Результаты приведены в таблице ниже. Тестирование проводилось на моем не самом сильном домашнем ноутбуке и VDS с Debian на борту, и да, я отчетливо понимаю, что результаты могут зависеть от конфигурации, от версии операционной системы, PHP, атмосферного давления и направления ветра, но я хотел показать лишь примерные цифры.
Полный код тестового скрипта можно скачать здесь. Исходники и бинарники самих расширений можно скачать здесь (win) и здесь (nix).
Кол-во итераций | PHP code / Win32 | PHP code / Debian | PHP extension / Win32 | PHP extension / Debian | Win32 выигрыш | Debian выигрыш | |
1. Строка 100 символов | 1000000 | 84.7566 сек | 72.5617 сек | 8.4750 сек | 4.4175 сек | в 10 раз | в 16.43 раз |
2. Строка 5000 символов | 10000 | 39.1012 сек | 31.7541 сек | 0.5001 сек | 0.134 сек | в 78.19 раз | в 236.98 раз |
3. Строка 69000 символов | 1000 | 52.3378 сек | 44.0647 сек | 0.4875 сек | 0.0763 сек | в 107.36 раз | в 577.51 раз |
Обработка аргументов и возвращаемые значения
Для начала посмотрим, как можно принимать аргументы:
Возвращать можно как простые типы, так и сложные. Давайте познакомимся с формированием возвращаемого массива. Для указания того, что будет возвращен массив, его нужно проинициализировать:
Для добавления значений в массив необходимо использовать функции, зависящие от того, какой индекс и значение добавляется в массив. Например:
Полный список функций можно найти здесь
Если кого-то заинтересует, я могу в следующей статье рассмотреть пример работы с объектами (классический пример расширения на объектах — mysqli). Тут есть очень хорошая статья на эту тему.
Исходные данные
Среда Visual Studio C++ 6.0 выбрана исходя из того что все остальные расширения находящиеся в папке ext исходных кодов php интерпретатора собраны с ее помощью.
Несколько первых строк из файла проекта расширения gd.
Необходимо создать новый проект Win32 dynamic dll.
Меню File->New
Рис.1
Выбираем тип проекта Win32 Dynamic-Link Library.
Рис.2
Сохранить проект в папку с остальными php расширениями. В каталог проекта скопировать файлы php_hello.c php_hello.h config.m4 config.w32. Результат на картинках далее.
Рис.3
Рис.4
Затем следует настроить проект.
Установить активную конфигурацию сборки. Set active configuration.
Рис.5
Активной конфигурацией должен быть Win32 – Release.
Рис.6
В свойствах проекта (Alt-F7) для конфигурации release .
Далее настройки компиляции. Category General.
Рис.7
Preprocessor definitions.
WIN32,_DEBUG,_WINDOWS,_MBCS,_USRDLL,PHP_HELLO_EXPORTS,ZEND_DEBUG=0,COMPILE_DL_HELLO,ZTS=1,ZEND_WIN32,PHP_WIN32
Должно получиться примерно так. Однако их могут быть и какие дополнительные еще препроцессорные определения.
COMPILE_DL_HELLO — выделена желтым часть имя нашего модуля. Допустим для модуля NEWMODULE будет так COMPILE_DL_NEWMODULE.
Настройки компиляции. Code generation.
Рис. 8
Use run-time library. Выбрать Multithreaded DLL.
Также настройки компиляции. Category preprocessor.
Рис.9
Additional include directories. ..\. \..\main. \..\Zend. \..\TSRM. \..\bindlib_w32
Устанавливаем дополнительные каталоги для поиска *.h файлов относительно каталога с проектом.
Создать каталог C:\php_source\dev . Скопировать библиотеку php5ts.lib из откомпилированной сборки php интерпретатора (C:\php5\dev) той же версии в каталог C:\php_source\dev.
Рис.10
Добавить в Object/Library modules ссылку на библиотеку php5ts.lib
Добавить в Additional library path путь к дополнительному каталогу для поиска lib файлов.
Добавить файлы с исходными кодами к проекту предварительно скопировав их в папку проекта.
Рис.11
Выбрать тип файлов: *.*
Можно выбрать и добавить сразу все файлы нажимая Ctrl.
Нажимаем ОК.
Рис.12
сonfig.m4 необязателен. Он нужен для сборки расширения под Unix.
Рис.13
Скопировать полученную dll в рабочий каталог интерпретатора с расширениями php.
Рис.14
Thanks
This article is a recopilation of multiple sources that you may find useful as well during the compilation of an open source extension or your own extension:
5. Configure PHP and Extension build
Go back to the visual studio developer command prompt and switch to the directory of the source code of PHP:
Then run the buildconf.bat file with the --force argument:
This will generate a new .bat file namely configure.bat that will have the configuration of your PHP build. Run the bat with the following command and enable your extension using the --enable- argument. In our case, the extension is APC and we stored the source code in the c:/php-src/ext/apc directory, so the extension name will be APC. Run the command to configure it:
Important note
If you run the previous command and you face an exception because bison.exe haven't been found:
- Saving configure options to config.nice.bat
- Checking for cl.exe .
- Detected compiler MSVC9 (Visual C++ 2008)
- Detected 32-bit compiler
- Checking for link.exe . C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN Checking for nmake.exe .
- Checking for lib.exe .
- Checking for bison.exe .
- ERROR: bison is required
Download the binaries of Bison from the website at Source Forge here. Then paste the bison.exe and m4.exe at the bin directory of Visual Studio e.g C:\Program Files (x86)\\VC\bin . This will make the bison executable accesible to the path and the exception bison is required won't appear anymore.
The --disable-all flag will help us to prevent any other exception of extensions that we don't need, just focusing on the APC extension that we need. And that's it, you will get a verbose output that includes a list with all the extensions that will be built along with PHP and its mode e.g Static (built-in classes in PHP) or Shared (a Dynamic Link Library dll):
As expected, our extension of PHP will be built into a DLL file just as we want it. By default, this will create a "Thread Safe" build (PHP 5.3.8 TS). If you want a non thread safe build, just add the --disable-zts flag to the configure command.
Читайте также: