neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Alles, was PHP betrifft, kann hier besprochen werden.

neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby hagozi » 23. February 2020 14:51

Hallo,

ich habe vor kurzem ein neues xampp mit php7.3.13 installiert.
Heute habe ich bemerkt, dass alle Dateien, in denen ich imagettftext() verwendet habe, nicht mehr funktionieren.
In phpinfo steht bei GD, dass freetype aktiviert ist.
Ich bin ratlos.
Kann mir jemand helfen?

Gruß, Hago
hagozi
 
Posts: 31
Joined: 06. March 2008 09:50

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby Nobbie » 23. February 2020 18:52

Welche Fehlermeldungen bekommst Du genau? Und wann genau hat es die Funktion zuletzt getan? Was steht im Error_Log? Usw. - nur "funktioniert nicht" ist leider gar nichts, womit irgendjemand irgendetwas anfangen könnte.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby hagozi » 23. February 2020 19:53

Fehlermeldung bekomme ich gar keine, es ist einfach keine Schrift zu sehen, wo bisher eine war.
Mein Rechner war kaputt und kam vor ca. 3 Wochen mit einer gelöschten Festplatte aus der Garantiereparatur zurück.
Zuvor war xampp mit PHP5.3 drauf, jetzt habe ich eben xampp mit PHP7.3 installiert.
Mit PHP5.3 hat alles funktioniert wie es sollte, auf dem Server im Internet funktioniert es (mit PHP5.3)

Das hier ist der error-log, der entsteht, wenn ich die Datei bild3.php im Browser aufrufe:
[Sun Feb 23 19:43:00.401365 2020] [php7:warn] [pid 15912:tid 1840] [client ::1:50099] PHP Warning: imagettftext(): Could not find/open font in C:\\xampp\\htdocs\\aserver\\phpteile\\bild3.php on line 8, referer: http://localhost/aserver/phpteile/

Die Schrift ist aber nach wie vor da.

Gruß, Hago
hagozi
 
Posts: 31
Joined: 06. March 2008 09:50

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby Nobbie » 24. February 2020 01:13

°Could not open font" ist eine klare Fehlermeldung. Was auch immer die Ursache ist, das ist jedenfalls das Problem. Vielleicht heisst der Font nur so ähnlich, vielleicht ist da eine Ergänzung a la "Regular" oder "Bold" oder was auch immer dran, vielleicht ist es kein Truetype Font, egal was, irgendetwas stimmt da nicht. Da wir hier weder den PHP Code sehen. noch den Fontnamen wissen usw. kann hier sowieso keiner etwas dazu sagen. Da musst Du selbst drauf komnen, kannst ja notfalls auch mal andere Fonts probieren usw.

Lies Dir unbedingt auch diese Doku durch https://www.php.net/manual/de/function.imagettftext.php

Zum Parameter fontfile steht da eine sehr interessante Anmerkung, vielleicht ist ja genau das Dein Problem.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby hagozi » 24. February 2020 10:00

Nobbie wrote:°Could not open font" ist eine klare Fehlermeldung. Was auch immer die Ursache ist, das ist jedenfalls das Problem.
So weit war ich auch schon, deshalb schreibe ich ja, dass die Schrift da ist und glaube mir, ich habe genau geprüft, ob das die richtige Schrift ist und ob mit der Schriftdatei alles ok ist. Ich habe sie mir schließlich von meinem Internet Account, wo sie offensichtlich funktioniert, frisch heruntergeladen. Andere Fonts habe ich längst ausprobiert.
Hier funktionierts:
http://hagoschaos.de/phptest/bildi.php
Das Wort "konzept" ist mit arial.ttf hergestellt.
Exakt die gleichen Dateien funktionieren auf meinem lokalen Rechner mit PHP7.3 nicht.
Code: Select all
Header ("Content-type: image/png");
$im = imagecreatetruecolor(560, 145) or die("kein Bild");
$white = imagecolorallocate($im, 187, 204, 170);
$yellow = imagecolorallocate($im, 255, 255, 0);
$text="konzept";
$font="arial.ttf";
imagettftext($im, 110, 0, -5, 110, $yellow, $font, $text);
imagecolortransparent($im, $white);
imagepng($im);
imagedestroy($im);
Das ist die Datei die das gelbe "konze" herstellt.

Nobbie wrote:Lies Dir unbedingt auch diese Doku durch https://www.php.net/manual/de/function.imagettftext.php
Das war natürlich das Erste, das ich gelesen habe. Die Anmerkungen bei "fontfile" habe ich gesehen und berücksichtigt.

Eben habe ich die fraglichen Test-Dateien auf den Account eines Freundes hochgeladen (dort läuft PHP7.3.14) und es funktioniert:
http://www.norbertdehmke.de/phptest/

Ich denke, an meiner xampp- oder PHP- oder vielleicht nur Freetype-Installation stimmt etwas nicht.
Hier der Anfang der phpinfos (zuerst meine, wo's nicht funktioniert, dann die vom Freund-Account, wo's funktioniert:
ImageImage

Tja, ich weiß nicht so recht weiter.

Hago
hagozi
 
Posts: 31
Joined: 06. March 2008 09:50

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby Nobbie » 24. February 2020 14:15

Dabei steht doch alles in der Doku drin. Ich denke, hier ist die Knackpunkt:

Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.


Genau das ist ja hier der Fall - die Fontdatei "arial.ttf" wird nicht gefunden. Da im Funktionsaufruf NICHT der volle Pfadname angegeben wurde (das könntest Du auch machen, also beispielsweise "C:/Windows/Fonts/arial.ttf" angeben oder so), musst Du dafür Sorge tragen, dass PHP die Fontdatei trotzdem finden kann. Möglicherweise kann man auch versuchen, die Fontdatei aus dem WIndows Verzeichnis ins Scriptverzeichnis zu kopieren, oder (was oben angegeben ist), eine Umgebungsvariable für den font path definieren, die als Inhalt den Pfad zur Fontdatei hat.

Da ist ja dann auch noch ein Beispiel darunter angegeben, anscheinend muss diese Umgebungsvariable GDFONTPATH heißen und wahrscheinlich musst Du im WIndows Setup für das Environment diese Variable neu definieren und dann den Wert "C:/Windows/Fonts" o.ä. zuweisen.

Jetzt hast Du die verschiedensten Lösungsansätze (Pfadangabe im Funktionsaufruf, Kopieren der Fontdatei und ggf. anpassen des Forenscripts und dort im Funktionsaufruf "./arial.ttf" oder vielleicht auch den vollen Pfad zum Script angeben, die Variable GDFONTPATH im WIndows Environment definieren und den richtigen Wert für das Fontverzeichnis angeben) für Dein Problem, irgendetwas davon wurde offensichtlich auf dem Server richtiger gemacht als bei Dir zu Hause. Vielleicht hat eine alte PHP Version auch automatisch im Windows Font Verzeichnis gesucht, das ist zumindest JETZT nicht der Fall. Wenn Du die Lösung mit der Umgebungsvariablen ausprobierst musst Du danach erst einmal den ganzen Rechner neu starten, sonst ist die Änderung nicht wirksam.

P.S.: Habe das Testscript mal bei mir laufen lassen, unter Linux allerdings, auch da sieht man erst einmal nix. Dann habe ich arial.ttf in das htdocs Verzeichnis kopiert (das ist bei Linux nicht c:/xampp/htdocs, sondern /opt/lampp/htdocs) und habe im Testscript auch den Wert für $font von "arial.ttf" auf "/opt/lampp/htdocs/arial.ttf" geändert und schon kann ich ein gelbes "Konzept" im Browser sehen. So einfach ist das!

Bei Deinem Kumpel läuft PHP übrigens als CGI Modul, das hat erhebliche Auswirkungen auf die Umgebungsvariablen, das Script läuft mit einer ganz anderen Umgebung als bei Dir. Alleine das kann schon verursachen, dass die Font Datei im einen Fall gefunden wird, im anderen aber nicht. Aber wenn Du es so machst wie ich, die Fontdatei kopieren und die Pfadangabe im Funktionsaufruf mitgeben, dann geht es IN JEDEM FALL. Das einzige, was dann noch schiefgehen kann (ich hatte das Problem tatsächlich dann auch noch), dass die Fontdatei arial.ttf so enge Zugriffsbeschränkungen hat (unter Linux läuft das anders als unter Windows), dass Apache/PHP die Fontdatei nicht lesen konnte. Aber auch das war leicht zu beheben und so läuft es jedenfalls am einfachsten.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby hagozi » 24. February 2020 20:10

Jetzt läuft das auch bei mir, aber erst nachdem ich den ganzen Pfad zur Windows Fontdatei angegeben hatte.
Bisher hatte ich die Fontdatei immer im selben Verzeichnis wie die PHP-Datei. Das funktioniert nicht mehr. Das ist wohl der entscheidende Unterschied.
Danke jedenfalls.

Hago
hagozi
 
Posts: 31
Joined: 06. March 2008 09:50

Re: neues xampp mit php 7.3.13 ->imagettftext() geht nicht

Postby Nobbie » 24. February 2020 20:59

hagozi wrote:Bisher hatte ich die Fontdatei immer im selben Verzeichnis wie die PHP-Datei. Das funktioniert nicht mehr. Das ist wohl der entscheidende Unterschied.


Wobei sich nicht rekonstruieren läßt, wieso es vorher lief (so herum darf man auch mal fragen). Irgendetwas ist eben heute anders (Dein Rechner ist ja quasi auf links gedreht worden), aber Du lernst hoffentlich daraus, dass es verfehlt und voreilig ist, offensichtliche Ursachen bewusst zu ignorieren. So ist das eben bei Computern, kleine Dinge können viel bewirken und wenn man schon einen Hinweis auf die Ursache hat (und das war ja der Fall), dann ist es nicht sehr hilfreich so zu tun, als wenn das nicht sein könnte. Das ist der häufigste Spruch in der Branche schlechthin "ich habe ÜBERHAUPT NICHTS GEÄNDERT". Stimmt natürlich NIE, aber das ist eben manchmal schwierig nachzuvollziehen. Hier jedenfalls war von Anfang an vollkommen klar, dass es KEIN Fehler von PHP oder imagettftext oder so ist, sondern dass der Font nicht gefunden wird. Und dann muss man auch am Ball bleiben und alles ausprobieren, was da möglich ist, anstatt zu sagen "das kann ja schon mal gar nicht sein". Vielleicht nimmst Du das als Lehre mit in die Zukunft. Ich bin seit 1985(!) professioneller Programmierer und Berater und dieses Scenario hier ist typisch und vollkommen normal.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04


Return to PHP

Who is online

Users browsing this forum: No registered users and 14 guests