예제 #1
0
 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:\"\"}";
 }
예제 #2
0
	/**
	* Выполняет запрос к БД
	*
	* @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;
	}
예제 #3
0
	/**
	* Изменение размера изображения
	*
	* @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;
	}