Задача
Есть довольно большой кусок кода, использующий для генерации PDF pdflib. Есть Windows + Денвер 3 на локальной машине и Ubuntu (+ стандартный набор — apache 2.2, php 5.2.10) на дев сервере. Задача: установить расширение PHP pdflib на обеих машинах. Проблема состоит в том, что:
1) бесплатная версия pdflib — pdflib lite на оффсайте существует только в виде исходных кодов;
2) в исходных кодах pdflib lite отсутствует код собственно расширения PHP pdflib (об этом я узнал не сразу, сначала пришлось набить несколько шишек);
3) в случае Ubuntu — в репозитории нет стандартного пакета с pdflib (может быть, он все-таки есть, но за 2 дня поисков я его так и не нашел);
4) в случае Windows — даже если бы были исходные коды расширения, ставить Visual Studio 6.0 только ради того, чтобы скомпилировать расширение желания никакого нет.
Решение для Windows + Денвер 3
Решение оказалось очень простым.
1. Заходим на http://php.net/releases/ и качаем коллекцию PECL модулей для той версии интерпретатора PHP, которая установлена у вас в Денвере 3. В случае последней версии Денвера 3 с оффсайта это php 5.2.4, поэтому качаем следующий zip архив: http://museum.php.net/php5/pecl-5.2.4-Win32.zip.
2. Из этого архива достаем заветную php_pdf.dll и кладем ее в
<denwer_root>\usr\local\php5\ext\
3. В <denwer_root>\usr\local\php5\php.ini находим секцию Windows Extensions и добавляем в нее строчку
extension=php_pdf.dll
4. Перезапускаем денвер — на этом установка расширения закончена.
В случае Ubuntu все оказалось несколько сложнее.
Решение для Ubuntu
1. Скачиваем исходный код pdflib lite с оффсайта:
wget http://www.pdflib.com/binaries/PDFlib/704/PDFlib-Lite-7.0.4p4.tar.gz
2. Распаковываем во временную директорию и переходим в нее:
tar -zxvf PDFlib-Lite-7.0.4p4.tar.gz - C /tmp
cd /tmp/PDFlib-Lite-7.0.4p4
3. Компилируем и устанавливаем pdflib lite:
./configure
make
make install
4. Компилируем и устанавливаем расширение PHP pdf.so с помощью утилиты pecl:
pecl install pdflib
Когда pecl спросит имя директории куда установлена pdflib lite — указываем
/usr/local
Если оказалось, что в вашем случае pdflib lite была установлена в другую директорию — указываем ее.
5. Подключаем расширение pdf.so.
После работы pecl может оказаться так, что расширение pecl поместила расширение pdf.so в вашу папку расширений php но не подключила его. В таком случае или прямо в конце php.ini дописываем строчку
extension=pdf.so
или создаем отдельный .ini файл в той директории, где находятся .ini файлы других расширений и это строчку записываем в него а не в php.ini.
6. Перезапускаем апач.
/etc/init.d/apache2 restart
Примечания
1. Если у вас не установлена утилита pecl, то вам необходимо ее установить с помощью следующей команды:
apt-get install dh-make-php php5-dev
2. Если вдруг при попытке установке какого-либо пакета с помощью apt-get install вы видите ошибку — файл не найден на сервере, то видимо вы давно не обновляли убунту. Вам необходимо обновить список пакетов с помощью команды
apt-get update
3. Если вы используете файлы windows шрифтов, которые имеют кодировку cp1251 а у вас в убунте локаль cp1251 отсутствует, то необходимо ее установить с помощью команды
localedef -c -i ru_RU -f CP1251 ru_RU.CP1251
4. По причине того, что бесплатная версия pdflib lite довольно сильно ограничена по функциональности, в новых проектах ее лучше не использовать. Для генерации pdf в новых проектах лучше взглянуть в сторону dompdf или FPDF.