resource = fopen($fileName,$mode.'b'); if($this->resource) { flock($this->resource,LOCK_EX); } } /** * @brief 获取文件内容 * @return String 文件内容 */ public function read() { $content = null; while(!feof($this->resource)) { $content.= fread($this->resource,1024); } return $content; } /** * @brief 文件写入操作 * @param String $content 要写入的文件内容 * @return Int or false 写入的字符数; false:写入失败; */ public function write($content) { $worldsnum = fwrite($this->resource,$content); $this->save(); return is_bool($worldsnum) ? false : $worldsnum; } /** * @brief 清空目录下的所有文件 * @return bool false:失败; true:成功; */ public static function clearDir($dir) { if($dir[0] != '.' && is_dir($dir) && is_writable($dir)) { $dirRes = opendir($dir); while( false !== ($fileName = readdir($dirRes)) ) { if($fileName[0] !== '.') { $fullpath = $dir.'/'.$fileName; if(is_file($fullpath)) { self::unlink($fullpath); } else { self::clearDir($fullpath); rmdir($fullpath); } } } closedir($dirRes); return true; } else { return false; } } /** * @brief 获取文件信息 * @param String $fileName 文件路径 * @return array or null array:文件信息; null:文件不存在; */ public static function getInfo($fileName) { if(is_file($fileName)) return stat($fileName); else return null; } /** * @brief 创建文件夹 * @param String $path 路径 * @param int $chmod 文件夹权限 * @note $chmod 参数不能是字符串(加引号),否则linux会出现权限问题 */ public static function mkdir($path,$chmod=0777) { return is_dir($path) or (self::mkdir(dirname($path),$chmod) and mkdir($path,$chmod)); } /** * @brief 复制文件 * @param String $from 源文件路径 * @param String $to 目标文件路径 * @param String $mod 操作模式,c:复制(默认); x:剪切(删除$from文件) * @return bool 操作结果 true:成功; false:失败; */ public static function copy($from,$to,$mode = 'c') { $dir = dirname($to); //创建目录 self::mkdir($dir); copy($from,$to); if(is_file($to)) { if($mode == 'x') { self::unlink($from); } return true; } else { return false; } } /** * @brief 删除文件 * @param String $fileName 文件路径 * @return bool 操作结果 false:删除失败; */ public static function unlink($fileName) { if(is_file($fileName) && is_writable($fileName)) { return unlink($fileName); } else return false; } /** * @brief 删除$dir文件夹 或者 其下所有文件 * @param String $dir 文件路径 * @param bool $recursive 是否强制删除,如果强制删除则递归删除该目录下的全部文件,默认为false * @return bool true:删除成功; false:删除失败; */ public static function rmdir($dir,$recursive = false) { if(is_dir($dir) && is_writable($dir)) { //强制删除 if($recursive == true) { self::clearDir($dir); return self::rmdir($dir,false); } //非强制删除 else { if(rmdir($dir)) { return true; } else { return false; } } } } /** * @brief 获取文件类型 * @param String $fileName 文件名 * @return String $filetype 文件类型 * @note 如果文件不存在,返回false,如果文件后缀名不在识别列表之内,返回NULL,对于docx及elsx格式文档识别在会出现识别为ZIP格式的错误,这是office2007的bug目前尚未修复,请谨慎使用 */ public static function getFileType($fileName) { $filetype = null; if(!is_file($fileName)) { return false; } $fileRes = fopen($fileName,"rb"); if(!$fileRes) { return false; } $bin= fread($fileRes, 2); fclose($fileRes); if($bin != null) { $strInfo = unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $typelist = self::getTypeList(); foreach($typelist as $val) { if(strtolower($val[0]) == strtolower($typeCode)) { if($val[0] == 8075) { return array('zip','docx','xlsx'); } else { return $val[1]; } } } } return $filetype; } /** * @brief 获取文件类型映射关系 * @return array 文件类型映射关系数组 */ public static function getTypeList() { return array( array('255216','jpg'), array('13780','png'), array('7173','gif'), array('6677','bmp'), array('6063','xml'), array('60104','html'), array('208207','xls/doc'), array('8075','zip'), array('8075','docx'), array('8075','xlsx'), array("8297","rar"), ); } /** * @brief 获取文件大小 * @param String $fileName 文件名 * @return Int 文件大小的字节数,如果文件无效则返回 NULL */ public static function getFileSize($fileName) { return is_file($fileName) ? filesize($fileName):null; } /** * @brief 检测文件夹是否为空 * @param String $dir 路径地址 * @return bool true:$dir为空目录; false:$dir为非空目录; */ public static function isEmptyDir($dir) { if(is_dir($dir)) { $isEmpty = true; $dirRes = opendir($dir); while(false !== ($fileName = readdir($dirRes))) { if($fileName!='.' && $fileName!='..') { $isEmpty = false; break; } } closedir($dirRes); return $isEmpty; } } /** * @brief 释放文件锁定 */ public function save() { flock($this->resource,LOCK_UN); } /** * @brief 获取文件扩展名 * @param String $fileName 文件名 * @return String 文件后缀名 */ public static function getFileSuffix($fileName) { $fileInfoArray = pathinfo($fileName); return $fileInfoArray['extension']; } /** * @brief 析构函数,释放文件连接句柄 */ function __destruct() { if(is_resource($this->resource)) { fclose($this->resource); } } }