web-dev-qa-db-fra.com

PHP Erreur fatale: appel à la fonction non définie imagettftext ()

Pourquoi ai-je l'erreur PHP Fatal error: Call to undefined function imagettftext() sur la ligne 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 M Y H: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);
?>`

Mon PHP Info:

enter image description here

enter image description here

30
Jess McKenzie

Selon le entrée manuelle PHP pour imagettftext() :

Cette fonction nécessite à la fois la bibliothèque Gd et la "bibliothèque FreeType.

Il vous manque une ou les deux bibliothèques requises dans votre PHP build.

34
Asaph

Je résous le même problème sur mon docker php:7-fpm environnement, et je poste la solution ici:


Si vous utilisez Dockerfile pour configurer l'environnement

# more Dockerfile  
FROM php:fpm 
RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
        libmcrypt-dev \
        libpng12-dev \
        libjpeg-dev \
        libpng-dev
    && 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 Gd

Si vous souhaitez ajouter le module FreeType sur un conteneur existant:

# 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
25
Alfred Huang

Recompilez simplement l'extension Gd.so, sous le dossier php/ext/Gd

./configure --with-php-config=/usr/local/php5/bin/php-config --with-freetype-dir=/usr/ --enable-Gd-native-ttf

3
mcbill