3

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);
        }
    }
}
?>
Jonathan Thurft
  • 4,087
  • 7
  • 47
  • 78
  • 3
    First step: remove the `header("Content-type...")` lines so you can see errors directly in the browser when calling the image (instead of a broken image resource) – Pekka Dec 06 '13 at 15:16
  • When you say “Now all the images for some reason don’t work.” what do you mean? Are image links broken? Are images being saved to the file system? Or perhaps stored in the database? What is the baseline expected behavior? And what do the logs say if anything? – Giacomo1968 Dec 06 '13 at 15:20
  • Make sure that you have errors displayed also ini_set('display_errors', 1); – Gavin Dec 06 '13 at 15:23
  • @JakeGould the site per se is http://www.mysticindia.co.uk/holiday_types/tribal_tours/ and all images do not work. I dont know whats the baseline as the developer left.... – Jonathan Thurft Dec 06 '13 at 15:25
  • looks like this images not present in your site storage but present in database. try to check this image /images/galleries/small/square/JCxTPFAsUGBgCmA.jpg, or permissions to this images need to be allowed from your web server – Vladimir Gordienko Dec 06 '13 at 15:28
  • @VladimirGordienko the path doesnt exist is an .htaccess redirection. to the script that generated the image. – Jonathan Thurft Dec 06 '13 at 15:30
  • i said about this part of code header("Content-type: image/$tempImageType"); $image = imagecreatefromjpeg($thisImage); imagejpeg($image); exit(); try to debug $image variable and look if it present – Vladimir Gordienko Dec 06 '13 at 15:31
  • also do you use something like x-debug? with this tool you can go through all script and check situation on each line – Vladimir Gordienko Dec 06 '13 at 15:34
  • @JonathanThurft I just posted my thoughts, but I do not think this is a script issue but rather a file system issue. While you say the images are all dynamically generated, it’s clear to me that there is some kind of file system interaction happening. Perhaps to save the cached version of the image since generating new images each page load is a heavy burden. I would recommend checking the file system paths & perhaps debug via the script to see where the script is trying to save derivative images. – Giacomo1968 Dec 06 '13 at 15:39
  • @JakeGould the images are never saved anywhere – Jonathan Thurft Dec 06 '13 at 15:42
  • You are claiming that the images are never saved anywhere, but looking at the PHP code you have provided there are three checks that use `file_exists`. How can the script be generating images out of thin air yet is doing `file_exists` checks? Where are the source images? I can conceive of derivatives being generated from a source file based on this script. But the `file_exists` imply caching to me. – Giacomo1968 Dec 06 '13 at 15:51

1 Answers1

0

While you state:

I am trying to fix/debug a site where all images in the site are being generated by an script.

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:

    $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);
            }

Also, looking at the tons of repetitive code coupled with this odd set of if ( checks I would concentrate on the code around function 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:

http://www.mysticindia.co.uk/images/galleries/small/square/JCxTPFAsMGBgCmA.jpg

Shows an error—I assume that comes from your debugging—like this:

_image.phpA: Resource id #11 Warning: imagejpeg(JC0jQFgsMGBgCmA.jpg): failed to open stream: Permission denied in /var/www/vhosts/mysticindia.co.uk/httpdocs/inc/class.images.php on line 496

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:

Permission denied in /var/www/vhosts/mysticindia.co.uk/httpdocs/inc/class.images.php on line 496

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.

Giacomo1968
  • 25,759
  • 11
  • 71
  • 103
  • the error that you see on failed to open stream is when i tried to put some name in the function as the original error is that it has to have a name. – Jonathan Thurft Dec 06 '13 at 15:40
  • But look at this: `Warning: imagejpeg(JC0jQFgsMGBgCmA.jpg): failed to open stream` That `JC0jQFgsMGBgCmA.jpg` is clearly a cached file name generated by the script. Wherever that is being saved to or accessed is the issue. – Giacomo1968 Dec 06 '13 at 15:41
  • I putted JC0jQFgsMGBgCmA.jpg to test if i insert a name it would woek. the original error is `Warning: imagejpeg(): Filename cannot be empty in /var/www/vhosts/mysticindia.co.uk/httpdocs/inc/class.images.php on line 497` – Jonathan Thurft Dec 06 '13 at 15:43