$v)
{
if (array_search($k, $excls) ===false)
{
$strAppend = "&";
if ($count == 1)
{
$strAppend = "?";
$count++;
}
$output .= $strAppend . $k . "=" . $v;
}
}
return htmlspecialchars($output);
}
/**
* print out an array
*
* @param array $array
*/
function displayArray($array, $comments="")
{
echo "
";
echo $comments;
print_r($array);
echo $comments;
echo "
";
}
/**
* check if a file extension is permitted
*
* @param string $filePath
* @param array $validExts
* @param array $invalidExts
* @return boolean
*/
function isValidExt($filePath, $validExts, $invalidExts=array())
{
$tem = array();
if (sizeof($validExts))
{
foreach($validExts as $k=>$v)
{
$tem[$k] = strtolower(trim($v));
}
}
$validExts = $tem;
$tem = array();
if (sizeof($invalidExts))
{
foreach($invalidExts as $k=>$v)
{
$tem[$k] = strtolower(trim($v));
}
}
$invalidExts = $tem;
if (sizeof($validExts) && sizeof($invalidExts))
{
foreach($validExts as $k=>$ext)
{
if (array_search($ext, $invalidExts) !== false)
{
unset($validExts[$k]);
}
}
}
if (sizeof($validExts))
{
if (array_search(strtolower(getFileExt($filePath)), $validExts) !== false)
{
return true;
}else
{
return false;
}
}elseif (array_search(strtolower(getFileExt($filePath)), $invalidExts) === false)
{
return true;
}else
{
return false;
}
}
/**
* transform file relative path to absolute path
* @param string $value the path to the file
* @return string
*/
function relToAbs($value)
{
return backslashToSlash(preg_replace("/(\\\\)/","\\", getRealPath($value)));
}
function getRelativeFileUrl($value, $relativeTo)
{
$output = '';
$wwwroot = removeTrailingSlash(backslashToSlash(getRootPath()));
$urlprefix = "";
$urlsuffix = "";
$value = backslashToSlash(getRealPath($value));
$pos = strpos($value, $wwwroot);
if ($pos !== false && $pos == 0)
{
$output = $urlprefix . substr($value, strlen($wwwroot)) . $urlsuffix;
}
}
/**
* replace slash with backslash
*
* @param string $value the path to the file
* @return string
*/
function slashToBackslash($value) {
return str_replace("/", DIRECTORY_SEPARATOR, $value);
}
/**
* replace backslash with slash
*
* @param string $value the path to the file
* @return string
*/
function backslashToSlash($value) {
return str_replace(DIRECTORY_SEPARATOR, "/", $value);
}
/**
* removes the trailing slash
*
* @param string $value
* @return string
*/
function removeTrailingSlash($value) {
if (preg_match('@^.+/$@i', $value))
{
$value = substr($value, 0, strlen($value)-1);
}
return $value;
}
/**
* append a trailing slash
*
* @param string $value
* @return string
*/
function addTrailingSlash($value)
{
if (preg_match('@^.*[^/]{1}$@i', $value))
{
$value .= '/';
}
return $value;
}
/**
* transform a file path to user friendly
*
* @param string $value
* @return string
*/
function transformFilePath($value) {
$rootPath = addTrailingSlash(backslashToSlash(getRealPath(CONFIG_SYS_ROOT_PATH)));
$value = addTrailingSlash(backslashToSlash(getRealPath($value)));
if (!empty($rootPath) && ($i = strpos($value, $rootPath)) !== false)
{
$value = ($i == 0?substr($value, strlen($rootPath)):"/");
}
$value = prependSlash($value);
return $value;
}
/**
* prepend slash
*
* @param string $value
* @return string
*/
function prependSlash($value)
{
if (($value && $value[0] != '/') || !$value )
{
$value = "/" . $value;
}
return $value;
}
function writeInfo($data, $die = false)
{
$fp = @fopen(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'data.php', 'w+');
@fwrite($fp, $data);
@fwrite($fp, "\n\n" . date('d/M/Y H:i:s') );
@fclose($fp);
if ($die)
{
die();
}
}
/**
* no cachable header
*/
function addNoCacheHeaders() {
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
}
/**
* add extra query stiring to a url
* @param string $baseUrl
* @param string $extra the query string added to the base url
*/
function appendQueryString($baseUrl, $extra)
{
$output = $baseUrl;
if (!empty($extra))
{
if (strpos($baseUrl, "?") !== false)
{
$output .= "&" . $extra;
}else
{
$output .= "?" . $extra;
}
}
return $output;
}
/**
* make the query strin from $_GET, but excluding those specified by $excluded
*
* @param array $excluded
* @return string
*/
function makeQueryString($excluded=array())
{
$output = '';
$count = 1;
foreach($_GET as $k=>$v)
{
if (array_search($k, $excluded) === false)
{
$output .= ($count>1?'&':'') . ($k . "=" . $v);
$count++;
}
}
return $output;
}
/**
* get parent path from specific path
*
* @param string $value
* @return string
*/
function getParentPath($value)
{
$value = removeTrailingSlash(backslashToSlash($value));
if (false !== ($index = strrpos($value, "/")) )
{
return substr($value, 0, $index);
}
}
/**
* check if the file/folder is sit under the root
*
* @param string $value
* @return boolean
*/
function isUnderRoot($value)
{
$roorPath = strtolower(addTrailingSlash(backslashToSlash(getRealPath(CONFIG_SYS_ROOT_PATH))));
if (file_exists($value) && @strpos(strtolower(addTrailingSlash(backslashToSlash(getRealPath($value)))), $roorPath) === 0 )
{
return true;
}
return false;
}
/**
* check if a file under the session folder
*
* @param string $value
* @return boolean
*/
function isUnderSession($value)
{
global $session;
$sessionPath = strtolower(addTrailingSlash(backslashToSlash(getRealPath($session->getSessionDir()))));
if (file_exists($value) && @strpos(strtolower(addTrailingSlash(backslashToSlash(getRealPath($value)))), $sessionPath) === 0 )
{
return true;
}
return false;
}
/**
* get thumbnail width and height
*
* @param integer $originaleImageWidth
* @param integer $originalImageHeight
* @param integer $thumbnailWidth
* @param integer $thumbnailHeight
* @return array()
*/
function getThumbWidthHeight( $originaleImageWidth, $originalImageHeight, $thumbnailWidth, $thumbnailHeight)
{
$outputs = array( "width"=>0, "height"=>0);
$thumbnailWidth = (int)($thumbnailWidth);
$thumbnailHeight = (int)($thumbnailHeight);
if (!empty($originaleImageWidth) && !empty($originalImageHeight))
{
//start to get the thumbnail width & height
if (($thumbnailWidth < 1 && $thumbnailHeight < 1) || ($thumbnailWidth > $originaleImageWidth && $thumbnailHeight > $originalImageHeight ))
{
$thumbnailWidth =$originaleImageWidth;
$thumbnailHeight = $originalImageHeight;
}elseif ($thumbnailWidth < 1)
{
$thumbnailWidth = floor($thumbnailHeight / $originalImageHeight * $originaleImageWidth);
}elseif ($thumbnailHeight < 1)
{
$thumbnailHeight = floor($thumbnailWidth / $originaleImageWidth * $originalImageHeight);
}else
{
$scale = min($thumbnailWidth/$originaleImageWidth, $thumbnailHeight/$originalImageHeight);
$thumbnailWidth = floor($scale*$originaleImageWidth);
$thumbnailHeight = floor($scale*$originalImageHeight);
}
$outputs['width'] = $thumbnailWidth;
$outputs['height'] = $thumbnailHeight;
}
return $outputs;
}
/**
* turn to absolute path from relative path
*
* @param string $value
* @return string
*/
function getAbsPath($value) {
if (substr($value, 0, 1) == "/")
return slashToBackslash(DIR_AJAX_ROOT . $value);
return slashToBackslash(dirname(__FILE__) . "/" . $value);
}
/**
* get file/folder base name
*
* @param string $value
* @return string
*/
function getBaseName($value)
{
$value = removeTrailingSlash(backslashToSlash($value));
if (false !== ($index = strrpos($value, "/")) )
{
return substr($value, $index + 1);
}else
{
return $value;
}
}
function myRealPath($path) {
if (strpos($path, ':/') !== false)
{
return $path;
}
// check if path begins with "/" ie. is absolute
// if it isnt concat with script path
if (strpos($path,"/") !== 0 ) {
$base=dirname($_SERVER['SCRIPT_FILENAME']);
$path=$base."/".$path;
}
// canonicalize
$path=explode('/', $path);
$newpath=array();
for ($i=0; $i 1048576)
{
return round($size / 1048576, 1) . " MB";
}elseif ($size > 1024)
{
return round($size / 1024, 1) . " KB";
}elseif ($size == '')
{
return $size;
}else
{
return $size . " b";
}
}
/**
* remove beginging slash
*
* @param string $value
* @return string
*/
function removeBeginingSlash($value)
{
$value = backslashToSlash($value);
if (strpos($value, "/") === 0)
{
$value = substr($value, 1);
}
return $value;
}
/**
* get site root path
*
* @return String.
*/
function getRootPath() {
$output = "";
if (defined('CONFIG_WEBSITE_DOCUMENT_ROOT') && CONFIG_WEBSITE_DOCUMENT_ROOT)
{
return slashToBackslash(CONFIG_WEBSITE_DOCUMENT_ROOT);
}
if (isset($_SERVER['DOCUMENT_ROOT']) && ($output = relToAbs($_SERVER['DOCUMENT_ROOT'])) != '' )
{
return $output;
}elseif (isset($_SERVER["SCRIPT_NAME"]) && isset($_SERVER["SCRIPT_FILENAME"]) && ($output = str_replace(backslashToSlash($_SERVER["SCRIPT_NAME"]), "", backslashToSlash($_SERVER["SCRIPT_FILENAME"]))) && is_dir($output))
{
return slashToBackslash($output);
}elseif (isset($_SERVER["SCRIPT_NAME"]) && isset($_SERVER["PATH_TRANSLATED"]) && ($output = str_replace(backslashToSlash($_SERVER["SCRIPT_NAME"]), "", str_replace("//", "/", backslashToSlash($_SERVER["PATH_TRANSLATED"])))) && is_dir($output))
{
return $output;
}else
{
return '';
}
return null;
}
/**
* add beginging slash
*
* @param string $value
* @return string
*/
function addBeginingSlash($value)
{
if (strpos($value, "/") !== 0 && !empty($value))
{
$value .= "/" . $value;
}
return $value;
}
/**
* get a file extension
*
* @param string $fileName the path to a file or just the file name
*/
function getFileExt($filePath)
{
return @substr(@strrchr($filePath, "."), 1);
}
/**
* reuturn the relative path between two url
*
* @param string $start_dir
* @param string $final_dir
* @return string
*/
function getRelativePath($start_dir, $final_dir){
//
$firstPathParts = explode(DIRECTORY_SEPARATOR, $start_dir);
$secondPathParts = explode(DIRECTORY_SEPARATOR, $final_dir);
//
$sameCounter = 0;
for ($i = 0; $i < min( count($firstPathParts), count($secondPathParts) ); $i++) {
if ( strtolower($firstPathParts[$i]) !== strtolower($secondPathParts[$i]) ) {
break;
}
$sameCounter++;
}
if ( $sameCounter == 0 ) {
return $final_dir;
}
//
$newPath = '';
for ($i = $sameCounter; $i < count($firstPathParts); $i++) {
if ( $i > $sameCounter ) {
$newPath .= DIRECTORY_SEPARATOR;
}
$newPath .= "..";
}
if ( count($newPath) == 0 ) {
$newPath = ".";
}
for ($i = $sameCounter; $i < count($secondPathParts); $i++) {
$newPath .= DIRECTORY_SEPARATOR;
$newPath .= $secondPathParts[$i];
}
//
return $newPath;
}
/**
* get the php server memory limit
* @return integer
*
*/
function getMemoryLimit()
{
$output = @ini_get('memory_limit') or $output = -1 ;
if ((int)($output) < 0)
{//unlimited
$output = 999999999999999999;
}
elseif (strpos('g', strtolower($output)) !== false)
{
$output = (int)($output) * 1024 * 1024 * 1024;
}elseif (strpos('k', strtolower($output)) !== false)
{
$output = (int)($output) * 1024 ;
}else
{
$output = (int)($output) * 1024 * 1024;
}
return $output;
}
/**
* get file content
*
* @param string $path
*/
function getFileContent($path)
{
return @file_get_contents($path);
//return str_replace(array("\r", "\n", '"', "\t"), array("", "\\n", '\"', "\\t"), @file_get_contents($path));
}
/**
* get the list of folder under a specified folder
* which will be used for drop-down menu
* @param string $path the path of the specified folder
* @param array $outputs
* @param string $indexNumber
* @param string $prefixNumber the prefix before the index number
* @param string $prefixName the prefix before the folder name
* @return array
*/
function getFolderListing($path,$indexNumber=null, $prefixNumber =' ', $prefixName =' - ', $outputs=array())
{
$path = removeTrailingSlash(backslashToSlash($path));
if (is_null($indexNumber))
{
$outputs[IMG_LBL_ROOT_FOLDER] = removeTrailingSlash(backslashToSlash($path));
}
$fh = @opendir($path);
if ($fh)
{
$count = 1;
while ($file = @readdir($fh))
{
$newPath = removeTrailingSlash(backslashToSlash($path . "/" . $file));
if (isListingDocument($newPath) && $file != '.' && $file != '..' && is_dir($newPath))
{
if (!empty($indexNumber))
{//this is not root folder
$outputs[$prefixNumber . $indexNumber . "." . $count . $prefixName . $file] = $newPath;
getFolderListing($newPath, $prefixNumber . $indexNumber . "." . $count , $prefixNumber, $prefixName, $outputs);
}else
{//this is root folder
$outputs[$count . $prefixName . $file] = $newPath;
getFolderListing($newPath, $count, $prefixNumber, $prefixName, $outputs);
}
$count++;
}
}
@closedir($fh);
}
return $outputs;
}
/**
* get the valid text editor extension
* which is calcualte from the CONFIG_EDITABALE_VALID_EXTS
* exclude those specified in CONFIG_UPLOAD_INVALID_EXTS
* and those are not specified in CONFIG_UPLOAD_VALID_EXTS
*
* @return array
*/
function getValidTextEditorExts()
{
$validEditorExts = explode(',', CONFIG_EDITABLE_VALID_EXTS);
if (CONFIG_UPLOAD_VALID_EXTS)
{//exclude those exts not shown on CONFIG_UPLOAD_VALID_EXTS
$validUploadExts = explode(',', CONFIG_UPLOAD_VALID_EXTS);
foreach($validEditorExts as $k=>$v)
{
if (array_search($v, $validUploadExts) === false)
{
unset($validEditorExts[$k]);
}
}
}
if (CONFIG_UPLOAD_INVALID_EXTS)
{//exlcude those exists in CONFIG_UPLOAD_INVALID_EXTS
$invalidUploadExts = explode(',', CONFIG_UPLOAD_INVALID_EXTS);
foreach($validEditorExts as $k=>$v)
{
if (array_search($v, $invalidUploadExts) !== false)
{
unset($validEditorExts[$k]);
}
}
}
return $validEditorExts;
}
/**
* check if file name or folder name is valid against a regular expression
*
* @param string $pattern regular expression, separated by , if multiple
* @param string $string
* @return booolean
*/
function isValidPattern( $pattern, $string)
{
if (($pattern)=== '')
{
return true;
}
elseif (strpos($pattern,",")!==false)
{
$regExps = explode(',', $pattern);
foreach ($regExps as $regExp => $value)
{
if (eregi($value, $string))
{
return true;
}
}
}
elseif (eregi($pattern, $string))
{
return true;
}
return false;
}
/**
* check if file name or folder name is invalid against a regular expression
*
* @param string $pattern regular expression, separated by , if multiple
* @param string $string
* @return booolean
*/
function isInvalidPattern( $pattern, $string)
{
if (($pattern)=== '')
{
return false;
}
elseif (strpos($pattern,",")!==false)
{
$regExps = explode(',', $pattern);
foreach ($regExps as $regExp => $value)
{
if (eregi($value, $string))
{
return true;
}
}
}
elseif (eregi($pattern, $string))
{
return true;
}
return false;
}
/**
* cut the file down to fit the list page
*
* @param string $fileName
*/
function shortenFileName($fileName, $maxLeng=17, $indicate = '...')
{
if (strlen($fileName) > $maxLeng)
{
$fileName = substr($fileName, 0, $maxLeng - strlen($indicate)) . $indicate;
}
return $fileName;
}
if (!function_exists('mime_content_type'))
{
function mime_content_type ( $f )
{
return trim ( @exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
}
}
/**
* check if such document is allowed to shown on the list
*
* @param string $path the path to the document
* @return boolean
*/
function isListingDocument($path)
{
$file = basename($path);
if (CONFIG_SYS_PATTERN_FORMAT == 'list')
{// comma delimited vague file/folder name
if (is_dir($path))
{
$includeDir = trimlrm(CONFIG_SYS_INC_DIR_PATTERN);
$excludeDir = trimlrm(CONFIG_SYS_EXC_DIR_PATTERN);
$found_includeDir = strpos($includeDir, $file);
$found_excludeDir = strpos($excludeDir, $file);
if ((!CONFIG_SYS_INC_DIR_PATTERN || (!($found_includeDir === FALSE))) && (!CONFIG_SYS_EXC_DIR_PATTERN || (($found_excludeDir === FALSE))))
{
return true;
}else
{
return false;
}
}elseif (is_file($path))
{
$includeFile = trimlrm(CONFIG_SYS_INC_FILE_PATTERN);
$excludeFile = trimlrm(CONFIG_SYS_EXC_FILE_PATTERN);
$found_includeFile = strpos($includeFile, $file);
$found_excludeFile = strpos($excludeFile, $file);
if ((!CONFIG_SYS_INC_FILE_PATTERN || (!($found_includeFile === FALSE))) && (!CONFIG_SYS_EXC_FILE_PATTERN || (($found_excludeFile === FALSE))))
{
return true;
}else
{
return false;
}
}
}elseif (CONFIG_SYS_PATTERN_FORMAT == 'csv')
{//comma delimited file/folder name
if (is_dir($path))
{
$includeDir = trimlrm(CONFIG_SYS_INC_DIR_PATTERN);
$excludeDir = trimlrm(CONFIG_SYS_EXC_DIR_PATTERN);
if (!empty($includeDir) && !empty($excludeDir))
{
$validDir = explode(',', $includeDir);
$invalidDir = explode(",", $excludeDir);
if (array_search(basename($path), $validDir) !== false && array_search(basename($path), $invalidDir) === false)
{
return true;
}else
{
return false;
}
}elseif (!empty($includeDir))
{
$validDir = explode(',', $includeDir);
if (array_search(basename($path), $validDir) !== false)
{
return true;
}else
{
return false;
}
}elseif (!empty($excludeFile))
{
$invalidDir = explode(",", $excludeDir);
if (array_search(basename($path), $invalidDir) === false)
{
return true;
}else
{
return false;
}
}
return true;
}elseif (is_file($path))
{
$includeFile = trimlrm(CONFIG_SYS_INC_FILE_PATTERN);
$excludeFile = trimlrm(CONFIG_SYS_EXC_FILE_PATTERN);
if (!empty($includeFile) && !empty($excludeFile))
{
$validFile = explode(',', $includeFile);
$invalidFile = explode(',', $excludeFile);
if (array_search(basename($path), $validFile) !== false && array_search(basename($path), $invalidFile) === false)
{
return true;
}else
{
return false;
}
}elseif (!empty($includeFile))
{
$validFile = explode(',', $includeFile);
if (array_search(basename($path), $validFile) !== false)
{
return true;
}else
{
return false;
}
}elseif (!empty($excludeFile))
{
$invalidFile = explode(',', $excludeFile);
if (array_search(basename($path), $invalidFile) === false)
{
return true;
}else
{
return false;
}
}
return true;
}
}
else
{//regular expression
if (is_dir($path) )
{
if (isValidPattern(CONFIG_SYS_INC_DIR_PATTERN, $path) && !isInvalidPattern(CONFIG_SYS_EXC_DIR_PATTERN, $path))
{
return true;
}else
{
return false;
}
}elseif (is_file($path))
{
if (isValidPattern(CONFIG_SYS_INC_FILE_PATTERN, $path) && !isInvalidPattern(CONFIG_SYS_EXC_FILE_PATTERN, $path) )
{
return true;
}else
{
return false;
}
}
}
return false;
}
/**
* force to down the specified file
*
* @param string $path
*
*/
function downloadFile($path, $newFileName=null)
{
if (file_exists($path) && is_file($path))
{
$mimeContentType = 'application/octet-stream';
if (function_exists('finfo_open'))
{
if (($fp = @finfo_open($path)))
{
$mimeContentType = @finfo_file($fp, basename($path));
@finfo_close($fp);
}
}elseif (($temMimeContentType = @mime_content_type($path)) && !empty($temMimeContentType))
{
$mimeContentType = $temMimeContentType;
}
// START ANDR� SILVA DOWNLOAD CODE
// required for IE, otherwise Content-disposition is ignored
if (ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: " . $mimeContentType );
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".(is_null($newFileName)?basename($path):$newFileName)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($path));
readfile($path);
exit();
// END ANDR� SILVA DOWNLOAD CODE
}
}
/**
* remove all white spaces
*
* @param string $hayStack
* @param string $whiteSpaceChars
* @return string
*/
function trimlrm ($hayStack, $whiteSpaceChars="\t\n\r\0\x0B")
{
return str_replace($whiteSpaceChars, '', trim($hayStack));
}
/**
* get the parent path of the specified path
*
* @param string $path
* @return string
*/
function getParentFolderPath($path)
{
$realPath = addTrailingSlash(backslashToSlash(getRealPath($path)));
$parentRealPath = addTrailingSlash(backslashToSlash(dirname($realPath)));
$differentPath = addTrailingSlash(substr($realPath, strlen($parentRealPath)));
$parentPath = substr($path, 0, strlen(addTrailingSlash(backslashToSlash($path))) - strlen($differentPath));
if (isUnderRoot($parentPath))
{
return $parentPath;
}else
{
return CONFIG_SYS_DEFAULT_PATH;
}
}
function getCurrentFolderPath()
{
$folderPathIndex = 'path';
$lastVisitedFolderPathIndex = 'ajax_last_visited_folder';
if (isset($_GET[$folderPathIndex]) && file_exists($_GET[$folderPathIndex]) && !is_file($_GET[$folderPathIndex]) )
{
$currentFolderPath = $_GET[$folderPathIndex];
}
elseif (isset($_SESSION[$lastVisitedFolderPathIndex]) && file_exists($_SESSION[$lastVisitedFolderPathIndex]) && !is_file($_SESSION[$lastVisitedFolderPathIndex]))
{
$currentFolderPath = $_SESSION[$lastVisitedFolderPathIndex];
}else
{
$currentFolderPath = CONFIG_SYS_DEFAULT_PATH;
}
$currentFolderPath = (isUnderRoot($currentFolderPath)?backslashToSlash((addTrailingSlash($currentFolderPath))):CONFIG_SYS_DEFAULT_PATH);
//keep track of this folder path in session
$_SESSION[$lastVisitedFolderPathIndex] = $currentFolderPath;
if (!file_exists($currentFolderPath))
{
die(ERR_FOLDER_NOT_FOUND . $currentFolderPath);
}
}
if (!function_exists("imagerotate"))
{
function imagerotate($src_img, $angle, $bicubic=false)
{
// convert degrees to radians
$angle = (360 - $angle) + 180;
$angle = deg2rad($angle);
$src_x = imagesx($src_img);
$src_y = imagesy($src_img);
$center_x = floor($src_x/2);
$center_y = floor($src_y/2);
$rotate = imagecreatetruecolor($src_x, $src_y);
imagealphablending($rotate, false);
imagesavealpha($rotate, true);
$cosangle = cos($angle);
$sinangle = sin($angle);
for ($y = 0; $y < $src_y; $y++) {
for ($x = 0; $x < $src_x; $x++) {
// rotate...
$old_x = (($center_x-$x) * $cosangle + ($center_y-$y) * $sinangle)
+ $center_x;
$old_y = (($center_y-$y) * $cosangle - ($center_x-$x) * $sinangle)
+ $center_y;
if ( $old_x >= 0 && $old_x < $src_x
&& $old_y >= 0 && $old_y < $src_y ) {
if ($bicubic == true) {
$sY = $old_y + 1;
$siY = $old_y;
$siY2 = $old_y - 1;
$sX = $old_x + 1;
$siX = $old_x;
$siX2 = $old_x - 1;
$c1 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY2));
$c2 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY));
$c3 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY2));
$c4 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY));
$r = ($c1['red'] + $c2['red'] + $c3['red'] + $c4['red'] ) << 14;
$g = ($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) << 6;
$b = ($c1['blue'] + $c2['blue'] + $c3['blue'] + $c4['blue'] ) >> 2;
$a = ($c1['alpha'] + $c2['alpha'] + $c3['alpha'] + $c4['alpha'] ) >> 2;
$color = imagecolorallocatealpha($src_img, $r,$g,$b,$a);
} else {
$color = imagecolorat($src_img, $old_x, $old_y);
}
} else {
// this line sets the background colour
$color = imagecolorallocatealpha($src_img, 255, 255, 255, 127);
}
imagesetpixel($rotate, $x, $y, $color);
}
}
return $rotate;
/* $src_x = @imagesx($src_img);
$src_y = @imagesy($src_img);
if ($angle == 180)
{
$dest_x = $src_x;
$dest_y = $src_y;
}
elseif ($src_x <= $src_y)
{
$dest_x = $src_y;
$dest_y = $src_x;
}
elseif ($src_x >= $src_y)
{
$dest_x = $src_y;
$dest_y = $src_x;
}
if (function_exists('ImageCreateTrueColor'))
{
$rotate = @ImageCreateTrueColor($dst_w,$dst_h);
} else {
$rotate = @ImageCreate($dst_w,$dst_h);
}
@imagealphablending($rotate, false);
switch ($angle)
{
case 270:
for ($y = 0; $y < ($src_y); $y++)
{
for ($x = 0; $x < ($src_x); $x++)
{
$color = imagecolorat($src_img, $x, $y);
imagesetpixel($rotate, $dest_x - $y - 1, $x, $color);
}
}
break;
case 90:
for ($y = 0; $y < ($src_y); $y++)
{
for ($x = 0; $x < ($src_x); $x++)
{
$color = imagecolorat($src_img, $x, $y);
imagesetpixel($rotate, $y, $dest_y - $x - 1, $color);
}
}
break;
case 180:
for ($y = 0; $y < ($src_y); $y++)
{
for ($x = 0; $x < ($src_x); $x++)
{
$color = imagecolorat($src_img, $x, $y);
imagesetpixel($rotate, $dest_x - $x - 1, $dest_y - $y - 1, $color);
}
}
break;
default: $rotate = $src_img;
};
return $rotate;*/
}
}
?>