我正在尝试修复/调试一个站点,其中站点中的所有图像都是由脚本生成的。另一个开发人员创建了这个。现在由于某种原因所有图像都不起作用。
我正在尝试调试代码并尝试在它应该工作的地方破坏它,以便我可以看到什么被破坏并稳定基线。但我找不到正确调试它的方法。
谁能指出我如何调试以下脚本或可能被破坏的正确方向?我所做的一切似乎都不起作用。
更新:感谢 Pekka 웃 评论我现在可以看到错误,它说Warning: imagejpeg(): Filename cannot be empty in /var/www/vhosts/mysticindia.co.uk/httpdocs/inc/class.images.php on line 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);
}
}
}
?>