<?php
ob_clean();
header("Content-type:image/png");
$img = imagecreate(210, 47);
imagecolorallocatealpha($img, 220, 220, 220, 0);
$str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$fontFile = './STLITI.TTF';
$red = imagecolorallocate($img, 255, 0, 0);
$blur = imagecolorallocate($img, 0, 0, 255);
for($i = 0 ; $i < 7; ++$i)
{
$strIndex = rand(1, strlen($str));
if(rand(0, 1))
{
$color = $red;
}
else
{
$color = $blur;
}
imagettftext($img, 20, rand(-45, 45), $i * 30 + 5, 24, $color, $fontFile, $str[$strIndex]); 
}
imagepng($img);
imagedestroy($img);
?>会生成一个长:210像素,高:47像素的图片大小,背景是灰色,显示7个随机字母或数,随机的蓝色或红色,
一般情况下是正常的,但偶尔会出现,刷新后,只有一个210 * 47 的图片,里面是个红叉,就是那种图片不存在里显示的图标,但再刷新又没了,偶尔刷新又出现这情况,不知道调试方法和原因所在。求高人指教。

解决方案 »

  1.   

    error_reporting(E_ALL & ~(E_STRICT|E_NOTICE));
    不知为何,加上这句后就刷新了几十次,都没出现问题,
    我知道这句的意思是只显示除了以下两个警告信息之外的所有警告或错误信息。
    E_STRICT 编码标准化警告(建议如何修改以向前兼容)
        与
    E_NOTICE 运行时提醒(经常是bug)难道我这是出现BUG了?没科学道理啊。大部分情况下都是正常显示的。只偶尔出现。
      

  2.   

    再次把error_reporting(E_ALL & ~(E_STRICT|E_NOTICE));分成四次测试
    一:error_reporting(E_ALL);
    出现和没加前的问题
    二:error_reporting(E_ALL & ~(E_STRICT));
    出现和没加前的问题
    三:error_reporting(E_ALL & ~(E_NOTICE));
    问题解决
    四:error_reporting(E_ALL & ~(E_STRICT|E_NOTICE));
    问题解决难道真的是 E_NOTICE 运行时提醒(经常是bug,也可能是有意的) 有BUG?求BUG原因。
      

  3.   

    $strIndex = rand(1, strlen($str));
    改为
    $strIndex = rand(0, strlen($str)-1);$str 中最后一个字符的索引应该是 strlen($str)-1
      

  4.   

    失误了,只想到了strlen 返回的是真实的数量,就直接用1开头了,