Почему я получаю ошибку PHP Fatal error: Call to undefined function imagettftext()
в строке 29?
<?php ob_start(); session_start(); $strings = '123456789'; $i = 0; $characters = 6; $code = ''; while ($i < $characters) { $code .= substr($strings, mt_rand(0, strlen($strings)-1), 1); $i++; } $_SESSION['captcha'] = $code; //generate image $im = imagecreatetruecolor(124, 40); $foreground = imagecolorallocate($im, 0, 0, 0); $shadow = imagecolorallocate($im, 173, 172, 168); $background = imagecolorallocate($im, 255, 255, 255); imagefilledrectangle($im, 0, 0, 200, 200, $background); // use your own font! $font = 'monofont.ttf'; //draw text: imagettftext($im, 35, 0, 9, 28, $shadow, $font, $code); imagettftext($im, 35, 0, 2, 32, $foreground, $font, $code); // prevent client side caching header("Expires: Wed, 1 Jan 1997 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); //send image to browser header ("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>`
Моя информация PHP:
Согласно руководству PHP для imagettftext()
:
Эта функция требует как библиотеки GD, так и библиотеки FreeType.
Вы должны пропускать одну или обе необходимые библиотеки в своей сборке PHP.
Я решаю ту же проблему на моем docker php:7-fpm
enviroment, и я размещаю решение здесь:
Dockerfile
для настройки Dockerfile
# more Dockerfile FROM php:fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libmcrypt-dev \ libpng12-dev \ libjpeg-dev \ libpng-dev \ vim \ && docker-php-ext-install iconv mcrypt \ && docker-php-ext-configure gd \ --enable-gd-native-ttf \ --with-freetype-dir=/usr/include/freetype2 \ --with-png-dir=/usr/include \ --with-jpeg-dir=/usr/include \ && docker-php-ext-install gd \ && docker-php-ext-install mbstring \ && docker-php-ext-enable opcache gd
# on docker host machine docker exec -it $FPM_CONTAINER bash >>>> # inside the container apt-get install -y \ libfreetype6-dev \ libmcrypt-dev \ libpng12-dev \ libjpeg-dev \ libpng-dev docker-php-ext-configure gd \ --enable-gd-native-ttf \ --with-freetype-dir=/usr/include/freetype2 \ --with-png-dir=/usr/include \ --with-jpeg-dir=/usr/include \ && docker-php-ext-install gd exit <<<< docker restart $FPM_CONTAINER
Просто перекомпилируйте расширение gd.so, в папке php/ext/gd
./configure --with-php-config=/usr/local/php5/bin/php-config --with-freetype-dir=/usr/ --enable-gd-native-ttf