I am trying to fix/debug a site where all images in the site are being generated by an script. Another developer created this. Now all the images for some reason don’t work.
I am trying to debug the code and try to break it somewhere where it should work so that then I can see whats broken and stablish a baseline. But I cant find a way to debug this properly.
Could anyone point me on the right direction on how to debug the following script or what could be broken? Nothing that I do seems to work.
Update: Thanks Pekka 웃 comment I can now see the error and it says Warning: imagejpeg(): Filename cannot be empty in /var/www/vhosts/mysticindia.co.uk/httpdocs/inc/class.images.php on line 496
that line is the imagejpg()
that is after the line
if ($imageModify == "grey") {
imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE);
}
CODE
<?php
class images {
var $imageID;
var $imageData;
var $image;
var $width;
var $height;
var $imageResized;
function __construct($imageID = null) {
if ($imageID !== null) {
$this->imageID = $imageID;
$this->imageData = $this->getImageInfo();
}
}
function removeImage() {
if ($this->imageID) {
$query = "DELETE FROM Images ";
$query .= "WHERE ImageID = '%s' ";
$result = RunQuery($query,__LINE__);
$query = sprintf($query, mysql_real_escape_string($this->imageID));
$result = RunQuery($query,__LINE__);
tableEmpty("Images");
}
}
private function buildImageQuery($options=array()) {
global $maxItems;
$maxItems = ((isset($options["maxItems"])) && (!empty($options["maxItems"]))) ? $options["maxItems"] : $maxItems;
$pageID = isset($options["pageID"]) ? $options["pageID"] : "";
$orderBy = ((isset($options["orderBy"])) && (!empty($options["orderBy"]))) ? $options["orderBy"] : "ImageIndex";
$sortBy = ((isset($options["sortBy"])) && (!empty($options["sortBy"]))) ? $options["sortBy"] : "ASC";
$groupBy = (isset($options["groupBy"])) ? $options["groupBy"] : "";
$groupBy = (isset($options["groupBy"])) ? $options["groupBy"] : "";
$limit = isset($options["limit"]) ? $options["limit"] : "";
$searchArray = isset($options["searchArray"]) ? $options["searchArray"] : "";
$recordOffset = ($pageID - 1) * $maxItems;
$query = "SELECT SQL_CALC_FOUND_ROWS i.ImageID, ImageName, ImageIndex FROM Images i ";
$query .= "WHERE i.ImageID != '0' ";
if ((isset($searchArray["catalogue"])) && (!empty($searchArray["catalogue"]))) {
$query .= "AND Catalogue = '" . $searchArray["catalogue"] . "' ";
}
if ((isset($searchArray["catalogueID"])) && (!empty($searchArray["catalogueID"]))) {
if (is_array($searchArray["catalogueID"])) {
$count = 0;
$query .= "AND (";
foreach ($searchArray["catalogueID"] as $catalogueID) {
$count++;
$query .= "CatalogueID= '" . $catalogueID . "' ";
if ($count < count($searchArray["catalogueID"])) {
$query .= "OR ";
}
}
$query .= ") ";
} else {
$query .= "AND CatalogueID= '" . $searchArray["catalogueID"] . "' ";
}
}
if ((isset($searchArray["imageName"])) && (!empty($searchArray["imageName"]))) {
$query .= "AND ImageName = '" . $searchArray["imageName"] . "' ";
}
if ((isset($groupBy)) && (!empty($groupBy))) {
$query .= "GROUP BY " . $groupBy . " ";
}
if ((isset($groupBy)) && (!empty($groupBy))) {
$query .= "GROUP BY " . $groupBy . " ";
}
if ($orderBy) {
$query .= "ORDER BY $orderBy $sortBy ";
}
if (($pageID) && (empty($limit))) {
$query .= "LIMIT $recordOffset, $maxItems ";
} else if (!empty($limit)) {
$query .= "LIMIT $limit ";
}
return $query;
}
function getImages($options=array()) {
global $maxItems;
$maxItems = ((isset($options["maxItems"])) && (!empty($options["maxItems"]))) ? $options["maxItems"] : $maxItems;
$pageID = isset($options["pageID"]) ? $options["pageID"] : "";
$recordOffset = ($pageID - 1) * $maxItems;
$dataArray = array();
$listArray = array();
$maxPages = 0;
$query = $this->buildImageQuery($options);
$result = RunQuery($query,__LINE__);
if (($pageID) && (empty($limit))) {
$query2 = "SELECT FOUND_ROWS() AS NoItems ";
$result2 = RunQuery($query2);
$row2 = mysql_fetch_assoc($result2);
$maxPages = ceil($row2["NoItems"] / $maxItems);
}
if (mysql_num_rows($result) != 0) {
while ($row = mysql_fetch_assoc($result)) {
$listArray[] = $row["ImageID"];
}
$dataArray["maxPages"] = $maxPages;
$dataArray["results"] = $listArray;
return $dataArray;
}
}
function listImages($options=array()) {
$query = $this->buildImageQuery($options);
$result = RunQuery($query,__LINE__);
if (mysql_num_rows($result)) {
$dataArray = array();
while ($row = mysql_fetch_assoc($result)) {
$key = $row["ImageID"];
$value = $row["ImageName"];
$dataArray[$key] = $value;
}
return $dataArray;
} else {
return false;
}
}
function manageImage($options=array()) {
global $sesAdminID;
$imageInfo = isset($options["imageInfo"]) ? $options["imageInfo"] : "";
$catalogue = isset($options["catalogue"]) ? $options["catalogue"] : "";
$catalogueID = isset($options["catalogueID"]) ? $options["catalogueID"] : "";
$imageCaption = isset($options["imageCaption"]) ? $options["imageCaption"] : "";
$imageName = isset($imageInfo["imageName"]) ? $imageInfo["imageName"] : "";
$imageWidth = isset($imageInfo["imageWidth"]) ? $imageInfo["imageWidth"] : "";
$imageHeight = isset($imageInfo["imageHeight"]) ? $imageInfo["imageHeight"] : "";
$imageType = isset($imageInfo["imageType"]) ? $imageInfo["imageType"] : "image/jpeg";
$imageIndex = isset($imageInfo["imageIndex"]) ? $imageInfo["imageIndex"] : "";
if ($this->imageID) {
$query = "UPDATE Images SET ";
$query .= "ImageName = '%s', ";
$query .= "ImageWidth = '%s', ";
$query .= "ImageHeight = '%s', ";
$query .= "ImageType = '%s', ";
$query .= "Catalogue = '%s', ";
$query .= "CatalogueID = '%s', ";
$query .= "ImageCaption = '%s', ";
$query .= "ImageIndex = '%s' ";
$query .= "WHERE ImageID = '" . $this->imageID . "' ";
} else {
$query = "INSERT INTO Images SET ";
$query .= "ImageName = '%s', ";
$query .= "ImageWidth = '%s', ";
$query .= "ImageHeight = '%s', ";
$query .= "ImageType = '%s', ";
$query .= "Catalogue = '%s', ";
$query .= "CatalogueID = '%s', ";
$query .= "ImageCaption = '%s', ";
$query .= "ImageIndex = '%s' ";
}
$query = sprintf($query, mysql_real_escape_string($imageName),
mysql_real_escape_string($imageWidth),
mysql_real_escape_string($imageHeight),
mysql_real_escape_string($imageType),
mysql_real_escape_string($catalogue),
mysql_real_escape_string($catalogueID),
mysql_real_escape_string($imageCaption),
mysql_real_escape_string($imageIndex));
$result = RunQuery($query,__LINE__);
$this->imageID = (!empty($this->imageID)) ? $this->imageID : mysql_insert_id();
return $this->imageID;
}
function updateCaption($imageCaption) {
$query = "UPDATE Images SET ";
$query .= "ImageCaption = '%s' ";
$query .= "WHERE ImageID = '%s' ";
$query = sprintf($query, mysql_real_escape_string($imageCaption),
mysql_real_escape_string($this->imageID));
$result = RunQuery($query,__LINE__);
}
function reOrderImages($options=array()) {
$catalogue = isset($options["catalogue"]) ? $options["catalogue"] : "";
$catalogueID = isset($options["catalogueID"]) ? $options["catalogueID"] : "";
$sortOrder = isset($options["sortOrder"]) ? str_replace("Image_", "", $options["sortOrder"]) : "";
if (!empty($sortOrder)) {
$sortArray = explode(",", $sortOrder);
foreach ($sortArray as $order => $imageID) {
$query = "UPDATE Images SET ";
$query .= "ImageIndex = '%s' ";
$query .= "WHERE ImageID = '%s' ";
$query .= "AND Catalogue = '%s' ";
$query .= "AND CatalogueID = '%s' ";
$query = sprintf($query, mysql_real_escape_string($order),
mysql_real_escape_string($imageID),
mysql_real_escape_string($catalogue),
mysql_real_escape_string($catalogueID));
$result = RunQuery($query,__LINE__);
}
}
}
function returnImageType($options=array()) {
$imageName = ((isset($options["imageName"])) && (!empty($options["imageName"]))) ? $options["imageName"] : "";
$imageType = ((isset($options["imageType"])) && (!empty($options["imageType"]))) ? $options["imageType"] : "";
// Image Extensions
$imgExt["pjpeg"] = "jpg";
$imgExt["jpeg"] = "jpg";
$imgExt["gif"] = "gif";
$imgExt["png"] = "png";
$imgExt["jpg"] = "jpg";
// Image Types
$imgType["pjpeg"] = "jpeg";
$imgType["jpeg"] = "jpeg";
$imgType["jpg"] = "jpeg";
$imgType["gif"] = "gif";
$imgType["png"] = "png";
if ($imageType) {
$tempImageType = explode("/", strtolower($imageType));
$tempImageType = str_replace(" ", "", $tempImageType[count($tempImageType)-1]);
} else if ($imageName) {
$tempImageType = explode("/", strtolower($imageName));
$tempImageType = explode(".", $tempImageType[count($tempImageType)-1]);
$tempImageType = $tempImageType[count($tempImageType)-1];
} else {
return "";
}
$resizeInfo = array();
$resizeInfo["imageType"] = isset($imgType[$tempImageType]) ? $imgType[$tempImageType] : "jpeg";
$resizeInfo["imageExt"] = isset($imgExt[$tempImageType]) ? $imgExt[$tempImageType] : "jpg";
return $resizeInfo;
}
function createImageName($imageFolder,$imageName) {
global $documentRoot;
if (file_exists($documentRoot . $imageFolder . $imageName)) {
$imageName = strtotime("now") . "_" . $imageName;
}
return $imageName;
}
function uploadImage($options=array()) {
global $documentRoot, $imageFolder, $maxImageW;
$imageInfo = array();
$imageLocal = ((isset($options["tmp_name"])) && (!empty($options["tmp_name"]))) ? $options["tmp_name"] : "";
$imageType = ((isset($options["type"])) && (!empty($options["type"]))) ? $options["type"] : "";
$imageName = ((isset($options["name"])) && (!empty($options["name"]))) ? $options["name"] : "";
$imageSize = ((isset($options["size"])) && (!empty($options["size"]))) ? $options["size"] : "";
$functionArray = array("imageName"=>$imageName,"imageType"=>$imageType);
$imageTypeInfo = $this->returnImageType($functionArray);
$tempImageType = $imageTypeInfo["imageType"];
$tempImageExt = $imageTypeInfo["imageExt"];
$row = getimagesize($imageLocal);
$width = $row[0];
$height = $row[1];
$imageName = $this->createImageName($imageFolder,fileNameFix($imageName) . "." . $tempImageExt);
if ($width <= $maxImageW) {
copy($imageLocal, $documentRoot . $imageFolder . $imageName);
$imageInfo["imageWidth"] = $width;
$imageInfo["imageHeight"] = $height;
} else {
$functiontoRun = "imagecreatefrom" . $tempImageType;
$this->image = $functiontoRun($imageLocal);
$functionArray = array("origWidth"=>$width,"origHeight"=>$height,"imageWidth"=>$maxImageW);
$resizeImage = $this->resizeImage($functionArray);
$newImageWidth = $resizeImage["CanvasWidth"];
$newImageHeight = $resizeImage["CanvasHeight"];
$image = imagecreatetruecolor($newImageWidth, $newImageHeight);
imagecopyresampled($image, $this->image, 0, 0, 0, 0, $newImageWidth, $newImageHeight, $width, $height);
$functiontoRun = "image" . $tempImageType;
@$functiontoRun($image, $documentRoot . $imageFolder . $imageName) or die("can not create image");
$imageInfo["imageWidth"] = $newImageWidth;
$imageInfo["imageHeight"] = $newImageHeight;
}
$imageInfo["imageType"] = $imageType;
$imageInfo["imageName"] = $imageName;
return $imageInfo;
}
function uploadImages($options=array()) {
$catalogue = isset($options["catalogue"]) ? $options["catalogue"] : "";
$catalogueID = isset($options["catalogueID"]) ? $options["catalogueID"] : "";
$newImages = isset($options["newImages"]) ? $options["newImages"] : "";
$functionArray = array("searchArray"=>$options);
$imageIndex = $this->returnImageIndex($functionArray);
foreach ($newImages as $newImage) {
$imageIndex++;
$imageCaption = $newImage["caption"];
$imageInfo = $this->uploadImage($newImage);
$functionArray = array("imageCaption"=>$imageCaption,"imageInfo"=>$imageInfo,"catalogue"=>$catalogue,"catalogueID"=>$catalogueID,"imageIndex"=>$imageIndex);
$this->imageID = 0;
$this->manageImage($functionArray);
}
}
private function getDimensions($newWidth, $newHeight, $option) {
switch ($option) {
case 'exact':
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
break;
case 'portrait':
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
break;
case 'landscape':
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
break;
case 'auto':
$optionArray = $this->getSizeByAuto($newWidth, $newHeight);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
break;
case 'square':
$optionArray = $this->getOptimalCrop($newWidth, $newHeight);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
break;
}
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}
private function getSizeByFixedHeight($newHeight) {
$ratio = $this->width / $this->height;
$newWidth = $newHeight * $ratio;
return $newWidth;
}
private function getSizeByFixedWidth($newWidth) {
$ratio = $this->height / $this->width;
$newHeight = $newWidth * $ratio;
return $newHeight;
}
private function getSizeByAuto($newWidth, $newHeight) {
if ($this->height < $this->width) {
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
} elseif ($this->height > $this->width) {
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
} else {
if ($newHeight < $newWidth) {
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
} else if ($newHeight > $newWidth) {
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
} else {
// *** Sqaure being resized to a square
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
}
}
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}
private function getOptimalCrop($newWidth, $newHeight) {
$heightRatio = $this->height / $newHeight;
$widthRatio = $this->width / $newWidth;
if ($heightRatio < $widthRatio) {
$optimalRatio = $heightRatio;
} else {
$optimalRatio = $widthRatio;
}
$optimalHeight = $this->height / $optimalRatio;
$optimalWidth = $this->width / $optimalRatio;
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}
private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight) {
// *** Find center - this will be used for the crop
$optionArray["cropStartX"] = ( $optimalWidth / 2) - ( $newWidth /2 );
$optionArray["cropStartY"] = ( $optimalHeight/ 2) - ( $newHeight/2 );
return $optionArray;
}
public function resizeImage($options=array()) {
$imageCrop = ((isset($options["imageCrop"])) && (!empty($options["imageCrop"]))) ? $options["imageCrop"] : "landscape";
$this->width = ((isset($options["origWidth"])) && (!empty($options["origWidth"]))) ? $options["origWidth"] : 0;
$this->height = ((isset($options["origHeight"])) && (!empty($options["origHeight"]))) ? $options["origHeight"] : 0;
$newWidth = ((isset($options["imageWidth"])) && (!empty($options["imageWidth"]))) ? $options["imageWidth"] : 0;
$newHeight = ((isset($options["imageHeight"])) && (!empty($options["imageHeight"]))) ? $options["imageHeight"] : 0;
if ((empty($newHeight)) && ($imageCrop == "square")) {
$newHeight = $newWidth;
}
// *** Get optimal width and height - based on $option
$optionArray = $this->getDimensions($newWidth, $newHeight, $imageCrop);
if ($imageCrop == 'square') {
$tempOptions = $this->crop($optionArray["optimalWidth"], $optionArray["optimalHeight"], $newWidth, $newHeight);
$optionArray["cropStartX"] = $tempOptions["cropStartX"];
$optionArray["cropStartY"] = $tempOptions["cropStartY"];
}
$optionArray["CanvasWidth"] = $newWidth;
$optionArray["CanvasHeight"] = (!empty($newHeight)) ? $newHeight : $optionArray["optimalHeight"];
return $optionArray;
}
function showImage($options=array()) {
global $documentRoot, $imageFolder;
$imageSize = ((isset($options["imageSize"])) && (!empty($options["imageSize"]))) ? $options["imageSize"] : "";
$imageCrop = ((isset($options["imageCrop"])) && (!empty($options["imageCrop"]))) ? $options["imageCrop"] : "";
$imageType = ((isset($options["imageType"])) && (!empty($options["imageType"]))) ? $options["imageType"] : "";
$imageName = ((isset($options["imageName"])) && (!empty($options["imageName"]))) ? $options["imageName"] : "";
$imageModify = ((isset($options["imageModify"])) && (!empty($options["imageModify"]))) ? $options["imageModify"] : "";
$imageQuality = ((isset($options["imageQuality"])) && (!empty($options["imageQuality"]))) ? $options["imageQuality"] : 100;
$imageFolder = ((isset($options["imageFolder"])) && (!empty($options["imageFolder"]))) ? $options["imageFolder"] : $imageFolder;
if (($imageType) || ($imageSize) || ($imageCrop)) {
if ((!empty($imageSize)) && (!empty($imageType))) {
$imageSize .= ucfirst($imageType);
} else if ((empty($imageSize)) && (!empty($imageType))) {
$imageSize .= strtolower($imageType);
}
$imageSize .= (!empty($imageCrop)) ? ucfirst($imageCrop) : "";
$tempWidth = lcfirst($imageSize . "W");
$tempHeight = lcfirst($imageSize . "H");
global $$tempWidth, $$tempHeight;
$maxWidth = isset($$tempWidth) ? $$tempWidth : 0;
$maxHeight = isset($$tempHeight) ? $$tempHeight : 0;
}
if (empty($maxWidth)) {
$tempWidth = "maxImageW";
$tempHeight = "maxImageH";
global $$tempWidth, $$tempHeight;
$maxWidth = isset($$tempWidth) ? $$tempWidth : 0;
$maxHeight = isset($$tempHeight) ? $$tempHeight : 0;
}
if (empty($this->imageID)) {
$searchArray = array("imageName"=>$imageName);
$functionArray = array("searchArray"=>$searchArray);
$this->imageID = $this->returnImageID($functionArray);
}
$imageData = $this->getImageInfo();
if (is_array($imageData)) {
$imageName = $imageData["ImageName"];
$width = $imageData["ImageWidth"];
$height = $imageData["ImageHeight"];
$imageType = $imageData["ImageType"];
} else {
$imageType = "";
}
$functionArray = array("imageName"=>$imageName,"imageType"=>$imageType);
$imageTypeInfo = $this->returnImageType($functionArray);
$tempImageType = $imageTypeInfo["imageType"];
$tempImageExt = $imageTypeInfo["imageExt"];
$thisImage = $documentRoot . $imageFolder . $imageName;
if (file_exists($thisImage)) {
if ((empty($width)) || (empty($height))) {
$row = getimagesize($thisImage);
$width = $row[0];
$height = $row[1];
}
if ((isset($maxWidth)) && (($width > $maxWidth) || ($height > $maxHeight))) {
$functiontoRun = "imagecreatefrom" . $tempImageType;
$this->image = $functiontoRun($thisImage);
if (!$this->image) {
$this->image = imagecreatefromjpeg($thisImage);
}
$functionArray = array("imageCrop"=>$imageCrop,"origWidth"=>$width,"origHeight"=>$height,"imageWidth"=>$maxWidth,"imageHeight"=>$maxHeight);
$resizeImage = $this->resizeImage($functionArray);
$optimalWidth = $resizeImage['optimalWidth'];
$optimalHeight = $resizeImage['optimalHeight'];
$canvasWidth = $resizeImage["CanvasWidth"];
$canvasHeight = $resizeImage["CanvasHeight"];
$cropStartX = isset($resizeImage["cropStartX"]) ? $resizeImage["cropStartX"] : 0;
$cropStartY = isset($resizeImage["cropStartY"]) ? $resizeImage["cropStartY"] : 0;
// *** Resample - create image canvas of x, y size
$this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
$background = imagecolorallocate($this->imageResized, 255, 255, 255);
imagefill ($this->imageResized, 0, 0, $background);
imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);
// *** if option is 'crop', then crop too
if ($imageCrop == 'square') {
$crop = $this->imageResized;
//imagedestroy($this->imageResized);
// *** Now crop from center to exact requested size
$this->imageResized = imagecreatetruecolor($canvasWidth , $canvasHeight);
imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $canvasWidth, $canvasHeight , $canvasWidth, $canvasHeight);
}
if ($imageModify == "grey") {
imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE);
}
header("Content-type: image/$tempImageType");
imagejpeg($this->imageResized, "", $imageQuality);
exit();
} else {
header("Content-type: image/$tempImageType");
$image = imagecreatefromjpeg($thisImage);
imagejpeg($image);
exit();
}
}
else {
header("HTTP/1.0 404 Not Found");
exit();
}
}
private function grayscale($r, $g, $b) {
return (($r*0.299)+($g*0.587)+($b*0.114));
}
function returnImageID($options=array()) {
$imageID = 0;
$query = $this->buildImageQuery($options);
$result = RunQuery($query,__LINE__);
if (mysql_num_rows($result) != 0) {
$row = mysql_fetch_assoc($result);
$imageID = $row["ImageID"];
}
return $imageID;
}
function returnImageIndex($options=array()) {
$imageIndex = 0;
$query = $this->buildImageQuery($options);
$result = RunQuery($query,__LINE__);
if (mysql_num_rows($result) != 0) {
$row = mysql_fetch_assoc($result);
$imageIndex = $row["ImageIndex"];
}
return $imageIndex;
}
private function getImageInfo() {
$query = "SELECT ImageID, ImageName, ImageWidth, ImageHeight, ImageType, Catalogue, CatalogueID, ImageCaption, ImageIndex FROM Images i ";
$query .= "WHERE ImageID= '%s' ";
$query = sprintf($query, mysql_real_escape_string($this->imageID));
$result = RunQuery($query,__LINE__);
if (mysql_num_rows($result) != 0) {
return mysql_fetch_assoc($result);
}
}
}
?>
While you state:
Looking at this chunk of code implies that the images for the site are actually stored in the file system in some way via that
file_exists()
check:Also, looking at the tons of repetitive code coupled with this odd set of
if (
checks I would concentrate on the code aroundfunction showImage($options=array()) {
.Now responding to your comment where you tell us what the site is & the fact the images are not loading.
Loading a URL like this:
Shows an error—I assume that comes from your debugging—like this:
The
failed to open stream
tells me that while you are saying the images are being generated by the script, file system interaction is clearly happening at some point.Then this error of:
Seems to tell me the error is not in your code, but in the file system permissions. It seems that the script is indeed generating derivative thumbnails & other versions of the parent image. But at some point the script is caching them to the file system in some way. Unclear where the source images come from—a BLOB in the database—but my best advice right now is to look at the file system permissions for the site & see if anything changed.
I mean you—or others—didn’t screw around with this script yet it stopped working right? I bet you anything that the directory this script uses to cache derivatives no longer exists or has incorrect ownership or permissions. Something like that would choke this process.