Расширения php для windows

Сборка и установка расширений для PHP (extentions) в Windows среде

Если Вы столкнулись с необходимостью подключения в Windows PHP дополнительных расширений, которые отсутствуют в базовой установке PHP, то данная статья, возможно, поможет Вам добиться необходимого результата и сэкономит Вам парочку бессонных ночей, проведённых в поисках мало-мальски удобного решения этой, как оказалось, нетривиальной для рядового php программиста задачей…

Вступление

Пара слов, как появилась задача и связанные с ней проблемы.
Однажны в знакомой небольшой веб-студии пришёл заказ на создание веб-проложения, которое будет позволять пользователям производить куплю/продажу ценных бумаг на российских биржах ценных бумаг. Компания, сделавшая заказ, имеет большой опыт в предоставлении данных услуг в оффлайн, имеет ряд приложений для этого, которые используются на компьютерных терминалах, которые стоят на территории компании и большую клиентскую базу. Но дело в том, что со времён основания IT инфраструктуры компании, когда для работы была выбрана база данных IBM Informix, мало что изменилось. В результате, перед нами встала задача наладить взаимодействие нашего приложения, которое должно было быть написано на php, и БД клиента. Вот тут-то и появилась неожиданная проблема…

Завязка

Дело в том, что в силу определённых причин, все наши php-программисты работают в Windows окружении, используют последнюю стабильную версию php интерпретатора и веб-сервера apache на своих машинах. В связи с этим, встал вопрос о поиске pdo-драйвера для работы с Informix. Естественно, собранного расширения в сети не нашлось (вернее, нашлось, но, видимо, для ранних версий — php падал при попытке его подключить), а краткое описание на странице расширения PDO_INFORMIX намекало на то, что его-таки следует собирать из исходных кодов.

Ну что ж, проблема ясна — необходимо решение. Первое, что было сделано — это установка PEAR и попытка через pecl установить требуемое расширение. Однако, при попытке это сделать, установка прерывалась ошибкой.

Гугление ошибки не дало особого результата и, по большому счёту, все рекомендации сводились к тому, что лучше собрать расширение собственоручно, а не мучить бедный старый pecl в надежде, что он что-нибудь сможет собрать на windows машине.

Было принято решение попытаться собрать расширение. Однако, как всегда, оказалось, что с С++ у нас никто не знаком и решить задачу никто не может. Была попытка найти человека для исполнения задачи на фрилансе, но и это не принесло плодов: все, кто откликнулся, комментировали решение проблемы как «установить pecl и через него установить». Пришлось освоить процесс самому. Сразу скажу, с разработкой расширений для PHP не сталкивался, тем паче — с программированием на C++. В Visual Studio собрать dll тоже не получилось (расширение так же как и скаченные из интернетов версии крашили php). Всвязи с этим, было потрачено чуть более полутора суток на поиски и опробывание всяких решений, которые привели к тому, что был собран интерпретатор с необходимым расширением (pdo_informix) в виде shared-библиотеки, а полученная библиотека была скопирована в ext папку установленного PHP и подключена через php.ini. Не хочу мучить читателя рассказами о том, на какие грабли я наступал, сколько времени потратил на безуспешные попытки разобраться что же не получается и описывать fail attempts, а так же не претендую на элегантность решения — я просто опишу небольшой how-to, который родился в процессе изучения сабжа и помог мне победить эту напасть…

Читайте также:  Как узнать частоту оперативную память компьютера windows 10

Кульминация (а-ка How-To)

Итак, задача в целом выглядит так:

  1. скачать и установить php (если не установлен)
  2. скачать и установить Informix Client SDK (Informix CSDKF)
  3. скачать исходники php и pdo_informix и собрать из них php
  4. извлечь из собранного релиза расширение php_pdo_informix.dll и подключить его в установленную версию PHP
  5. работать

Далее я приведу выдержку-перевод-адаптацию статьи из php wiki, посвящённую сборке PHP на Windows, исполненную под наш конкретный случай…

Приступая к работе

Итак, wiki требует от нас исполнения трёх требований для того, чтобы успешно собрать PHP на Windows:

  1. Правильно настроить окружение для того, чтобы можно было скомпилировать код (всякие правильные SDK и тулзы, используемые для компиляции)
  2. Иметь необходимые при компиляции библиотеки и заголовки для сторонних библиотек
  3. Иметь исходные коды PHP

Установка окружения

Этот пункт является самым неинтересным. Он потребует установки кучи всякого софта, поэтому потребуется много места под него на Вашем жёстком диске — готовьте гигабайты свободного пространства…

Требования

  1. Официально PHP поддерживает сборку с помощью Visual C++ 6.0 или Visual C++ 9 (так же известной, как Visual C++ 2008 — смотрите, не запутайтесь). В нашем случае, я пользовался Microsoft Visual C++ 2008 Express Edition
  2. Для компилятора потребуется ещё Windows SDK правильной версии. При работе с VC9 необходим будет SDK 6.1. Список поддерживаемых версий можно посмотреть на страницах wiki
  3. В процессе сборки могут потребоваться различные бинарные утилиты, которые можно скачать отсюда: http://pecl2.php.net/downloads/php-windows-builds/php-libs/binary-tools.zip

Установка

Тут всё достаточно просто и понятно:

  1. Установите скачанную Visual Studio 2008
  2. Установите Windows SDK 6.1 (тут можно пойти покурить, попить чайку, поморщить кошака — хоть как-то скоротать время, которого может понадобиться много при средней мощности машинки и не очень шутрого инета)
  3. скачайте php 5.3 snapshot, но пока никуда не распаковывайте. Пригодится
  4. Создайте папку, где будете заниматься всей предстоящей бесовщиной. Пусть будет C:\php-sdk , как предлагает нам wiki…
  5. Распакуйте в эту папку архив binary-tools.zip. Там должно быть 2 папки — bin и script
  6. Откройте Windows SDK 6.1 CMD Shell (можно найти в установленных программах в меню Пуск) и введите следующие команды:
  7. Теперь извлеките snapshot , о котором говорилось в пункте 3) в папку C:\php-sdk\php53dev\vc9\x86\ , чтобы получить в итоге следующую директорию: C:\php-sdk\php53dev\vc9\x86\php5.3-SNAPSHOTTIME
  8. Скачайте исходники последней стабильной версии PDO_INFORMIX, распакуйте и скопируйте содержимое папки в архиве в папку C:\php-sdk\php53dev\vc9\x86\php5.3-SNAPSHOTTIME\ext\pdo_informix
  9. В той же папке, куда Вы распаковывали snapshot ( C:\php-sdk\php53dev\vc9\x86 ), находится папка deps , куда необходимо будет сложить все требуемые для сборки файлы. В нашем случае, потребуется из установленного Informix CSDK скопировать содержимое папки lib и всех папок папки incl ( C:\path-to\IBM\Informix\Client-SDK\ ) в папку C:\php-sdk\php53dev\vc9\x86\deps\lib и C:\php-sdk\php53dev\vc9\x86\deps\include соответственно
  10. После всего вышеперечисленного выполните в командной строке следующие команды:
  11. В папке C:\php-sdk\php53dev\vc9\x86\php5.3-SNAPSHOTTIME\Release_TS будет лежать заветный php_pdo_informix.dll , который копируйте в папку ext установленного в системе PHP и прописывайте строчки подключения расширения в php.ini :
  12. Проверяйте наличие расширения, выполнив в командной строке команду php -m

Развязка + Эпилог

Если честно, для меня было крайне интересно всё это узнать и мало того — сделать. Однако, мне непонятно то, что до всего этого дошло. Почему не получается это сделать идущими в комплекте установки PEAR’ом? Я понимаю, что мало кому интересно поддерживать windows-ветку продукта, который в подавляющем большинстве случаев используется на *nix системах, однако, если уж взялись за поддержку, то и не грех бы и развивать как-то.

Но это так, мысли в слух. А по-существу: получили то, что хотели, оно работает, работа, которую эта проблема сдерживала, продолжается… Да и людям, которые могут столкнуться с подобной проблемой, думаю, может пригодится мой опыт.

Установка PHP-расширения в Windows

В Windows есть два способа загрузки PHP-расширения: скомпилировать его вместе с PHP или загрузить DLL. Загрузка заранее скомпилированного расширения является наиболее простым и предпочитаемым способом.

Для загрузки расширения, оно должно присутствовать на вашей системе в виде «.dll» файла. Все расширения автоматически и периодически компилируются командой PHP (см. следующий раздел для загрузки).

За инструкциями по компиляции расширения в PHP обратитесь к разделу «Сборка из исходников».

Для компиляции отдельного расширения (или DLL-файла), обратитесь к разделу » Сборка из исходников». Если DLL-файла нет ни в стандартной поставке PHP ни в PECL, возможно, вам придется скомпилировать его вручную.

Где найти расширение?

PHP-расширения обычно имеют имена вида «php_*.dll» (где звездочка обозначает имя расширения) и располагаются в папке «PHP\ext».

PHP поставляет расширения наиболее полезные большинству разработчиков. Такие расширения называются «основными» («core»).

Однако, если вам требуется функционал, который не предоставляется ни одним из основных расширений, возможно, нужное вам расширение есть в PECL. Библиотека расширений сообщества PHP (The PHP Extension Community Library, PECL) является хранилищем расширений PHP, предоставляя каталог и хостинг всех известных расширений для скачки и дальнейшей разработки расширений в PHP.

Если вы разработали какое-либо расширение для собственных нужд, возможно, вы захотите хранить его в PECL, так, чтобы другие также могли воспользоваться результатами вашего труда. Хорошим побочным эффектом будет неплохой шанс получить обратную связь, благодарности (надеемся, что так и будет), сообщения об ошибках и даже исправления/патчи. Пожалуйста, прочтите » публикация PECL; перед отправкой вашего расширения в PECL.

Какое расширение нужно загрузить?

Очень часто существует несколько версий расширения DLL:

  • Различные номера версий (по крайней мере первые два числа должны совпадать)
  • Различные настройки потокобезопасности
  • Различная архитектура процессора (x86, x64, . )
  • Различные настройки отладки
  • и т.д.

Помните, что настройки ваших расширений должны совпадать со всеми настройками используемого вами бинарного файла PHP. Следующий PHP-скрипт выведет вам все настройки PHP:

Пример #1 Вызов phpinfo()

Установка расширений PHP в ОС Windows

После установки PHP и веб-сервера на ОС Windows может понадобиться установить некоторые расширения для добавления функционала. Вы можете выбрать, какие расширения будут загружаться при старте PHP, модификацией вашего файла php.ini . Также вы можете загружать расширения динамически в ваших скриптах, используя функцию dl() .

Библиотеки DLL расширений PHP имеют префикс php_.

Многие расширения встроены в Windows-версию PHP. Это значит, что дополнительные DLL-файлы и директива extension не используются для загрузки данных расширений. Таблица расширений PHP в Windows, содержащая список расширений, требующих (или обычно требующих) дополнительные DLL-файлы. Ниже приведен список встроенных расширений (обновлено PHP 5.0.4): BCMath, Caledar, COM, Ctype, DOM, FTP, LibXML, Iconv, ODBC, PCRE, Session, SimpleXML, SPL, SQLite, WDDX, XML и Zlib.

Место по умолчанию, в котором PHP ищет расширения — C:\php5 . Для изменения данной настройки согласно вашей установке PHP отредактируйте файл php.ini следующим образом:

измените опцию extension_dir так, чтобы она указывала на директорию, в которой расположены расширения или в которую вы поместили файлы php_*.dll . Например:

Включите одно или несколько расширений, которые вы хотите использовать, раскомментировав в файле php.ini строки вида extension=php_*.dll. Это делается удалением символа «;» в начале строки для каждого расширения, которое вы хотите включить.

Пример #1 Включение расширения Bzip2 в PHP-Windows

Некоторые расширения для своей работы требуют дополнительные библиотеки DLL. Несколько из них находятся в распространяемом дистрибутиве PHP, в в корневой директории, но некоторые расширения, например, Oracle ( php_oci8.dll ), требуют наличия библиотек DLL, не включаемых в дистрибутив PHP. Не забудьте включить директорию C:\php в системную переменную PATH (данный процесс описан в отдельном разделе помощи).

Некоторые из этих библиотек DLL не поставляются в дистрибутиве PHP. За деталями обратитесь к странице документации конкретного расширения. Также прочтите раздел руководства Установка расширений PECL, чтобы узнать дополнительную информацию о PECL . Все большее число расширений PHP можно найти в PECL , и данные расширения требуют отдельной загрузки.

Расширения php для windows

В Windows есть два способа загрузки PHP-модуля: скомпилировать его вместе с PHP или загрузить DLL. Загрузка заранее скомпилированного модуля является наиболее простым и предпочитаемым способом.

Для загрузки модуля, он должен присутствовать в вашей системе в виде «.dll» файла. Все модули автоматически и периодически компилируются командой PHP (смотрите следующий раздел для загрузки).

За инструкциями по компиляции модуля в PHP обратитесь к разделу «Сборка из исходников».

Для компиляции отдельного модуля (или DLL-файла), обратитесь к разделу » Сборка из исходников». Если DLL-файла нет ни в стандартной поставке PHP ни в PECL, возможно, вам придётся скомпилировать его вручную.

Где найти модуль?

PHP-модули обычно имеют имена вида «php_*.dll» (где звёздочка обозначает имя модуля) и располагаются в папке «PHP\ext».

PHP поставляет модули наиболее полезные большинству разработчиков. Такие модули называются «основными» («core»).

Однако, если вам требуется функционал, который не предоставляется ни одним из основных модулей, возможно, нужный вам модуль есть в » PECL. Библиотека модулей сообщества PHP (The PHP Extension Community Library, PECL) является хранилищем модулей PHP, предоставляя каталог и хостинг всех известных модулей для скачки и дальнейшей разработки модулей в PHP.

Если вы разработали какой-либо модуль для собственных нужд, возможно, вы захотите хранить его в PECL, так, чтобы другие также могли воспользоваться результатами вашего труда. Хорошим побочным эффектом будет неплохой шанс получить обратную связь, благодарности (надеемся, что так и будет), сообщения об ошибках и даже исправления/патчи. Пожалуйста, прочтите » публикация PECL; перед отправкой вашего модуля в PECL.

Какой модуль нужно загрузить?

Очень часто существует несколько версий модуля DLL:

  • Различные номера версий (по крайней мере первые два числа должны совпадать)
  • Различные настройки потокобезопасности
  • Различная архитектура процессора (x86, x64, . )
  • Различные настройки отладки
  • и т.д.

Помните, что настройки ваших модулей должны совпадать со всеми настройками используемого вами бинарного файла PHP. Следующий PHP-скрипт выведет вам все настройки PHP:

Пример #1 Вызов phpinfo()

Читайте также:  Не устанавливается tensorflow windows
Оцените статью