php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #12064 Truetype functions can't locate fonts
Submitted: 2001-07-11 15:03 UTC Modified: 2001-07-23 03:36 UTC
From: ben at kescom dot net Assigned:
Status: Closed Package: GD related
PHP Version: 4.0.6 OS: Windows 2000 SP1
Private report: No CVE-ID: None
 [2001-07-11 15:03 UTC] ben at kescom dot net
The GD TrueType functions can't find fonts; relative paths and absolute paths both do not work.

Example (font is in the local directory, and . is part of my php.ini include_path)
<?
$image = ImageCreateTrueColor(200,200);
ImageTTFText($image, 20, 0, 2, 15, $red, "d:/path/to/font.ttf", "Some text.");
header("Content-type: image/jpeg");
// alternatively, ImageTTFText($image, 20, 0, 2, 15, $red, "font.ttf", "Some text."); 
header("Content-type: image/jpeg");
ImageJPEG($image, '', 100);
ImageDestroy($image);
?>
(written off the top of my head, it's in a larger script, but test scripts I wrote and unfortunately deleted don't work either)

PHP reports: Warning: Could not find/open font in d:\path\to\fonttest.php on line 3

This is from the binary Win32 distribution of PHP 4.0.6 on php.net.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-07-12 14:36 UTC] rasmus@php.net
No idea about the Windows version, but on UNIX the new GD2 library is hardcoded to look for TTF fonts in /usr/share/fonts/truetype.  Also, it automatically adds the .ttf extension itself so in your code you should not put the .ttf extension on your font.
 [2001-07-12 15:40 UTC] ben at kescom dot net
Rasmus:

  I did some reading through the GD docs; it seems that GD uses an environment variable called GDFONTPATH to locate its fonts when no path is specified (this seems to imply that the proper extension would also be appended). However, setting this properly did not work. The documentation also says that a full path will be accepted (with .ttf ending) if specified as a parameter.

  Seems like a problem with the way PHP is passing the string, perhaps. I would play with the source, but I don't have a compiler for this environment right now; it seems that people are not having this problem on Unices, so I won't bother looking there.

Any clue?

Thanks,
Ben
 [2001-07-12 16:00 UTC] dbeu@php.net
please use filemon (www.sysinternals.com) to find out where php/gd is searching for the fonts, and report back.

thanks.
 [2001-07-12 16:08 UTC] wez@php.net
Are you sure that GD understands d:/path/to/font.ttf as a path?
Should it be d:\\path\\to\\font.ttf ?

--Wez.
 [2001-07-12 17:18 UTC] ben at kescom dot net
Pretty sure, but it doesn't work the other way around either.
 [2001-07-12 17:34 UTC] ben at kescom dot net
Ok, I checked out filemon.
Here's what's happening:
GD first tries to open files inside the Apache root (not the web root; for instance, on my box, C:\Program Files\Apache. So, if I've specified "C:\\path\\to\\font.ttf" in my path, I end up with:
C:\Program Files\Apache\C\C:\path\to\font.ttf.ttf

Next, it tries the current directory. However, it seems to be unable to process Windows drive letters, and so defaults to drive C: (my webroot's on D:, which is a problem), so I get
C:\path\to\script\C:\path\to\font.ttf.ttf

You get the idea. I made a directory structure on C: mimicing that of my D: webroot, but only containing the fonts; it worked fine (although the antialiasing was horrific, but that's a GD/FT2 issue).

 [2001-07-22 19:20 UTC] joey@php.net
Fixing "null" status.

So, is this a GD Bug, or a PHP bug?
 [2001-07-22 19:22 UTC] ben at kescom dot net
That would take a good look at the source code to see how PHP is passing arguments to the GD library.
 [2001-07-23 03:36 UTC] dbeu@php.net
already fixed in cvs.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Mar 28 14:01:29 2024 UTC