Einzelnen Beitrag anzeigen
  #12 (permalink)  
Alt 05-03-2012, 13:27
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Ich wollte ursprünglich schreiben, dass du zuerst einmal die Ursache dieses merkwürdigen Verhaltens recherchierst, bevor du einen Bugreport absetzt.

Zu spät.

Der Bug-Report wäre übrigens hier passender gewesen:
https://bitbucket.org/pierrejoye/gd-libgd/issues

Zitat:
Zitat von DjDope Beitrag anzeigen
Des Rätsels Lösung: Der Fontname darf wohl nur 8+3 Zeichen lang sein, war aber 9+3, jetzt einfach das Park weg gelassen und es geht
So wie es aussieht, kann der Parameter $fontname mehrdeutig interpretiert werden[0]. Man kann damit mehrere Pfade angeben, an denen nach der Font-Datei gesucht wird. Bei älteren LibGD-Versionen war wohl als Separator für die verschiedenen Pfade ein Leerzeichen (m() vorgesehen. Das gab selbstverständlich Probleme, wenn Pfade selbst Leerzeichen enthielten. Der Fehler wurde dadurch "behoben", dass jetzt ein Semikolon die Pfade trennt.

Zitat, PHP-Handbuch, Funktion imagefttext(), Parameter $fontfile:

Zitat:
(...)
When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces.

In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.

(...)
Die Funktion imagettftext() ist (oder war) übrigens gleichermaßen betroffen.

Als ein Workaround wurde für Windows-Betriebssysteme auch der Short-Name-Trick empfohlen.

Die betroffene LibGD-Version 2.0.18 hat allerdings schon ein paar Jährchen auf dem Buckel. Aktuell dürfte 2.0.34 (oder neuer) sein. Leider konnte ich auf die Schnelle keine Übersicht finden, welche PHP-Version mit welcher GD-Version gebundelt wurde. Aber selbst wenn das die Ursache für dein Problem wäre, müsste dein PHP schon ziemlich betagt sein.

Zitat:
(...)

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.

(...)
Dieser Abschnitt lässt noch eine weitere Interpretation zu: Der Parameter $fontfile "vermurkst" lokale Pfadangaben (so wie deine). Unklar ist nur, wie eine Verkürzung des lokalen Pfades um ein Zeichen dann plötzlich gefunden werden sollte. Unter Windows könnte man per ProcessMonitor die Pfadaufrufe mitloggen um nachzuvollziehen, wie die Zeichenkette umgewandelt wird.

Auch müsste das Ersetzen des relativen Pfades durch einen absoluten den Fehler beseitigen. Probeweise so:
PHP-Code:
imagefttext(..., realpath($fontfile), ...); 
--
[0] Genaueres lässt sich erst nach einem Blick in die (Freetype-?)Quellcodes sagen. Mal schauen ...

Der zweite Zitat-Abschnitt scheint Unsinn zu erzählen. Die Existenz eines Font-Files wird geprüft, indem an jeden angegebenen Pfad erst ein Leerstring, dann ".ttf", ".pfa", ".pfb" und schließlich ".dfont" angehängt wird.

https://bitbucket.org/pierrejoye/gd-.../gdft.c#cl-430

Begrenzungen der Namenslänge auf 8.3 Zeichen habe ich (bisher) keine entdecken können ...

Geändert von fireweasel (05-03-2012 um 14:15 Uhr) Grund: ProcessMonitor nicht ...Explorer m(
Mit Zitat antworten