我正在尝试制作验证码。要做到这一点,我需要创建一个图像。我正在关注Nettuts的这个教程。要创建它,我需要使用函数imagettftext()。但每当我试图运行它时,它会给我一个错误说
imagettftext():无效的字体文件名
我的代码如下。
<?php
session_start();
$string = '';
for ($i = 0; $i < 5; $i++) {
$string .= chr(rand(97, 122));
}
$_SESSION['random_code'] = $string;
$dir = base_url('assets/fonts/asman.ttf');
$image = imagecreatetruecolor(170, 60);
$color = imagecolorallocate($image, 200, 100, 90);
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, 200, 100, $white);
imagettftext($image, 30, 0, 10, 40, $color, $dir, $_SESSION['random_code']);
?>
以防它是相关的,我使用CodeIgniter框架,但我不想使用CI验证码库。
答案 0 :(得分:1)
来自php manual:
根据PHP使用的GD库的版本,当fontfile不以前导/然后.ttf将附加到文件名时,库将尝试沿库搜索该文件名 - 已定义的字体路径。
你不应该使用url路径(还要注意你的网址不是以/
开头)
我建议在指定字体文件时使用绝对文件系统路径:
$dir = '/full/path/to/assets/fonts/asman.ttf';
imagettftext($image, 30, 0, 10, 40, $color, $dir, $_SESSION['random_code']);
我确信CI有一些函数可以返回您可以引用正确文件的应用程序路径。
答案 1 :(得分:0)
您可以尝试使用此代码对我来说有用
$dir = realpath('assets/fonts/asman.ttf');
答案 2 :(得分:0)
我遇到了类似的问题-使用realpath()PHP函数解决了它。
之前:
imagettftext($img,$font_size,0,5,5,$color_text,'../fonts/courgetteregular.ttf',$captcha_string);
之后:
$font = realpath("../fonts/courgetteregular.ttf");
imagettftext($img,$font_size,0,5,CAPTCHA_HEIGHT - 10,$color_text,$font,$captcha_string);
此外,对标头('image / png')进行注释将有助于进行故障排除。