PHP-вывод изображения внезапно перестал работать
У меня есть файл, который обрабатывает изображения, прежде чем они выводятся в браузер. Вот код:
<?php
require_once($_SERVER["DOCUMENT_ROOT"].'/_content/_constants.php');
require_once($_SERVER["DOCUMENT_ROOT"].'/_content/_functions.php');
function hex2rgb($hex) {
$hex = str_replace("#", "", $hex);
if(strlen($hex) == 3) {
$r = hexdec(substr($hex,0,1).substr($hex,0,1));
$g = hexdec(substr($hex,1,1).substr($hex,1,1));
$b = hexdec(substr($hex,2,1).substr($hex,2,1));
} else {
$r = hexdec(substr($hex,0,2));
$g = hexdec(substr($hex,2,2));
$b = hexdec(substr($hex,4,2));
}
$rgb = array($r, $g, $b);
//return implode(",", $rgb); // returns the rgb values separated by commas
return $rgb; // returns an array with the rgb values
}
/*-- Get the hex color code from the URL query --*/
$rgb = hex2rgb((isset($_GET["color1"]) && $_GET["color1"] != '' ? $_GET["color1"] : "C9AA14"));
/*-- Get the image file --*/
$im = imagecreatefrompng (BASE."/_content/images/".$_GET["img"]);
/*-- Preserve transparency --*/
imageAlphaBlending($im, false);
imageSaveAlpha($im, true);
//$index = imagecolorclosest( $im, 0,0,0 ); // get original color
//imagecolorset($im,imagecolorat($im,8,8), $rgb2[0],$rgb2[1],$rgb2[2] ); // SET COLOR OF ICON SYMBOL
/*-- Apply the colorizing filter --*/
imagefilter($im, IMG_FILTER_COLORIZE, $rgb[0],$rgb[1],$rgb[2], 0);
/*-----------------------------------------------
* If the image has a symbol/foreground
* on it, such as the audio/video icons,
* this sets the color of that symbol
*
* Not needed for single color images
*/
//imagefilltoborder($im, 18, 21, imagecolorat($im,23,10), imagecolorallocate($im,0,0,0));
header("Content-type: image/png");
imagePng($im);
?>
По состоянию на несколько дней назад, когда я пытаюсь загрузить любые изображения через этот файл, я получаю The image {path-to-file} cannot be displayed because it contains errors
,
Я искал ответы на этот вопрос, и кажется, что все, кто получает эту ошибку, делают это, потому что они выводят вещи раньше header()
, что не проблема в моем случае. Я знаю, что что-то должно было измениться на стороне сервера, потому что это работало нормально долгое время, а потом вдруг просто перестало работать. Я протестировал скрипт на другом сервере, и он работал нормально.
Я запустил тестовый сценарий поддержки GD на сервере со следующими результатами:
GD is supported by your server!
GD Version Yes
FreeType Support Yes
FreeType Linkage Yes
T1Lib Support No
GIF Read Support Yes
GIF Create Support Yes
JPEG Support Yes
PNG Support Yes
WBMP Support Yes
XPM Support No
XBM Support Yes
JIS-mapped Japanese Font Support No
Основная проблема, с которой я столкнулся, заключается в том, что я действительно недостаточно знаю требования к серверу для функциональности PHP GD, поэтому мне нужно какое-то направление относительно того, на что мне следует обратить внимание в качестве возможных виновников в этом случае. Что могло вызвать поломку?
1 ответ
Перед отправкой заголовка с типом файла попробуйте очистить буфер:
// clean the output buffer
//http://www.php.net/manual/en/function.ob-clean.php#75694
ob_clean();
header("Content-type: image/jpeg");