среда, 26 октября 2011 г.

Как подключить php_xsl.dll


XSLT-трансформация стала неотъемлемой частью работы web-программиста, поэтому я недавно столкнулся с казалось бы пустяковой задачей - использованием класса XSLTProcessor. Для своих опытов использую Denwer c PHP 5.3.3, ОС - Windows.  (У меня PHP 5.2.12)




Создаем экземпляр класса XSLTProcessor:

$xProc = new XSLTProcessor();

и получаем ошибку:

Class 'XSLTProcessor' not found

Понятно, что не подключено какое-то расширение. "Гугленье" выдавало бесконечное множество плохих советов, однако единственно правильным решением для среды Windows(как стало известно потом) было в раз комментировании

extension=php_xsl.dll

в PHP.ini. Для Denwer'а этот файл находится в \usr\local\php5. Перезапуск сервера ничего не решил, опять та же самая ошибка. 10 часов поиска в интернете не принесли успеха, и я уже стал отчаиваться, но мой внутренний голос твердил мне: "Читай комментарии к статьям". И тут я наткнулся на пост, где пользователь пишет, как включить вывод ошибок при запуске Apache. В Denwer'е они отключены, и для включения необходимо в файле php.ini установить значение параметра на On

display_startup_errors = On

Теперь при перезапуске Apache видим из-за чего расширение php_xsl.dll не подключается

PHP Startup: xsl: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match

Оказывается конфликт версий! Отлично, пробуем скачать Zip архив нужной нам версии PHP и взять сборку от туда. Скажу честно, я потратил ещё 3 часа на поиск сборок и только потом на официальном сайте http://windows.php.net увидел ссылочку маленьким шрифтом archives.  
B моем случае почему то отработала версия из php-5.2.12-Win32-VC6-x86.zip (http://windows.php.net/downloads/releases/archives/php-5.2.12-Win32-VC6-x86.zip), методом проб на второй попытке после php-5.2.12-nts-Win32-VC6-x86.zip)
Ура! Сборка найдена, и теперь ошибка "Class 'XSLTProcessor' not found" меня уже не беспокоит.
Итог, который я получил после 13 часов работы - для включения возможности использования класса XSLTProcessor необходимо:
  1. Раз комментировать строку extension=php_xsl.dll в файле php.ini
  2. Включить отображение предупреждений и ошибок при запуске сервера Apache установкой флага On  у параметра display_startup_errors = On
  3. Найти нужную сборку php_xsl.dll на ресурсе http://windows.php.net/downloads/releases/archives/ и скопировать её в папку с расширениями(Для Denwer'а это \usr\local\php5\ext)
  4. Перезапустить сервер Apache
взято с http://webhybrid.ru/prog/php/xslt-processor

1 комментарий: