IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

php7.1 et php 7.2 imagettfbbox() et imagettftext()


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut php7.1 et php 7.2 imagettfbbox() et imagettftext()
    Bonjour,

    Je souhaite migrer mon site en php 7.2.10.
    Dans certains de mes scripts, j'utilise les fonctions "imagettfbbox()" et "imagettftext()".
    Ces fonctions marchent très bien sous php 5.6.36 et php 7.0.32 mais ne marchent plus sous php 7.1.22 et php 7.2.10.
    J'obtiens les messages d'erreur suivants:
    Warning: imagettfbbox(): Could not find/open font in C:\wamp\www\MS\Dipl.php on line 93
    Warning: imagettftext(): Could not find/open font in C:\wamp\www\MS\Dipl.php on line 96

    Voici un extrait de mon code qui montre ces lignes 93 et 96 (lignes 14 et 19 de mon extrait ci-dessous):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $IT='imagettftext';
    $DCL=$_POST['CertifLevel'];
    $FF='MS/AAA/ARIALUNI.TTF';
    $S1=60;
    $S2=50;
    $S3=24;
    $S4=13;
    $DFileW=996; 
    $Dipl=imagecreatefromjpeg("MS/AAA/Dipl0.jpg");
    $TiC=imagecolorallocate($Dipl, 255, 255, 255);
    $TeC=imagecolorallocate($Dipl, 0, 0, 0);
    $Txt=$_POST['CertifLevel'];
    $FS=$S1;
    $Box=imagettfbbox($FS, 0, $FF, $Txt);
    $Size=abs($Box[0])+abs($Box[2]);
    if ($Size>896) {$FS=round($S1*890/$Size); $Box=imagettfbbox($FS, 0, $FF, $Txt);}
    $X=round(($DFileW/2)-((abs($Box[0])+abs($Box[2]))/2)-2);
    $Y=103;
    $IT($Dipl, $FS, 0, $X, $Y, $TiC, $FF, $Txt);
    $X=$X+1;
    $IT($Dipl, $FS, 0, $X, $Y, $TiC, $FF, $Txt);
    Je vous montre mon code... Mais je doute que le problème vienne de là.
    C'est le seul fait de changer de version de php qui me donne des messages d'erreur.

    Evidement, je suis allé voir sur le manuel officiel de php:
    http://php.net/manual/fr/function.imagettfbbox.php
    Mais je n'ai rien trouvé qui puisse vraiment m'éclairer... à part peut-être cette note:
    "Note: Cette fonction n'est disponible que si si PHP est compilé avec le support Freetype (--with-freetype-dir=DIR )"

    Mais pourquoi donc le support Freetype aurait été supprimé sous php 7.1 et plus?
    Comment vérifier si cela est vraiment le cas?
    Ou y aurait-il une autre raison à cette panne?

  2. #2
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Voici une première sur ce forum, me voilà capable de répondre à ma propre question.
    Grâce à ce lien: https://www.wxforum.net/index.php?topic=33312.0

    Pour vous le faire bref, les chemins relatifs ne fonctionnent plus pour les fonctions imagettfbbox() et imagettftext() sous php7.1 et php 7.2.
    Il faut utiliser un chemin absolu et la fonction getcwd() (suggérée par MaitrePylos dans une autre discussion) est bien pratique.

    En supposant que le fichier arial.ttf est dans le même dossier que le script php;
    Voici un exemple de mon code valable sous php7.0 ou avant:
    La variable $FontFilePath est un chemin relatif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $FontSize='50';
    $FontFilePath='arial.ttf';
    $Text='Blabla';
    $ImagBox=imagettfbbox($FontSize, 0, $FontFilePath, $Text);
    Et voici maintenant le code valable pour toute version de php jusqu'à php7.2:
    La variable $FontFilePath est maintenant un chemin absolu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $FontSize='50';
    $FontFilePath=getcwd().'/arial.ttf';
    $Text='Blabla';
    $ImagBox=imagettfbbox($FontSize, 0, $FontFilePath, $Text);
    Voilà, j'espère que cela puisse vous aider.

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je croyais t'avoir donné cette solution sur ce fil il y a 4 jours... J'ai raté quelque chose ?

    https://www.developpez.net/forums/d1.../#post10612560

    Par ailleurs, quand tu écris ça

    toto.php

    Ce n'est pas un lien absolu. Un lien absolu serait

    /racine/de/ton/serveur/toto.php

    toto.php est juste une façon fainéante d'écrire ./toto.php, et c'est ceci que les versions récentes de PHP ne supportent plus.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Bonjour Dendrite,

    N'as tu pas vu ma réponse sur l'autre fil que tu cites?
    Je te dis: "Merci Dendrite mais tes propositions ne marchent pas."

    Merci Dendrite pour ton info que toto.php est une façon faineante d'écrire ./toto.php.
    Merci pour cette précision.

    Et en effet, le nouveau chemin que je propose est un chemin absolu du type "/racine/de/ton/serveur" rempli par la fonction getcwd():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $FontFilePath=getcwd().'/arial.ttf';

  5. #5
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    OK... Je n'avais pas compris que getcwd() renvoie le chemin absolu... OK, OK... Merci de l'info.

    Mais je maintiens que je tapais exactement à l'endroit du manuel PHP qui te donnait cette solution getcwd... et que ça t'avait échappé...
    Regarde encore une fois l'extrait du manuel que je copie-colle sur mon post dès le départ. Donc je maintiens que c'est ton "Merci Dendrite, mais tes propositions ne marchent pas" qui était une erreur.

    1 point partout quoi...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Chère Dendrite,

    Oh, tu sais, je te donne autant de points que tu veux.
    C'est toi qui m'a mis le pied à l'étrier pour apprendre le php grâce à ton tuto:
    https://www.developpez.net/forums/d6.../#post10589532
    Tuto très pédagogique que je recommande à tous. Et je te remercie encore pour ce tuto.

    Pour en revenir à la chronologie des évènements.
    Je pose ma question et en attendant une éventuelle réponse, je continue de chercher sur le net et je trouve ce lien:
    https://www.wxforum.net/index.php?topic=33312.0
    Ce lien explique qu'il faut donner un chemin absolu. Je retourne donc sur ce forum pour annoncer la nouvelle...
    Et je tombe sur ta réponse qui parle de chemin relatif moins "fainéant" que les miens.
    Ton orientation de réponse vers les chemins me conforte dans l'idée que la solution se trouve de ce coté.
    J'essaye tes chemins relatifs mais ça ne fonctionne pas. J'essaye les chemins absolu et ça marche.
    J'ai beau lire et relire ta réponse, je n'y vois pas d'exemple de chemin absolu dans ta réponse:
    https://www.developpez.net/forums/d1.../#post10612560
    J'ai tout de même cliquer sur "le pouce vers le haut" car ta réponse semblait en effet sur la bonne voie.
    J'en ai même profité pour cliquer sur tous les "pouces vers le haut" sur tes réponse de ce fil pour te donner autant points que possible. La bise.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 20h08
  2. Vieille version PHP et PHP7
    Par idaryss dans le forum Langage
    Réponses: 5
    Dernier message: 05/02/2018, 11h14
  3. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  4. [GD] [imagettfbbox & imagettftext - PHP 5.2.13]Problème sur les polices inclinées
    Par Lianodel dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 20/05/2010, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo