imagemanager.php
来自「国外很不错的一个开源OA系统Group-Office」· PHP 代码 · 共 616 行 · 第 1/2 页
PHP
616 行
<?/** * ImageManager, list images, directories, and thumbnails. * @author $Author: mschering $ * @version $Id: ImageManager.php,v 1.1 2004/11/29 09:44:36 mschering Exp $ * @package ImageManager */require_once('Files.php');/** * ImageManager Class. * @author $Author: mschering $ * @version $Id: ImageManager.php,v 1.1 2004/11/29 09:44:36 mschering Exp $ */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)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?