private static function _actionSilentItemDel() { $res = "{res:"; //проверяем id $id = 0 + self::post(self::$class . "-admin-item-id"); if (!$id) { echo $res . "false,msg:\"Невозможно выполнить операцию: задан неверный идентификатор меню [" . $id . "]\"}"; return; } $r = self::q("SELECT * FROM " . self::tb(self::$class) . " WHERE `id`=" . $id, false); if ($r === false) { echo $res . "false,msg:\"Ошибка операции с базой данных\"}"; return; } $rec = mysql_fetch_assoc($r); if (!$rec) { echo $res . "false,msg:\"Ошибка: указанное меню [" . $id . "] не существует или было удалено ранее.\"}"; return; } $r = render::unbind(self::$class, $id); if ($r !== true) { if (is_array($r) && isset($r["msg"])) { $msg = $r["msg"]; } else { $msg = "Ошибка удаления байндингов объекта."; } echo $res . "false,msg:\"" . lib::jsonPrepare($msg) . "\"}"; return; } $r = self::q("DELETE FROM " . self::tb(self::$class . "_entries") . " WHERE `mid`=" . $id); if ($r === false) { echo $res . "false,msg:\"Ошибка операции с базой данных\"}"; return; } $r = self::q("DELETE FROM " . self::tb(self::$class) . " WHERE `id`=" . $id); if ($r === false) { echo $res . "false,msg:\"Ошибка операции с базой данных\"}"; return; } echo $res . "true,msg:\"\"}"; }
/** * Выполняет запрос к БД * * @param string $q - строка запроса * @param boolean $die - прервать работу приложения * @param array $debug - перезапись параметров стека отладки * @return resource */ public static function q($q,$die=false,$debug=array("msg"=>"Ошибка выполнения запроса к БД.")) { $r=@mysql_query($q); if($r===false) { $sql="SQL запрос: [".lib::jsonPrepare($q)."]."; $raw="Ответ MySQL: [".lib::jsonPrepare(@mysql_error(self::$db["link"]))."]."; if(@function_exists("error_log") || $die) { //сохраняем if(!isset($debug["msg"]))$debug["msg"]="Ошибка выполнения запроса к БД."; if(!isset($debug["class"]))$debug["class"]=""; if(!isset($debug["func"]))$debug["func"]=""; if(!isset($debug["line"]))$debug["line"]=""; if(!$debug["class"] || !$debug["func"] || !$debug["line"]) { if(@function_exists("debug_backtrace")) { $dbg=@debug_backtrace(); if(!$debug["line"])$debug["line"]=$dbg[0]["line"]; @array_shift($dbg); if(!$debug["class"])$debug["class"]=isset($dbg[0]["class"])?$dbg[0]["class"]:""; if(!$debug["func"])$debug["func"]=isset($dbg[0]["function"])?$dbg[0]["function"]:""; } } self::$lastError=$debug["msg"]; self::$lastErrorId=msgr::errorLog($debug["msg"],false,$debug["class"],$debug["func"],$debug["line"],$sql." ".$raw); $ep="EP: [".($debug["class"]?($debug["class"]."::"):"").($debug["func"]?($debug["func"].">"):"").$debug["line"]."]"; if(@function_exists("error_log")) { $amail=self::$c->config("","adminEmail"); if(lib::validEmail($amail,false))@error_log($debug["msg"]."\n\n".$sql."\n\n".$raw."\n\n".$ep,1,$amail); } if($die)die($debug["msg"]."<br /><br />".$ep); } self::$counts[1]++; } else self::$counts[0]++; return $r; }
/** * Изменение размера изображения * * @param string $srcFile * @param string/false $dstFile //"" - сохранить в ту же папку, false - вывести в браузер * @param int $forceType // MEDIA_IRES_CROP,MEDIA_IRES_FITHOR,MEDIA_IRES_FITVER,MEDIA_IRES_FITRAT,MEDIA_IRES_MAKEGAL * @param array $params // напр. array("dstRect"=>array(0,0,100,100)) * "addSizes" => true, //добавить размеры * "sizeDelim" => "-", //разделитель размеров * "dstRect" => array(), //размеры зоны-приемника (def=[размер исходного изображения]) * "dstShift" => array(), //смещение зоны dstRect, если dstSize больше dstRect (def=[по-центру,по-центру]/[-1, -1]) * "dstSize" => array(), //размеры конечного холста (def=[dstRect]) * "dstType" => 0, * "dstValue" => 1, //ширина/высота или ratio (не используется в режиме ..._CROP) * "srcRect" => array(), //размеры зоны-источника (def=[размер исходного изображения]) * "srcShift" => array(), //смещение зоны srcRect, если srcSize больше srcRect(def=[по-центру,по-центру]/[-1, -1]) * "srcSize" => array($size[0],$size[2]),//размеры исходного файла * "srcType" => $size[2], //формат исходного файла * "tryTypeDef" => true //пробовать сохранить в другом формате, если запрошенный не поддерживается в GD * * @return bool/stream */ private static function _resample($srcFile,$dstFile,$forceType,$params) { if(!@extension_loaded("gd")) { $msg="Библикотека GD не установлена."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } //проверка источника if(!@is_readable($srcFile) || !@is_file($srcFile)) { $msg="Невозможно прочитать файл [".$srcFile."]."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } $size=@getimagesize($srcFile); if(!$size) { $msg="Указанный файл имеет недопустимый формат [".$srcFile."]."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } //size[0] - ширина //size[1] - высота //size[2] - формат, значения: // 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, // 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order) // 8 = TIFF(motorola byte order), 9 = JPC, // 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC // 14 = IFF, 15 = WBMP, 16 = XBM. if(!in_array($size[2],self::$imgSup)) { $msg="Формат файла неподдерживается [".$srcFile."]."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if($dstFile) { if(@file_exists($dstFile)) if(!@is_writeable($dstFile)) { $msg="Конечный файл недоступен для перезаписи [".$srcFile."]."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } if($forceType<MEDIA_IRES_CROP || ($forceType>MEDIA_IRES_MAKEGAL)) { $msg="Неверный тип обработки [forceType:".$forceType."]."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } //массив умолчаний $paramsDef=array( "addSizes" => true, //добавить размеры "sizeDelim" => self::$config["sizeDelimiter"], //разделитель размеров "dstRect" => array(), //размеры зоны-приемника (def=[размер исходного изображения]) "dstShift" => array(), //смещение зоны dstRect, если dstSize больше dstRect (def=[по-центру,по-центру]/[-1, -1]) "dstSize" => array(), //размеры конечного холста (def=[dstRect]) "dstType" => 0, //тип конечного файла "dstValue" => 1, //ширина/высота или ratio (не используется в режиме ..._CROP) "srcRect" => array(), //размеры зоны-источника (def=[размер исходного изображения]) "srcShift" => array(), //смещение зоны srcRect, если srcSize больше srcRect(def=[по-центру,по-центру]/[-1, -1]) "srcSize" => array($size[0],$size[2]), //размеры исходного файла "srcType" => $size[2], //формат исходного файла "tryTypeDef" => false //пробовать сохранить в другом формате, если запрошенный не поддерживается в GD ); $p=array(); foreach($paramsDef as $key=>$val) { if(array_key_exists($key,$params)) { if($key=="dstType") { if(is_string($params["dstType"])) { $p["dstType"]=self::_imgExt2Type($params["dstType"]); continue; } } if((gettype($val)==gettype($params[$key])) || ((gettype($val)=="boolean") && (is_int($params[$key]))))$p[$key]=$params[$key]; else $p[$key]=$val; } else $p[$key]=$val; } //-------------проверяем умолчания-------------- //если не задана зона-источник, выбираем всю канву изначального файла if(!count($p["srcRect"])) $p["srcRect"]=array(0,0,$size[0],$size[1]); else { $msg="Некорректный параметр [srcRect]"; //проверяем на корректность srcRect if($p["srcRect"][2]<=0) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if($p["srcRect"][3]<=0) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if(($p["srcRect"][2]+$p["srcRect"][0])>8000) { $msg.=": размер исходного фрейма превышает 8000 пикселей"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if(($p["srcRect"][3]+$p["srcRect"][1])>8000) { $msg.=": размер исходного фрейма превышает 8000 пикселей"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } //если не заданы смещения зоны-источника, выбираем "по-центру" if(!count($p["srcShift"])) $p["srcShift"]=array(-1, -1); else { $msg="Некорректный параметр [srcShift]"; if($p["srcShift"][0]>100 || ($p["srcShift"][0]<0 && ($p["srcShift"][0]!=-1))) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if($p["srcShift"][1]>100 || ($p["srcShift"][1]<0 && ($p["srcShift"][1]!=-1))) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } //...на всякий случай $p["srcSize"]=array($size[0],$size[1]); //если не задана зона-приемник, выбираем размеры как у изначального файла if(!count($p["dstRect"]))$p["dstRect"]=array(0,0,$size[0],$size[1]); else { if(count($p["dstRect"])==2)array_unshift($p["dstRect"],0,0); $msg="Некорректный параметр [dstRect]"; //проверяем на корректность srcRect if($p["dstRect"][2]<=0) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if($p["dstRect"][3]<=0) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if(($p["dstRect"][2]+$p["dstRect"][0])>8000) { $msg.=": размер результатирующего фрейма превышает 8000 пикселей"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if(($p["dstRect"][3]+$p["dstRect"][1])>8000) { $msg.=": размер результатирующего фрейма превышает 8000 пикселей"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } //если не заданы смещения зоны-приемника, выбираем "по-центру" if(!count($p["dstShift"]))$p["dstShift"]=array(-1, -1); else { $msg="Некорректный параметр [dstShift]"; if($p["dstShift"][0]>100 || ($p["dstShift"][0]<0 && ($p["dstShift"][0]!=-1))) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if($p["dstShift"][1]>100 || ($p["dstShift"][1]<0 && ($p["dstShift"][1]!=-1))) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } //если не заданы размеры конечного файла, устанавливаем размеры зоны-приемника if(!count($p["dstSize"]))$p["dstSize"]=array($p["dstRect"][2],$p["dstRect"][3]); else { $msg="Некорректный параметр [dstRect]"; if(($p["dstRect"][0]<0) || ($p["dstRect"][1]<0)) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } if((($p["dstRect"][0]+$p["dstRect"][2])>$p["dstSize"][0]) || (($p["dstRect"][1]+$p["dstRect"][3])>$p["dstSize"][1])) { self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } //если не задан конечный формат файла, устанавливаем формат исходного файла if(!$p["dstType"])$p["dstType"]=$p["srcType"]; else { $dtype=0+$p["dstType"]; if(!in_array($dtype,self::$imgSup)) { $try=false; if($p["tryTypeDef"]) { if(is_int($p["tryTypeDef"])) { if(in_array($p["tryTypeDef"],self::$imgSup))$p["dstType"]=$p["tryTypeDef"]; else $p["dstType"]=self::$config["imgTypeDefault"]; } else $p["dstType"]=self::$config["imgTypeDefault"]; } else { $msg="Указанный тип результатирующего изображения не поддерживается"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } } else $p["dstType"]=$dtype; } $srcImg=false; //--------------проход по режимам---------------- switch($forceType) { //обрезка с масштабированием case MEDIA_IRES_CROP: //подготавливаем канву источника srcSize, //так как она может быть меньше, чем задана в параметрах srcRect, //в этом случае канву нужно будет увеличить(подогнать) к srcRect $newX=0; $newY=0; $newW=$p["srcSize"][0]; $newH=$p["srcSize"][1]; if($p["srcRect"][0]<0) { $newW=$newW-$p["srcRect"][0]; $newX=(-1)*$p["srcRect"][0]; } if(($p["srcRect"][0]+$p["srcRect"][2])>$p["srcSize"][0]) $newW=$newW+($p["srcRect"][0]+$p["srcRect"][2]-$p["srcSize"][0]); if($p["srcRect"][1]<0) { $newH=$newH-$p["srcRect"][1]; $newY=(-1)*$p["srcRect"][1]; } if(($p["srcRect"][1]+$p["srcRect"][3])>$p["srcSize"][1]) $newH=$newH+($p["srcRect"][1]+$p["srcRect"][3]-$p["srcSize"][1]); if($newW>$p["srcSize"][0] || $newH>$p["srcSize"][1]) { //увеличиваем канву источника по максимальному соотношению //с выравниванием по левому верхнему углу switch($p["srcType"]) { case 1://gif $srcImg=@imagecreatefromgif($srcFile); break; case 2://jpg $srcImg=@imagecreatefromjpeg($srcFile); break; case 3://png $srcImg=@imagecreatefrompng($srcFile); imagealphablending($srcImg,false); @imagesavealpha($srcImg,true); break; case 15://wbmp $srcImg=@imagecreatefromwbmp($srcFile); break; } if($srcImg===false) { $msg="Неизвестная ошибка: буферный объект не создан [srcImg]"; self::$lastMsg=$msg; if($err_json) $msg="{msg:\"".lib::jsonPrepare($msg)."\",function:\"".__FUNCTION__."\",line:".__LINE__."}"; return msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); } $srcImg1=@imagecreatetruecolor($newW,$newH); if($srcImg1===false) { @imagedestroy($srcImg); $msg="Неизвестная ошибка: буферный объект не создан [srcImg1]"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } //imagecopyresampled($dst_image,$src_image,$dst_x,$dst_y,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h) @imagealphablending($srcImg1,false); @imagesavealpha($srcImg1,true); if(!@imagecopyresampled($srcImg1,$srcImg,$newX,$newY,0,0,$p["srcSize"][0],$p["srcSize"][1],$p["srcSize"][0],$p["srcSize"][1])) { @imagedestroy($srcImg); @imagedestroy($srcImg1); $msg="Неизвестная ошибка: обработка не выполнена [imagecopyresampled]."; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } @imagedestroy($srcImg); $srcImg=$srcImg1; $p["srcSize"][0]=$newW; $p["srcSize"][1]=$newH; } //находим параметры srcX, srcY, srcW, srcH в пределах srcRect, //которые будут пропорциональны dstRect, $ratioW=$p["srcRect"][2]/($p["dstRect"][0]+$p["dstRect"][2]); $ratioH=$p["srcRect"][3]/($p["dstRect"][1]+$p["dstRect"][3]); $ratio=($ratioW<$ratioH?$ratioW:$ratioH); $srcX=$p["srcRect"][0]; $srcY=$p["srcRect"][1]; $srcW=intval(round($p["dstRect"][2]*$ratio)); $srcH=intval(round($p["dstRect"][3]*$ratio)); //корректируем параметры srcX, srcY, //если srcW>$p["srcRect"][2] //или srcH>$p["srcRect"][3] if(($srcW<$p["srcRect"][2]) && ($p["srcShift"][0]!=0)) { $move=$p["srcRect"][2]-$srcW; if($p["srcShift"][0]==-1)$shift=50; else $shift=$p["srcShift"][0]; $srcX=$srcX+intval(round($move*$shift/100)); } if($srcH<($p["srcRect"][3]) && ($p["srcShift"][1]!=0)) { $move=$p["srcRect"][3]-$srcH; if($p["srcShift"][1]==-1)$shift=50; else $shift=$p["srcShift"][1]; $srcY=$srcY+intval(round($move*$shift/100)); } $dstX=$p["dstRect"][0]; $dstY=$p["dstRect"][1]; $dstW=$p["dstRect"][2]; $dstH=$p["dstRect"][3]; if(($dstW<$p["dstSize"][0]) && ($p["dstShift"][0]!=0)) { $move=$p["dstSize"][0]-$dstW; if($p["dstShift"][0]==-1)$shift=50; else $shift=$p["srcShift"][0]; $dstX=$dstX+intval(round($move*$shift/100)); } if(($dstH<$p["dstSize"][1]) && ($p["dstShift"][1]!=0)) { $move=$p["dstSize"][1]-$dstH; if($p["dstShift"][1]==-1)$shift=50; else $shift=$p["srcShift"][1]; $dstY=$dstY+intval(round($move*$shift/100)); } break; //по ширине case MEDIA_IRES_FITHOR: $srcX=0; $srcY=0; $srcW=$p["srcSize"][0]; $srcH=$p["srcSize"][1]; $dstX=0; $dstY=0; $dstW=$p["dstValue"]; $dstH=intval(round($p["srcSize"][1]*($dstW/$p["srcSize"][0]))); $p["dstSize"][0]=$dstW; $p["dstSize"][1]=$dstH; break; //по ширине case MEDIA_IRES_FITVER: $srcX=0; $srcY=0; $srcW=$p["srcSize"][0]; $srcH=$p["srcSize"][1]; $dstX=0; $dstY=0; $dstH=$p["dstValue"]; $dstW=intval(round($p["srcSize"][0]*($dsH/$p["srcSize"][1]))); $p["dstSize"][0]=$dstW; $p["dstSize"][1]=$dstH; break; case MEDIA_IRES_FITRAT: $srcX=0; $srcY=0; $srcW=$p["srcSize"][0]; $srcH=$p["srcSize"][1]; $dstX=0; $dstY=0; $dstW=intval(round($p["srcSize"][0]*$p["dstValue"]/100)); $dstH=intval(round($p["srcSize"][1]*$p["dstValue"]/100)); $p["dstSize"][0]=$dstW; $p["dstSize"][1]=$dstH; break; //уменьшение изображений для галлереи case MEDIA_IRES_MAKEGAL: $srcX=0; $srcY=0; $srcW=$p["srcSize"][0]; $srcH=$p["srcSize"][1]; $dstX=0; $dstY=0; if($p["srcSize"][0]>$p["srcSize"][1]) { $dstW=$p["dstValue"]; $dstH=intval(round($p["srcSize"][1]*($dstW/$p["srcSize"][0]))); } else { $dstH=$p["dstValue"]; $dstW=intval(round($p["srcSize"][0]*($dstH/$p["srcSize"][1]))); } $p["dstSize"][0]=$dstW; $p["dstSize"][1]=$dstH; break; } $ext=self::_imgFDef2Ext($p["dstType"]); if(($dstFile=="") || ($dstFile=="/")) { $pi=pathinfo($srcFile); if($p["addSizes"]) $dstFile=$pi["dirname"]."/".$pi["filename"].$p["sizeDelim"].$p["dstSize"][0]."x".$p["dstSize"][1].".".$ext; else $dstFile=$pi["dirname"]."/".$pi["filename"].$p["sizeDelim"]."resampled.".$ext; } else { $filename=true; if(substr($dstFile,strlen($dstFile)-1,1)=="/") { $dstFile.="somefile"; $filename=false; } $pi=pathinfo($dstFile); if(!$filename) { $filename=md5(time().mt_rand(111,999)); } else { $filename=$pi["filename"]; if(!self::_imgExt2Type($pi["extension"]))$filename.=$pi["extension"]; //добавляем размеры, или заменяем размеры, //если в имени файла присутствуют дефолтовые if($p["addSizes"]) { $found=false; $parts=explode($p["sizeDelim"],$filename); if(count($parts)) { $sz=explode("x",$parts[count($parts)-1]); if(count($sz)==2) { if(((0+$sz[0])>0) && ((0+$sz[1])>0)) { $found=true; $filename=str_replace(implode("x",$sz),$p["dstSize"][0]."x".$p["dstSize"][1],$filename); } } } if(!$found) $filename.=$p["sizeDelim"].$p["dstSize"][0]."x".$p["dstSize"][1]; } } $dstFile=$pi["dirname"]."/".$filename.".".$ext; } if(!$srcImg) { switch($p["srcType"]) { case 1://gif $srcImg=@imagecreatefromgif($srcFile); break; case 2://jpg $srcImg=@imagecreatefromjpeg($srcFile); break; case 3://png $srcImg=@imagecreatefrompng($srcFile); @imagealphablending($srcImg,false); @imagesavealpha($srcImg,true); break; case 15://wbmp $srcImg=@imagecreatefromwbmp($srcFile); break; } } if($srcImg===false) { $msg="Неизвестная ошибка: буферный объект не создан [srcImg]"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } $dstImg=@imagecreatetruecolor($p["dstSize"][0],$p["dstSize"][1]); if($dstImg===false) { @imagedestroy($srcImg); $msg="Неизвестная ошибка: буферный объект не создан [dstImg]"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } //imagecopyresampled($dst_image,$src_image,$dst_x,$dst_y,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h) if($p["dstType"]==3)@imagealphablending($dstImg,false); @imagesavealpha($dstImg,true); if(!@imagecopyresampled($dstImg,$srcImg,$dstX,$dstY,$srcX,$srcY,$dstW,$dstH,$srcW,$srcH)) { @imagedestroy($dstImg); @imagedestroy($srcImg); $msg="Неизвестная ошибка: обработка не выполнена [imagecopyresampled]"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } @imagedestroy($srcImg); $res=false; if($dstFile===false) { switch($p["dstType"]) { case 1://gif $res=@imagegif($dstImg); break; case 2://jpg $res=@imagejpeg($dstImg,"",100); break; case 3://png $res=@imagepng($dstImg,"",0); break; case 15://wbmp $res=@imagewbmp($dstImg); break; } } else { switch($p["dstType"]) { case 1://gif $res=@imagegif($dstImg,$dstFile); break; case 2://jpg $res=@imagejpeg($dstImg,$dstFile,100); break; case 3://png $res=@imagepng($dstImg,$dstFile,0); break; case 15://wbmp $res=@imagewbmp($dstImg,$dstFile); break; } } @imagedestroy($dstImg); if(!$res) { $msg="Неизвестная ошибка: обработка не выполнена [imagesave]"; self::$lastMsg=$msg; msgr::errorLog($msg,false,self::$class,__FUNCTION__,__LINE__); return false; } else { if($dstFile)@chmod($dstFile,0755); } if($dstFile===false)return $res; else return $dstFile; }