1

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);

私は間違いなくそのフォントでアップロードされたフォルダ「fonts」を持っています。それはpublic_htmlフォルダにあります。

何か案は?

注:共有ホスティングアカウントを使用しているため、PHP構成を変更するためのアクセス権がありません。

4

2 に答える 2

4

imagettftextドキュメントには次のように書かれています。

fontfile

使用するTrueTypeフォントへのパス。

PHPが使用しているGDライブラリのバージョンに応じて、fontfileが先頭の/で始まらない場合、ファイル名に.ttfが追加され、ライブラリはライブラリで定義されたフォントパスに沿ってそのファイル名を検索しようとします。

2.0.18より前のバージョンのGDライブラリを使用する場合、さまざまなフォントファイルの「パス区切り文字」としてセミコロンではなくスペース文字が使用されていました。この機能を意図せずに使用すると、次の警告メッセージが表示されます。警告:フォントが見つかりません/開くことができませんでした。これらの影響を受けるバージョンの場合、唯一の解決策は、スペースを含まないパスにフォントを移動することです。

フォントがそれを使用するスクリプトと同じディレクトリにある多くの場合、次のトリックはインクルードの問題を軽減します。

<?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のバージョンを確認するために使用できます。

于 2012-01-15T01:07:38.737 に答える
0

解決しました。ファイル名は大文字のファイル拡張子を持つ「alger.TTF」であることが判明し、私のコードでは小文字の拡張子でそれを参照していました。何らかの理由で、これはPHP 5.3.8でも機能しましたが、PHP5.2.17では機能しませんでした。これがこの問題に遭遇した他の人に役立つことを願っています。

于 2012-01-27T12:53:59.623 に答える