2007 © Игорь Гузей (Guzei.com)
Это не точная и окончательная инструкция к действию использующая правильные термины и оптимальные варианты.
Это скорее лог текущей проблемы.
Буду благодарен за любые замечания.
Как обычно начинаем тренироваться на локальном компьютере, а он, конечно, работает под виндами. Точнее Windows XP SP2. Далее подключим GD2 в PHP, настроенном через порты или собранным вручную под FreeBSD.
Находим в дистрибутиве:
\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' - Не найден указанный модуль."
Точнее не только PHP, но вообще всё (php, MySQL, Apache, ...) было настроено с помощью портов.
# cd /usr/ports/lang/php4-extensions # make config добавляем галочку: "GD library support" # make deinstall # make reinstall # apachectl -k graceful мягкий перезапуск или # apachectl restart грубый перезапуск
В этом случае требуется предварительная работа по подготовке JPEG и ZLIB
Возможны варианты
# cd /usr/ports/graphics/jpeg # make получили директорию work/jpeg-6b не делать make install
# 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
# 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
# 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, а потом всё сделано как написано вначале - всё получилось.