Подключение GD2 к PHP
Пошаговое описание (инструкция) подключения графической библиотеки GD (GD2) к PHP
© 2007, Игорь Гузей (Guzei.com.
Задача: Добавить в PHP поддержку/модуль GD2
Как обычно начинаем тренироваться на локальном компьютере, а он, конечно, работает под виндами. Точнее Windows XP SP2. Далее подключим GD2 в PHP, настроенном через порты или собранным вручную под FreeBSD.
Подключение GD2 к PHP под Windows
Находим в дистрибутиве:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
библиотеку php_gd2.dll, т.е. версию 2.
и копируем php_gd2.dll в c:\windows
в файле c:\windows\php.ini находим строку extension=php_gd2.dll и убираем комментарий.
Перегружаем Апач. Всё.
Если наивным образом сначала убрать в php.ini комментарий и думать, что этого достаточно, то после перезагрузки Апача появится диагностика:
"Unable to load dynamic library './php_gd.dll' - Не найден указанный модуль."
Подключение GD2 к PHP под FreeBSD
PHP уже инсталлирован из портов
Точнее не только PHP, но вообще всё (php, MySQL, Apache, ...) было настроено с помощью портов.
# cd /usr/ports/lang/php4-extensions # make config добавляем галочку: "GD library support" # make deinstall # make reinstall # apachectl -k graceful мягкий перезапуск или # apachectl restart грубый перезапуск
PHP собран вручную
В этом случае требуется предварительная работа по подготовке JPEG и ZLIB
Установка поддержки JPEG
Возможны варианты
JPEG из порта
# cd /usr/ports/graphics/jpeg # make получили директорию work/jpeg-6b не делать make install
JPEG из дистрибутива
# cd /usr/dist/ # wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # gunzip -c jpegsrc.v6b.tar.gz | tar xf - # cd /usr/dist/jpeg-6b # ./configure # make
Надо установить поддержку zlib
Из порта
# cd /usr/ports/archivers/php4-zlib # make Libraries have been installed in: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules
Собираем PHP
# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd без указания директории инсталлируется встроенная в PHP библиотека GD. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b , если jpeg из порта или /usr/dist/jpeg-6b , если jpeg из дистрибутива --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean
Далее собираем новый Apache как обычно и заменяем им старый. JPEG, PNG, GIF работают.
Тестирование
gif.php: <?php function_exists("imagegif") or exit(); header("Content-type: image/gif"); $im = ImageCreateTrueColor( 200, 100 ); $text_color = ImageColorAllocate( $im, 233, 14, 91 ); ImageString( $im, 1, 5, 5, "A Simple GIF Text String!", $text_color ); ImageGif($im); ImageDestroy($im); ?> png.php <?php function_exists("imagepng") or exit(); header("Content-type: image/png"); $im = ImageCreateTrueColor( 200, 100 ); $text_color = ImageColorAllocate( $im, 233, 14, 91 ); ImageString( $im, 1, 5, 5, "A Simple PNG Text String!", $text_color ); ImagePng($im); ImageDestroy($im); ?> jpg.php: <?php function_exists("imagejpeg") or exit(); header("Content-type: image/jpeg"); $im = ImageCreateTrueColor( 200, 100 ); $text_color = ImageColorAllocate( $im, 233, 14, 91 ); ImageString( $im, 1, 5, 5, "A Simple JPEG Text String!", $text_color ); ImageJpeg($im); ImageDestroy($im); ?> gd_info.php: <TABLE BORDER=1><TR><TH>KEY<TH>VAL <?php $temp = gd_info(); foreach( $temp AS $key=>$val ) echo "<TR><TD>$key<TD>$val"; ?> </TABLE> <BR><BR><BR> <img src=./gif.php> <img src=./png.php> <img src=./jpg.php>
Пройденные ошибки
При установке библиотеки JPEG после "make" была сделана команда "make install" с расчётом, что новые файлы лягут в /usr/local и потом автоматически будут там найдены
# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd --with-jpeg-dir --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules
Но почему-то JPEG не подключился. Не было никакой отрицательной диагностики и нет результата.
По глупости я тыкался как слепой котёнок пытаясь поставить то так, то этак. То через всё встроенное, то через скаченное, то из портов. Всё это безобразие сопровождалось лишними инсталляциями от чего произошли накладки из-за которых в момент инсталляции PHP были ошибки:
# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Thank you for using PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: undefined reference to `gdImageRotate'при этом вроде директория для GD указывается, но диагностика ссылается на встроенную директорию.
# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules Thank you for using PHP. # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: undefined reference to `gdImageColorMatch' /usr/dist/php-4.4.4/ext/gd/gd.c:1151: undefined reference to `gdImageRotate' *** Error code 1
Попытка подготовить все модули отдельно и точно указать на них:
# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/ports/graphics/gd/work/gd-2.0.33 --with-jpeg-dir=/usr/dist/php-4.4.4/0/bin --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules ext/gd/gd.o: In function `zif_imagecolormatch': /usr/dist/php-4.4.4/ext/gd/gd.c:837: undefined reference to `gdImageColorMatch' ext/gd/gd.o: In function `zif_imagerotate': /usr/dist/php-4.4.4/ext/gd/gd.c:1151: undefined reference to `gdImageRotate' ext/gd/gd.o: In function `zif_imageline': /usr/dist/php-4.4.4/ext/gd/gd.c:2229: undefined reference to `gdImageAALine' ext/gd/gd.o: In function `zif_imageellipse': /usr/dist/php-4.4.4/ext/gd/gd.c:2372: undefined reference to `gdImageEllipse' ext/gd/gd.o: In function `zif_imageantialias': /usr/dist/php-4.4.4/ext/gd/gd.c:3906: undefined reference to `gdImageAntialias' *** Error code 1
Решение
После того, как были удалены все следы инсталляций GD, а потом всё сделано как написано вначале - всё получилось.
Ссылки по теме
- http://www.php.net/manual/ru/ref.image.php
- http://www.boutell.com/gd/