2012-01-15 137 views
1

我正在使用imagettftext()函数来创建自定义验证码脚本。imagettftext() - 找不到字体位置

我已经在运行PHP(5.3.8版)的PC上成功运行并测试了代码,但是当我上传到运行PHP(版本5.2.17)的共享主机帐户时,出现以下错误

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

这是第17行;

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

我肯定有一个文件夹“字体”与该字体上传,它在public_html文件夹中。

任何想法?

注意:我无权更改任何PHP配置,因为我使用的是共享主机帐户。

回答

0

已解决。事实证明,文件名是“alger.TTF”,带有大写的文件扩展名,在我的代码中,我指的是一个小写的扩展名。由于某些原因,这仍然工作在PHP 5.3.8,但不是在PHP 5.2.17我希望这可以帮助任何其他人遇到此问题

3

imagettftext文件说:

fontfile

您要使用的TrueType字体的路径。

根据其GD库的PHP版本使用,当 fontfile没有领先/时则.ttf将被追加到 文件名开始,图书馆将尝试沿着库搜索该文件名 - 定义的字体路径。

当使用GD库低于2.0.18,一个空格字符 ,而不是一个分号的版本,被用作“路径分隔符” 对于不同的字体文件。无意中使用此功能将导致 警告消息:警告:找不到/打开字体。对于 这些受影响的版本,唯一的解决方案是将字体移动到不包含空格的路径 。

在很多情况下,字体与使用它的脚本 位于相同的目录中,以下技巧将缓解任何包含问题。

<?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'; ?> 

你试试这个?您可以使用gd_info来检查您正在使用的GD版本。

+0

它不在同一个文件夹,但它在一个子目录。 – 2012-01-15 01:16:02

+0

@MichaelRuta:然后补偿:'putenv('GDFONTPATH ='。realpath('。'。''/ fonts')' – Jon 2012-01-15 01:17:55

+0

解决。 事实证明,文件名是“alger.TTF”的大写文件扩展名,在我的代码中我指的是一个小写的扩展名。 由于某些原因,这仍然工作在PHP 5.3.8,但不是在PHP 5.2.17 我希望这可以帮助任何其他人遇到此问题。 – 2012-01-15 01:28:14