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