mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
6.6 KiB
269 lines
6.6 KiB
<?php |
|
|
|
/** |
|
* AVE.cms |
|
* |
|
* @package AVE.cms |
|
* @version 3.x |
|
* @filesource |
|
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru |
|
* |
|
* @license GPL v.2 |
|
*/ |
|
|
|
if(! defined('BASE_DIR')) |
|
define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__)))); |
|
|
|
|
|
if (! function_exists('iptc_make_tag')) |
|
{ |
|
function iptc_make_tag($rec, $data, $value) |
|
{ |
|
$length = strlen($value); |
|
$retval = chr(0x1C) . chr($rec) . chr($data); |
|
|
|
if($length < 0x8000) |
|
{ |
|
$retval .= chr($length >> 8) . chr($length & 0xFF); |
|
} |
|
else |
|
{ |
|
$retval .= chr(0x80) . |
|
chr(0x04) . |
|
chr(($length >> 24) & 0xFF) . |
|
chr(($length >> 16) & 0xFF) . |
|
chr(($length >> 8) & 0xFF) . |
|
chr($length & 0xFF); |
|
} |
|
|
|
return $retval . $value; |
|
} |
|
} |
|
|
|
/** |
|
* Creates directory |
|
* |
|
* @param string $path Path to create |
|
* @param integer $mode Optional permissions |
|
* @return boolean Success |
|
*/ |
|
function _mkdir($path, $mode = 0777) |
|
{ |
|
$old = umask(0); |
|
$res = @mkdir($path, $mode); |
|
umask($old); |
|
|
|
return $res; |
|
} |
|
|
|
/** |
|
* Creates directories recursively |
|
* |
|
* @param string $path Path to create |
|
* @param integer $mode Optional permissions |
|
* @return boolean Success |
|
*/ |
|
function rmkdir($path, $mode = 0777) |
|
{ |
|
return is_dir($path) || (mkdir(dirname($path), $mode) && _mkdir($path, $mode)); |
|
} |
|
|
|
require(dirname(__FILE__).'/config.php'); |
|
|
|
$allowedExt = array('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF'); |
|
|
|
$imagefile = urldecode($_SERVER['REQUEST_URI']); |
|
|
|
if(! empty($_REQUEST['thumb'])) |
|
{ |
|
$imagefile = '/'. |
|
rtrim( |
|
dirname($_REQUEST['thumb']) |
|
.'/'.THUMBNAIL_DIR.'/' |
|
.(str_replace( |
|
'.', |
|
(empty($_REQUEST['mode']) ? '-c' : '-'.$_REQUEST['mode']).((empty($_REQUEST['width'])&& empty($_REQUEST['height'])) ? '128' : intval(@$_REQUEST['width'])).'x'.((empty($_REQUEST['width'])&& empty($_REQUEST['height'])) ? '128' : intval(@$_REQUEST['height'])).'.', |
|
basename($_REQUEST['thumb']) |
|
) |
|
), |
|
'/'); |
|
} |
|
|
|
if($_SERVER['REQUEST_URI'] == '/inc/thumb.php') |
|
die('No image'); |
|
|
|
$baseDir = str_replace("\\", "/", dirname(dirname(__FILE__))); |
|
|
|
if(file_exists($baseDir . $imagefile)) |
|
{ |
|
$img_data = @getimagesize($baseDir . $imagefile); |
|
header('Content-Type:' . $img_data['mime'], true); |
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s".filemtime($baseDir . $imagefile))." GMT"); |
|
header("Content-Length: " . (string) filesize($baseDir . $imagefile), true); |
|
readfile($baseDir . $imagefile); |
|
exit; |
|
} |
|
|
|
list(, $thumbPath) = explode('/' . UPLOAD_DIR . '/', dirname($imagefile), 2); |
|
|
|
$lenThumbDir = strlen(THUMBNAIL_DIR); |
|
|
|
if ($lenThumbDir && substr($thumbPath, -$lenThumbDir) != THUMBNAIL_DIR) |
|
exit(0); |
|
|
|
$thumbPath = $baseDir . '/' . UPLOAD_DIR . '/' . $thumbPath; |
|
$imagePath = $lenThumbDir ? dirname($thumbPath) : $thumbPath; |
|
|
|
$thumbName = basename($imagefile); |
|
$nameParts = explode('.', $thumbName); |
|
$countParts = count($nameParts); |
|
|
|
if ($countParts < 2 || !in_array(strtolower(end($nameParts)), $allowedExt)) |
|
exit(0); |
|
|
|
$matches = array(); |
|
preg_match('/-(r|c|f|t)(\d+)x(\d+)(r)*$/i', $nameParts[$countParts-2], $matches); |
|
|
|
|
|
if (!isset($matches[0])) |
|
{ |
|
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found'); |
|
exit(0); |
|
} |
|
if (isset($matches[4])) |
|
{ |
|
list($size, $method, $width, $height, $rotate) = $matches; |
|
} |
|
else |
|
{ |
|
list($size, $method, $width, $height) = $matches; |
|
$rotate = false; |
|
} |
|
|
|
$nameParts[$countParts-2] = substr($nameParts[$countParts-2], 0, -strlen($size)); |
|
$imageName = implode('.', $nameParts); |
|
|
|
$save = true; |
|
|
|
if (! file_exists("$imagePath/$imageName")) |
|
{ |
|
$l= "$imagePath/$imageName"; |
|
|
|
if(file_exists($l.'.tmp')) |
|
{ |
|
include_once(BASE_DIR.'/functions/func.common.php'); |
|
|
|
$abs_path = dirname((!strstr($_SERVER['PHP_SELF'], $_SERVER['SCRIPT_NAME']) && (@php_sapi_name() == 'cgi')) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']); |
|
|
|
define('ABS_PATH', rtrim(str_replace("\\", "/", $abs_path), '/') . '/'); |
|
|
|
$url = trim(file_get_contents($l.'.tmp'),ABS_PATH); |
|
|
|
$img=CURL_file_get_contents($url); |
|
|
|
if($img) |
|
{ |
|
file_put_contents("$imagePath/$imageName",$img); |
|
|
|
setEXIFF("$imagePath/$imageName"); |
|
$save = true; |
|
} |
|
|
|
@unlink($l.'.tmp'); |
|
} |
|
|
|
} |
|
|
|
if (! file_exists("$imagePath/$imageName")) |
|
{ |
|
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found'); |
|
$imageName = 'noimage.gif'; |
|
if (!file_exists("$imagePath/$imageName")) |
|
{ |
|
$imagePath = $baseDir . '/' . UPLOAD_DIR . '/images'; |
|
} |
|
if (!file_exists("$imagePath/$imageName")) exit(0); |
|
|
|
$save = false; |
|
} |
|
|
|
require $baseDir.'/class/class.thumbnail.php'; |
|
|
|
$thumb = new Image_Toolbox("$imagePath/$imageName"); |
|
|
|
switch ($method) |
|
{ |
|
case 'r': |
|
$thumb->newOutputSize((int)$width, (int)$height, 0, (boolean)$rotate); |
|
break; |
|
|
|
case 'c': |
|
$thumb->newOutputSize((int)$width, (int)$height, 1, (boolean)$rotate); |
|
break; |
|
|
|
case 'f': |
|
$thumb->newOutputSize((int)$width, (int)$height, 2, false, '#ffffff'); |
|
break; |
|
case 't': |
|
$thumb->newOutputSize((int)$width, (int)$height, 3, false); |
|
break; |
|
} |
|
|
|
//Blend |
|
//$thumb->addImage(BASE_DIR . '/' . 'uploads/gallery/watermark.gif'); |
|
//$thumb->blend('right -10', 'bottom -10', IMAGE_TOOLBOX_BLEND_COPY, 70); |
|
|
|
//Text |
|
//$thumb->addText('Мой текст', BASE_DIR . '/inc/fonts/ft16.ttf', 16, '#709536', 'right -10', 'bottom -10'); |
|
//if ($width > 200){ |
|
// $thumb->addImage(BASE_DIR . '/' . 'uploads/gallery/watermark.gif'); |
|
// $thumb->blend('right -10', 'bottom -10', IMAGE_TOOLBOX_BLEND_COPY, 70); |
|
//} |
|
|
|
$thumb->output(); |
|
|
|
if ($save) |
|
{ |
|
if (!file_exists($thumbPath) && !mkdir($thumbPath, 0777)) exit(0); |
|
if ($thumb->save("$thumbPath/$thumbName")) |
|
{ |
|
$old = umask(0); |
|
chmod("$thumbPath/$thumbName", 0777); |
|
umask($old); |
|
} |
|
if($thumb->_img['main']['type']==2){ |
|
$image = getimagesize("$thumbPath/$thumbName", $info); |
|
if(!isset($info['APP13'])) |
|
{ |
|
if(!isset($AVE_DB)){ |
|
@require(BASE_DIR . '/class/class.database.php'); |
|
$sitename=@$AVE_DB->Query("SELECT site_name FROM " . PREFIX . "_settings LIMIT 1")->GetCell(); |
|
} |
|
|
|
// установка IPTC тэгов |
|
$iptc = array( |
|
'2#120' => iconv("UTF-8","WINDOWS-1251",$sitename), |
|
'2#116' => "http://".$_SERVER['SERVER_NAME'] |
|
); |
|
|
|
// Преобразование IPTC тэгов в двоичный код |
|
$data = ''; |
|
|
|
foreach($iptc as $tag => $string) |
|
{ |
|
$tag = substr($tag, 2); |
|
$data .= iptc_make_tag(2, $tag, $string); |
|
} |
|
|
|
// Встраивание IPTC данных |
|
$content = iptcembed($data, "$thumbPath/$thumbName"); |
|
|
|
// запись нового изображения в файл |
|
$fp = fopen("$thumbPath/$thumbName", "wb"); |
|
fwrite($fp, $content); |
|
fclose($fp); |
|
} |
|
} |
|
} |
|
|
|
?>
|