我正在使用php创建图像我几乎编码它但我非常重要的一点,我想在我的图像中选择我的字体系列,但只有当我选择字体系列,否则默认字体运行。此逻辑未正常运行。当我没有选择任何字体系列时,默认字体会运行并向我显示输入,但是当我选择任何字体时,它也会运行并且现有图像会被覆盖,但它不会显示屏幕上的输入。
请告诉我这是什么问题。这是我的php文件代码:
<?php
include_once('includes/includes.inc.php');
if(isset($_GET['txt'])){
$txt = $_GET['txt'];
$_SESSION['txt'] = $txt;
}
if(!isset($_SESSION['rand'])){
$rand = mt_rand(100,1000);
$_SESSION['rand'] = $rand;
}
$im = @imagecreate(288, 288) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 230, 248, 248);
$text_color = imagecolorallocate($im, 85, 85, 85);
if(isset($_GET['Smile'])){
$query = mysql_query("SELECT * FROm tbl_fonts WHERE font_name = '".$_GET['Smile']."'");
$get = mysql_fetch_array($query);
$desfon = 'images/fonts/'.$get['font_name'].'.ttf';
//echo $desfon;
imagettftext($im, 55, 0, 155, 55, $text_color, $desfon, $_SESSION['txt']);
}
else{
imagestring($im, 55, 155, 55, $_SESSION['txt'], $text_color);
}
header("Content-Type: image/png");
$filename1 = $_SESSION['txt'].$_SESSION['rand'].'.png';
imagepng($im,$filename);
echo '<img src="'.$filename.'" alt="" />';
?>
答案 0 :(得分:0)
首先,在公共场所使用此代码之前,您确实应该处理一些安全问题。一个好的开始方法是通过查看Why shouldn't I use mysql_* functions in PHP?和How to prevent SQL injection in PHP?来修复SQL注入问题
同样写入您直接从GET
参数获取的文件名允许攻击者几乎在系统中的任何位置写入。确保验证输入。至少使用像basename()这样的东西来保存文件在同一目录中。
然后到你的实际问题。可能是您正在运行imagettftext manual
中提到的GD库版本根据PHP使用的GD库版本,当fontfile不以前导/开头时,然后.ttf将附加到文件名,库将尝试沿库定义的字体路径搜索该文件名。
因此,您的服务器实际上可能正在寻找images/fonts/fontname.ttf.ttf
,尝试像$desfon = 'images/fonts/'.$get['font_name'];
一样使用它,看看它是否有效。
将GDFONTPATH
设置在脚本顶部并简单地使用$desfon = $get['font_name'];
<?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . dirname(__FILE__).'/images/fonts/');
?>
调试应用程序的其他方法可能是转储imagettftext
调用的内容并查看其内容。请注意,我将exit
脚本,因此它不会创建实际图像,只是输出返回值。
<?
//your script
var_dump(imagettftext($im, 55, 0, 155, 55, $text_color, $desfon, $_SESSION['txt']));
exit();
//rest of script.
?>