XSLT-трансформация
стала неотъемлемой частью работы web-программиста, поэтому я недавно
столкнулся с казалось бы пустяковой задачей - использованием
класса XSLTProcessor. Для своих опытов использую Denwer c PHP 5.3.3, ОС -
Windows. (У меня PHP 5.2.12)
Создаем экземпляр класса XSLTProcessor:
и получаем ошибку:
Понятно, что не подключено какое-то расширение. "Гугленье" выдавало бесконечное множество плохих советов, однако единственно правильным решением для среды Windows(как стало известно потом) было в раз комментировании
в PHP.ini. Для Denwer'а этот файл находится в \usr\local\php5. Перезапуск сервера ничего не решил, опять та же самая ошибка. 10 часов поиска в интернете не принесли успеха, и я уже стал отчаиваться, но мой внутренний голос твердил мне: "Читай комментарии к статьям". И тут я наткнулся на пост, где пользователь пишет, как включить вывод ошибок при запуске Apache. В Denwer'е они отключены, и для включения необходимо в файле php.ini установить значение параметра на On
Теперь при перезапуске Apache видим из-за чего расширение php_xsl.dll не подключается
Оказывается конфликт версий! Отлично, пробуем скачать Zip архив нужной нам версии PHP и взять сборку от туда. Скажу честно, я потратил ещё 3 часа на поиск сборок и только потом на официальном сайте http://windows.php.net увидел ссылочку маленьким шрифтом archives.
$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 необходимо:
- Раз комментировать строку extension=php_xsl.dll в файле php.ini
- Включить отображение предупреждений и ошибок при запуске сервера Apache установкой флага On у параметра display_startup_errors = On
- Найти нужную сборку php_xsl.dll на ресурсе http://windows.php.net/downloads/releases/archives/ и скопировать её в папку с расширениями(Для Denwer'а это \usr\local\php5\ext)
- Перезапустить сервер Apache
sudo apt-get install php5-xsl
ОтветитьУдалить