php - 如何调试图像创建

标签 php gd php-imagine

我正在尝试修复/调试一个站点,该站点中的所有图像都是由脚本生成的。另一个开发人员创建了这个。现在由于某种原因所有图像都不起作用。

我正在尝试调试代码并尝试在它应该工作的地方破坏它,这样我就可以看到什么被破坏并建立一个基线。但是我找不到正确调试它的方法。

谁能给我指出正确的方向,告诉我如何调试以下脚本或可能破坏的内容?我所做的一切似乎都不起作用。

更新:感谢 Pekka 웃 评论我现在可以看到错误,它说 Warning: imagejpeg(): Filename cannot be empty in/var/www/vhosts/mysticindia.co。 uk/httpdocs/inc/class.images.php 第 496 行

该行是该行之后的imagejpg()

if ($imageModify == "grey") {
                    imagefilter($this->imageResized, IMG_FILTER_GRAYSCALE);
                }

代码

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

最佳答案

当你说:

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

查看这段代码意味着该站点的图像实际上通过 file_exists() 检查以某种方式存储在文件系统中:

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

此外,查看大量重复代码以及这组奇怪的 if ( 检查,我会专注于 function showImage($options=array()) {.

现在回复您的评论,告诉我们网站是什么以及图片未加载的事实。

加载这样的 URL:

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

显示一个错误——我假设它来自你的调试——像这样:

_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

failed to open stream 告诉我,当您说图像是由脚本生成时,文件系统交互显然在某个时刻发生。

然后是这个错误:

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

似乎告诉我错误不在您的代码中,而是在文件系统权限中。似乎脚本确实在生成衍生缩略图和父图像的其他版本。但在某些时候,脚本会以某种方式将它们缓存到文件系统中。不清楚源图像的来源——数据库中的 BLOB——但我现在最好的建议是查看网站的文件系统权限,看看是否有任何变化。

我的意思是你——或其他人——没有搞砸这个脚本,但它停止工作了,对吧?我敢打赌这个脚本用来缓存衍生品的目录不再存在或拥有不正确的所有权或权限。类似的东西会扼杀这个过程。

关于php - 如何调试图像创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427330/

相关文章:

php - 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

javascript - 如何在同一页面上使用 windows.location.href 将 js 值传递给 php 时停止刷新页面

php - 用户名作为水印

perl - 在 MacOSX 10.6 上安装 Perl 的 GD 库

php - 使用 PHP Imagine 应用蒙版

php require_once windows和linux路径区别

php - 使用 PHP/GD,如何修剪图像?

php - imagerotate 改变原始图像的颜色

php - Laravel - 未安装 Imagick

php - 这是检查文件是否存在的正确方法吗?