2012-01-15 91 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