我正在尝试确定为什么图像验证在发布指向该网站的新闻稿之前不会显示图像。
相关的image.php文件显示alt文本,并且控制台上的检查显示错误"无法加载资源:服务器响应状态为502(Bad Gateway)image.php"。
主持人已经检查了他们的结果,并确保一切都是应有的,建议问题是在PHP代码中的某个地方,但是代码似乎指向了应该的图像,我们迷失了什么出了问题。
image.php代码如下:
<?php if (!isset($_SESSION)) session_start(); header("(anti-spam-content-type:) image/png");
$enc_num = rand(0, 9999);
$key_num = rand(0, 24);
$hash_string = substr(md5($enc_num), $key_num, 5); // Length of String
$hash_md5 = md5($hash_string);
$_SESSION['verify'] = $hash_md5;
// Fallback
setcookie("verify", $hash_md5, time()+3600, "/");
session_write_close();
// Verification Image Background Selection
$bgs = array("../images/contact/verify/1.png","../images/contact/verify/2.png","../images/contact/verify/3.png");
$background = array_rand($bgs, 1);
// Verification Image Variables
$img_handle = imagecreatefrompng($bgs[$background]);
$text_colour = imagecolorallocate($img_handle, 108, 127, 6);
$font_size = 5;
$size_array = getimagesize($bgs[$background]);
$img_w = $size_array[0];
$img_h = $size_array[1];
$horiz = round(($img_w/2)-((strlen($hash_string)*imagefontwidth(5))/2), 1);
$vert = round(($img_h/2)-(imagefontheight($font_size)/2));
// Make the Verification Image
imagestring($img_handle, $font_size, $horiz, $vert, $hash_string, $text_colour);
imagepng($img_handle);
// Destroy the Image to keep Server Space
imagedestroy($img_handle);
答案 0 :(得分:0)
<?php if (!isset($_SESSION)) session_start(); header("(anti-spam-content-type:) image/png");
这里有两个问题:
if
子句不应该在同一行上有很多项,因为这样看起来header()
是有条件的,当它不是; (anti-spam-content-type:)
考虑将其替换为:
<?php
if (!isset($_SESSION)) {
session_start();
}
header("Content-Type: image/png");
答案 1 :(得分:0)
继续你所做的调试后,这里有一些评论。
如果存在语法错误,那么是的,它不会起作用。这似乎现在已经解决了,可能只是错误地上传了。
以下是您获得的新错误:
警告:session_start()[function.session-start]:找不到保存处理程序&#39; memcache&#39; - 第1行的/var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php会话启动失败
警告:无法修改标头信息 - 已在/ var / sites / c中发送的标头(输出从/var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php:1开始)第1行/charityfilm.co.uk/public_html/brandint/classes/image.php
警告:无法修改标头信息 - 已在/ var / sites / c中发送的标头(输出从/var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php:1开始)第11行/charityfilm.co.uk/public_html/brandint/classes/image.php
您可以忽略&#34;无法修改标题信息&#34;现在,因为它是由输出第一个错误引起的。第一个错误表示您正在使用PHP运行非标准会话系统。您是否碰巧知道服务器上是否安装了Memcache?
如果有意,这种安排很好,但PHP通常使用文件会话系统。我希望这是由PHP配置文件中的配置运行的,通常称为php.ini
。不同寻常的是,Go Daddy甚至可以在共享主机产品上自定义此文件,这就是为什么我认为下一步可能需要检查的内容。
有三种可能的解决方案:
php.ini
配置,使其使用标准会话系统,但这可能会破坏您网站上的其他内容; image.php
脚本内拨打电话,将会话系统更改为基于文件,仅适用于该功能。这并不理想,因为您通常不希望网站上的各种功能使用不同的会话系统。由于在不探索服务器的情况下无法回答这个问题,因此对于 Stack Overflow 问题来说,它变得相当宽泛。我建议你回到原来的开发者那里,问他/她如何挂钩会话系统(选项2)。
在一段时间内,您可以检查此网站中的其他PHP脚本,以查看他们调用的初始化memcache会话系统的代码。但是,这是基于这不是错误配置的假设,并且系统中的某些现有代码使用会话。如果您的老开发人员无法提供帮助,我想知道是否值得让自由职业者进入一两个小时?