0

我正在尝试确定为什么图像验证不会在发布指向该网站的新闻稿之前显示图像。

相关的 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);
4

2 回答 2

0

在您完成调试之后,这里有一些说明。

语法错误

如果有语法错误,那么是的,它不会工作。现在好像已经修复了,可能只是上传错误。

会话配置

这是您收到的新错误:

警告:session_start() [function.session-start]: 找不到保存处理程序'memcache' - 第 1 行 /var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php 中的会话启动失败

警告:无法修改标头信息 - 标头已由 /var/sites/c/charityfilm 中的(输出开始于 /var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php:1)发送。 co.uk/public_html/brandint/classes/image.php 在第 1 行

警告:无法修改标头信息 - 标头已由 /var/sites/c/charityfilm 中的(输出开始于 /var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php:1)发送。 co.uk/public_html/brandint/classes/image.php 第 11 行

您暂时可以忽略“无法修改标头信息”,因为它是由输出第一个错误引起的。第一个错误表明您在 PHP 中运行非标准会话系统。您是否碰巧知道服务器上是否安装了 Memcache?

如果有意的话,这种安排很好,但 PHP 通常使用文件会话系统。我希望这是由于您的 PHP 配置文件中的配置而运行的,通常称为php.ini. 不同寻常的是,Go Daddy 甚至允许在他们的共享主机产品上自定义此文件,这就是为什么我认为这可能是接下来要检查的事情。

有三种可能的解决方案:

  1. 修改php.ini配置,使其使用标准会话系统,尽管这很可能会破坏您网站上的其他内容;
  2. 包括一个由您的主应用程序使用的库,以正确设置 Memcache 会话系统;
  3. 在您的image.php脚本中进行调用,将会话系统更改为基于文件的,仅针对该功能。这并不理想,因为您通常不希望网站上的各种功能使用不同的会话系统。

由于在不探索您的服务器的情况下无法回答这个问题,因此对于Stack Overflow问题来说它变得过于宽泛。我建议你回到原来的开发者那里,问他/她如何连接到会话系统(选项 2)。

在一段时间内,您可以检查本网站中的其他 PHP 脚本,看看它们调用了哪些代码来初始化 memcache 会话系统。但是,这是基于这样的假设:这不是错误配置,并且系统中的某些现有代码使用了会话。如果你的老开发者帮不上忙,我想知道是否值得让一个自由职业者进来一两个小时?

于 2017-07-18T17:05:50.440 回答
0

嗯,这几乎肯定是个问题:

<?php if (!isset($_SESSION)) session_start(); header("(anti-spam-content-type:) image/png");

这里有两个问题:

  • 不带大括号的if子句不应在同一行有很多项目,因为这使得它看起来像是header()有条件的,而不是;
  • 标头无效 - 没有这样的 HTTP 标头(anti-spam-content-type:)

考虑将其替换为:

<?php

if (!isset($_SESSION)) {
    session_start();
}
header("Content-Type: image/png");
于 2017-07-18T10:22:30.130 回答