⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagemanager.php

📁 完美的在线教育系统
💻 PHP
字号:
<?php/** * ImageManager, list images, directories, and thumbnails. * @author $Author: Wei Zhuo $ * @version $Id: ImageManager.php 27 2004-04-01 08:31:57Z Wei Zhuo $ * @package ImageManager */require_once('Files.php');/** * ImageManager Class. * @author $Author: Wei Zhuo $ * @version $Id: ImageManager.php 27 2004-04-01 08:31:57Z Wei Zhuo $ */class ImageManager {	/**	 * Configuration array.	 */	var $config;	/**	 * Array of directory information.	 */	var $dirs;	/**	 * Constructor. Create a new Image Manager instance.	 * @param array $config configuration array, see config.inc.php	 */	function ImageManager($config) 	{		$this->config = $config;	}	/**	 * Get the base directory.	 * @return string base dir, see config.inc.php	 */	function getBaseDir() 	{		Return $this->config['base_dir'];	}	/**	 * Get the base URL.	 * @return string base url, see config.inc.php	 */	function getBaseURL() 	{		Return $this->config['base_url'];	}	function isValidBase()	{		return is_dir($this->getBaseDir());	}	/**	 * Get the tmp file prefix.     * @return string tmp file prefix.	 */	function getTmpPrefix() 	{		Return $this->config['tmp_prefix'];	}	/**	 * Get the sub directories in the base dir.	 * Each array element contain	 * the relative path (relative to the base dir) as key and the 	 * full path as value.	 * @return array of sub directries	 * <code>array('path name' => 'full directory path', ...)</code>	 */	function getDirs() 	{		if(is_null($this->dirs))		{			$dirs = $this->_dirs($this->getBaseDir(),'/');			ksort($dirs);			$this->dirs = $dirs;		}		return $this->dirs;	}	/**	 * Recursively travese the directories to get a list	 * of accessable directories.	 * @param string $base the full path to the current directory	 * @param string $path the relative path name	 * @return array of accessiable sub-directories	 * <code>array('path name' => 'full directory path', ...)</code>	 */	function _dirs($base, $path) 	{		$base = Files::fixPath($base);		$dirs = array();		if($this->isValidBase() == false)			return $dirs;		$d = @dir($base);				while (false !== ($entry = $d->read())) 		{			//If it is a directory, and it doesn't start with			// a dot, and if is it not the thumbnail directory			if(is_dir($base.$entry) 				&& substr($entry,0,1) != '.'				&& $this->isThumbDir($entry) == false) 			{				$relative = Files::fixPath($path.$entry);				$fullpath = Files::fixPath($base.$entry);				$dirs[$relative] = $fullpath;				$dirs = array_merge($dirs, $this->_dirs($fullpath, $relative));			}		}		$d->close();		Return $dirs;	}	/**	 * Get all the files and directories of a relative path.	 * @param string $path relative path to be base path.	 * @return array of file and path information.	 * <code>array(0=>array('relative'=>'fullpath',...), 1=>array('filename'=>fileinfo array(),...)</code>	 * fileinfo array: <code>array('url'=>'full url', 	 *                       'relative'=>'relative to base', 	 *                        'fullpath'=>'full file path', 	 *                        'image'=>imageInfo array() false if not image,	 *                        'stat' => filestat)</code>	 */	function getFiles($path) 	{		$files = array();		$dirs = array();		if($this->isValidBase() == false)			return array($files,$dirs);		$path = Files::fixPath($path);		$base = Files::fixPath($this->getBaseDir());		$fullpath = Files::makePath($base,$path);		$d = @dir($fullpath);				while (false !== ($entry = $d->read())) 		{			//not a dot file or directory			if(substr($entry,0,1) != '.')			{				if(is_dir($fullpath.$entry)					&& $this->isThumbDir($entry) == false)				{					$relative = Files::fixPath($path.$entry);					$full = Files::fixPath($fullpath.$entry);					$count = $this->countFiles($full);					$dirs[$relative] = array('fullpath'=>$full,'entry'=>$entry,'count'=>$count);				}				else if(is_file($fullpath.$entry) && $this->isThumb($entry)==false && $this->isTmpFile($entry) == false) 				{					$img = $this->getImageInfo($fullpath.$entry);					if(!(!is_array($img)&&$this->config['validate_images']))					{						$file['url'] = Files::makePath($this->config['base_url'],$path).$entry;						$file['relative'] = $path.$entry;						$file['fullpath'] = $fullpath.$entry;						$file['image'] = $img;						$file['stat'] = stat($fullpath.$entry);						$files[$entry] = $file;					}				}			}		}		$d->close();		ksort($dirs);		ksort($files);				Return array($dirs, $files);	}		/**	 * Count the number of files and directories in a given folder	 * minus the thumbnail folders and thumbnails.	 */	function countFiles($path) 	{		$total = 0;		if(is_dir($path)) 		{			$d = @dir($path);			while (false !== ($entry = $d->read())) 			{				//echo $entry."<br>";				if(substr($entry,0,1) != '.'					&& $this->isThumbDir($entry) == false					&& $this->isTmpFile($entry) == false					&& $this->isThumb($entry) == false) 				{					$total++;				}			}			$d->close();		}		return $total;	}	/**	 * Get image size information.	 * @param string $file the image file	 * @return array of getImageSize information, 	 *  false if the file is not an image.	 */	function getImageInfo($file) 	{		Return @getImageSize($file);	}	/**	 * Check if the file contains the thumbnail prefix.	 * @param string $file filename to be checked	 * @return true if the file contains the thumbnail prefix, false otherwise.	 */	function isThumb($file) 	{		$len = strlen($this->config['thumbnail_prefix']);		if(substr($file,0,$len)==$this->config['thumbnail_prefix'])			Return true;		else			Return false;	}	/**	 * Check if the given directory is a thumbnail directory.	 * @param string $entry directory name	 * @return true if it is a thumbnail directory, false otherwise	 */	function isThumbDir($entry) 	{		if($this->config['thumbnail_dir'] == false			|| strlen(trim($this->config['thumbnail_dir'])) == 0)			Return false;				else			Return ($entry == $this->config['thumbnail_dir']);	}	/**	 * Check if the given file is a tmp file.	 * @param string $file file name	 * @return boolean true if it is a tmp file, false otherwise	 */	function isTmpFile($file) 	{		$len = strlen($this->config['tmp_prefix']);		if(substr($file,0,$len)==$this->config['tmp_prefix'])			Return true;		else			Return false;	 		}	/**	 * For a given image file, get the respective thumbnail filename	 * no file existence check is done.	 * @param string $fullpathfile the full path to the image file	 * @return string of the thumbnail file	 */	function getThumbName($fullpathfile) 	{		$path_parts = pathinfo($fullpathfile);				$thumbnail = $this->config['thumbnail_prefix'].$path_parts['basename'];		if($this->config['safe_mode'] == true			|| strlen(trim($this->config['thumbnail_dir'])) == 0)		{			Return Files::makeFile($path_parts['dirname'],$thumbnail);		}		else		{			if(strlen(trim($this->config['thumbnail_dir'])) > 0)			{				$path = Files::makePath($path_parts['dirname'],$this->config['thumbnail_dir']);				if(!is_dir($path))					Files::createFolder($path);				Return Files::makeFile($path,$thumbnail);			}			else //should this ever happen?			{				//error_log('ImageManager: Error in creating thumbnail name');			}		}	}		/**	 * Similar to getThumbName, but returns the URL, base on the	 * given base_url in config.inc.php	 * @param string $relative the relative image file name, 	 * relative to the base_dir path	 * @return string the url of the thumbnail	 */	function getThumbURL($relative) 	{		$path_parts = pathinfo($relative);		$thumbnail = $this->config['thumbnail_prefix'].$path_parts['basename'];		if($path_parts['dirname']=='\\') $path_parts['dirname']='/';		if($this->config['safe_mode'] == true			|| strlen(trim($this->config['thumbnail_dir'])) == 0)		{			Return Files::makeFile($this->getBaseURL(),$thumbnail);		}		else		{			if(strlen(trim($this->config['thumbnail_dir'])) > 0)			{				$path = Files::makePath($path_parts['dirname'],$this->config['thumbnail_dir']);				$url_path = Files::makePath($this->getBaseURL(), $path);				Return Files::makeFile($url_path,$thumbnail);			}			else //should this ever happen?			{				//error_log('ImageManager: Error in creating thumbnail url');			}		}	}	/**	 * Check if the given path is part of the subdirectories	 * under the base_dir.	 * @param string $path the relative path to be checked	 * @return boolean true if the path exists, false otherwise	 */	function validRelativePath($path) 	{		$dirs = $this->getDirs();		if($path == '/')			Return true;		//check the path given in the url against the 		//list of paths in the system.		for($i = 0; $i < count($dirs); $i++)		{			$key = key($dirs);			//we found the path			if($key == $path)				Return true;					next($dirs);		}				Return false;	}	/**	 * Process uploaded files, assumes the file is in 	 * $_FILES['upload'] and $_POST['dir'] is set.	 * The dir must be relative to the base_dir and exists.	 * If 'validate_images' is set to true, only file with	 * image dimensions will be accepted.	 * @return null	 */	function processUploads() 	{		if($this->isValidBase() == false)			return;		$relative = null;		if(isset($_POST['dir'])) 			$relative = rawurldecode($_POST['dir']);		else			return;		//check for the file, and must have valid relative path		if(isset($_FILES['upload']) && $this->validRelativePath($relative))		{			$upload_result=$this->_processFiles($relative, $_FILES['upload']);			return $upload_result;		}	}		/**	 * Insert the uploaded picture in the database.	 * @param string $relative The path in the document images folder	 * @param array $file the uploaded file from $_FILES	 * @param String $file_name the correct file name (generated by the function Files::copyFile).	 */	function _insertPictureInDatabase($relative, $file, $file_name){		$image_name=utf8_decode($file_name);		$image_name= strtr($image_name,"懒旅呐噌忏溴矣哉重蝮趱鲽壬仕栝觌晴掏蜗祉铒仝圮

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -