Не удалось загрузить ресурс: статус 502 (Bad Gateway) image.php
Я пытаюсь определить, почему при проверке изображений не отображаются изображения до выпуска пресс-релиза, указывающего на веб-сайт.
В связанном файле image.php отображается альтернативный текст, а при проверке консоли отображается ошибка "Не удалось загрузить ресурс: сервер ответил со статусом 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);
2 ответа
После отладки, вы сделали несколько замечаний.
Синтаксические ошибки
Если есть синтаксическая ошибка, то да, она не будет работать. Похоже, это сейчас исправлено, возможно, оно было загружено неправильно.
Конфигурация сеанса
Вот новая ошибка, которую вы получаете:
Предупреждение: session_start() [function.session-start]: не удается найти обработчик сохранения 'memcache' - сбой запуска сеанса в /var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php в строке 1
Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php:1) в / var / sites / c / charityfilm. co.uk/public_html/brandint/classes/image.php в строке 1
Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /var/sites/c/charityfilm.co.uk/public_html/brandint/classes/image.php:1) в / var / sites / c / charityfilm. co.uk/public_html/brandint/classes/image.php в строке 11
Вы можете пока игнорировать "Невозможно изменить информацию заголовка", так как это вызвано выводом первой ошибки. Первая ошибка указывает на то, что вы используете нестандартную сессионную систему в PHP. Вы случайно не знаете, есть ли на сервере установка Memcache?
Такое расположение хорошо, если оно сделано намеренно, но PHP обычно использует файловую систему сессий. Я ожидал бы, что это выполняется в результате конфигурации в вашем конфигурационном файле PHP, обычно называемом php.ini
, Необычно, что Go Daddy позволяет настраивать этот файл даже на их совместном хостинге, поэтому я думаю, что это стоит проверить дальше.
Есть три возможных решения:
- Изменить
php.ini
конфигурация так, чтобы он использовал стандартную сессионную систему, хотя это может сломать что-то еще на вашем сайте; - Включите библиотеку, используемую вашим основным приложением для правильной настройки сеансовой системы Memcache;
- Сделайте звонок прямо внутри вашего
image.php
скрипт для изменения системы сеансов на файловую, только для этой функции. Это не идеально, так как вы не хотите, чтобы различные функции на вашем сайте использовали разные системы сеансов.
Поскольку на этот вопрос невозможно ответить без изучения вашего сервера, он становится слишком широким для вопроса переполнения стека. Я предлагаю вам вернуться к вашему первоначальному разработчику и спросить его / ее, как подключиться к системе сессий (вариант 2).
Вы можете изучить другие сценарии PHP на этом веб-сайте, чтобы увидеть, какой код они вызывают, который инициализирует систему сеансов memcache. Однако это основано на предположении, что это не является неправильной конфигурацией, и что некоторый существующий код в вашей системе использует сеансы. Если ваш старый разработчик не может помочь, мне интересно, стоит ли привлекать фрилансера в течение часа или двух?
Хм, это почти наверняка проблема:
<?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");