我做了一个验证码功能的东西,在我本地机器上运行没有问题,可是放到服务器上这个程序返回到浏览器的是一个红叉 很奇怪的问题服务器的gd库没有问题但是我指定了imagepng 的第二个参数后能够生成临时文件,但是不指定第二个参数直接输出就有问题了 而且没有任何报错信息,就是输出不了图片希望高手 指点~代码如下
<?phprequire_once 'include/common.inc.php'; Header("Content-type: image/png");try{
//用于验证码的字符,省掉了容易看错的字符 例如 2 和 Z l 和 1 等
$codeChar = array('3','4','5','6','7','8','9','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y');$vCodeStr = '';
$vCode = array();
//生成验证码
for($i=0;$i<4;$i++){
$vIndex = rand(0,count($codeChar)-1);
$vCodeStr .= $codeChar[$vIndex];
array_push($vCode,$codeChar[$vIndex]);
}//将验证码和创建时间写入session
$_SESSION['vcode'] = $vCodeStr;
$_SESSION['vtime'] = time();
//创建验证码图片
$img = imagecreate(85,23);imagecolorallocate($img,255,255,255);//绘制验证码
for($i = 0;$i < 4;$i++){
$fgcolor = imagecolorallocate($img,rand(0,150),rand(0,150),rand(0,150));
imagechar($img,10,$i * 20 + 5,3,$vCode[$i],$fgcolor);
}//干扰信息
for($i =0;$i < 200;$i++){
imagesetpixel($img,rand(0,85),rand(0,23),rand(0,255));
if($i % 50 == 0){
imageline($img,rand(0,85),rand(0,23),rand(0,85),rand(0,23),rand(0,255));
}
}//输出图片
imagepng($img);
imagedestroy($img);
}catch(Exception $ex){
echo $ex->getMessage();
}
die();
?>
<?phprequire_once 'include/common.inc.php'; Header("Content-type: image/png");try{
//用于验证码的字符,省掉了容易看错的字符 例如 2 和 Z l 和 1 等
$codeChar = array('3','4','5','6','7','8','9','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y');$vCodeStr = '';
$vCode = array();
//生成验证码
for($i=0;$i<4;$i++){
$vIndex = rand(0,count($codeChar)-1);
$vCodeStr .= $codeChar[$vIndex];
array_push($vCode,$codeChar[$vIndex]);
}//将验证码和创建时间写入session
$_SESSION['vcode'] = $vCodeStr;
$_SESSION['vtime'] = time();
//创建验证码图片
$img = imagecreate(85,23);imagecolorallocate($img,255,255,255);//绘制验证码
for($i = 0;$i < 4;$i++){
$fgcolor = imagecolorallocate($img,rand(0,150),rand(0,150),rand(0,150));
imagechar($img,10,$i * 20 + 5,3,$vCode[$i],$fgcolor);
}//干扰信息
for($i =0;$i < 200;$i++){
imagesetpixel($img,rand(0,85),rand(0,23),rand(0,255));
if($i % 50 == 0){
imageline($img,rand(0,85),rand(0,23),rand(0,85),rand(0,23),rand(0,255));
}
}//输出图片
imagepng($img);
imagedestroy($img);
}catch(Exception $ex){
echo $ex->getMessage();
}
die();
?>
解决方案 »
- php 超链接显示具体内容问题
- 求程序员作业指导书。
- codeigniter在控制器里的$this->后面没有代码提示?
- 修改数据库中内容
- php中如何要到JSP脚本中函数return回来的值
- Parse error: syntax error, unexpected '0' (T_LNUMBER) in F:\wamp\www\book_club\v
- 40分求物理删除服务器上的图片
- php怎么调用linux命令啊??
- mssql_fetch_array()的问题
- Session的困惑(有关用户认证问题)
- IIS配置php页面出现空白
- smarty 与fckeditor 相互结合更新问题,大家帮助我看下
在验证码页面里,不要加 require_once 'include/common.inc.php'; 这个了,没用 ..直接在头部 session_start();
//用于验证码的字符,省掉了容易看错的字符 例如 2 和 Z l
$codeChar = array('3','4','5','6','7','8','9','A','B','C','D','E','F', 'G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y'); $vCodeStr = '';$vCode = array();
//生成验证码
for($i=0;$i<4;$i++)
{
$vIndex = rand(0,count($codeChar)-1);
$vCodeStr .= $codeChar[$vIndex];
array_push($vCode,$codeChar[$vIndex]);
}
//将验证码和创建时间写入sessi
$_SESSION['vcode'] = $vCodeStr;
$_SESSION['vtime'] = time();
//创建验证码图片
$img = imagecreate(85,23);
imagecolorallocate($img,255,255,255);
//绘制验证码
for($i = 0;$i < 4;$i++)
{
$fgcolor = imagecolorallocate($img,rand(0,150),rand(0,150),rand(0,150));
imagechar($img,10,$i * 20 + 5,3,$vCode[$i],$fgcolor);
}
//干扰信息
for($i =0;$i < 200;$i++)
{
imagesetpixel($img,rand(0,85),rand(0,23),rand(0,255));
if($i % 50 == 0)
{
imageline($img,rand(0,85),rand(0,23),rand(0,85),rand(0,23),rand(0,255));
}
}
//输出图片
imagepng($img);
imagedestroy($img);
}
catch(Exception $ex)
{
echo $ex->getMessage();
}
die();
本地测试没有任何问题.在服务器测试,首先测试xxx/xx.php,看有没有图片输出.很有可以是因为session_start();header()等类似函数之前有输出了.