imagettftext() - Cannot find font location

Michael Ruta picture Michael Ruta · Jan 15, 2012 · Viewed 15.8k times · Source

I am using the imagettftext() function to create a custom captcha script.

I have ran and tested the code successfully on my PC, running PHP (Version 5.3.8) but when I upload to my shared hosting account running PHP (Version 5.2.17) it comes up with the following error

Warning: imagettftext() [function.imagettftext]: Could not find/open font in /home/pheelco/public_html/captcha.php on line 17

This is line 17;

imagettftext($img, 25, 0, 0, 25, $text, "fonts/alger.ttf", $num);

I definitely have the folder "fonts" uploaded with that font, its in the public_html folder.

Any ideas?

Note: I don't have access to change any PHP configurations, as I'm using a shared hosting account.

Answer

Jon picture Jon · Jan 15, 2012

The imagettftext documentation says:

fontfile

The path to the TrueType font you wish to use.

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.

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.

<?php // Set the enviroment variable for GD
putenv('GDFONTPATH=' . realpath('.'));

// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont'; ?>

Did you try this? You can use gd_info to check which version of GD you are working with.