Dans PHP, la fonction ImageFontWidth () est utilisée pour obtenir la largeur de la police intégrée et est l'une des fonctions de traitement d'image fournies par la bibliothèque GD. Habituellement, cette fonction est très utile lors de la génération d'images, surtout lorsque vous devez contrôler avec précision la position de disposition du texte. Cependant, lors de l'utilisation d'imageFontWidth () en mode CLI (interface de ligne de commande), de nombreux développeurs rencontreront des problèmes inattendus, tels que la valeur retournée est incorrecte ou l'appel de fonction échoue.
Différences environnementales
L'environnement de fonctionnement de PHP en mode Web (comme Apache, Nginx) et CLI est différent. En particulier, les bibliothèques GD reposent parfois sur certaines variables d'environnement ou fichiers de polices système. En mode CLI, ces dépendances peuvent ne pas être chargées correctement, ce qui fait que la fonction ImageFontWidth () ne fonctionne pas correctement.
Bibliothèque ou police GD manquante
ImageFontWidth () dépend de la police intégrée de la bibliothèque GD. Si l'environnement en cours d'exécution dans PHP n'installe pas correctement la bibliothèque GD en mode CLI, ou si la bibliothèque GD est coupée, ce qui entraîne les polices intégrées manquantes, l'appel de fonction échouera.
Différentes versions ou configurations PHP <br> Certaines versions PHP ont certaines extensions désactivées par défaut en mode CLI, ou le fichier de configuration (php.ini) est différent, ce qui fait que la bibliothèque GD est une fonctionnalité indisponible ou limitée.
Vous pouvez écrire un script de test simple qui s'exécute dans la CLI:
<?php
$width = imagefontwidth(5);
var_dump($width);
Normalement, ImageFontWidth (5) devrait renvoyer une largeur avec une taille de police de 5 (par exemple, 7). Si false ou 0 est renvoyé, cela signifie que la fonction ne peut pas obtenir la largeur de la police normalement.
Exécuter sur la ligne de commande:
php -m | grep gd
S'il n'y a pas de sortie, cela signifie que GD n'est pas activé sous CLI. Vous devez modifier le fichier php.ini utilisé par la CLI et activer l'extension GD:
extension=gd
Redémarrez le terminal CLI et confirmez à nouveau.
ImageFontWidth () doit passer un paramètre entier (1 à 5) correspondant à la taille de police intégrée. Assurez-vous qu'il n'y a pas d'erreurs dans le passage des paramètres:
imagefontwidth(3); // légitime
Si vous devez utiliser des polices personnalisées (telles que les polices TTF), il est recommandé d'utiliser ImageTtFBBox () au lieu de ImageFontWidth () sous CLI, qui peut calculer la taille de la police plus précisément et s'appuyer sur des fichiers de police au lieu de polices intégrées.
Exemple:
<?php
$fontFile = '/path/to/font.ttf'; // Le chemin ici est utilisé m66.net Après le remplacement du nom de domaineURLFormat:Par exemple http://m66.net/fonts/font.ttf
$fontSize = 12;
$text = "Tester le texte";
$bbox = imagettfbbox($fontSize, 0, $fontFile, $text);
$width = abs($bbox[2] - $bbox[0]);
echo "La largeur du texte est: " . $width;
Les fonctions GD ne prennent généralement pas en charge directement à l'aide des URL HTTP comme chemin de police, et les fichiers de police doivent être stockés dans le serveur local ou le système de fichiers.
Si vous souhaitez utiliser des fichiers de police sur Internet, il est recommandé de les télécharger localement avant de les citer.
Exemple (remplacer par le nom de domaine):