/** * @brief Éú³ÉËõÂÔͼ * @param string $image_url ͼƬ·¾¶ * @param int $width ͼƬ¿í¶È * @param int $height ͼƬ¸ß¶È */ public static function get($image_url, $width = 100, $height = 100) { if ($image_url == '') { return ''; } $fileExt = IFile::getFileSuffix($image_url); $extName = "_{$width}_{$height}"; $thumbFileName = str_replace('.' . $fileExt, $extName . '.' . $fileExt, $image_url); if (is_file(IWeb::$app->getRuntimePath() . $thumbFileName) == false) { PhotoUpload::thumb($image_url, $width, $height, "_{$width}_{$height}", IWeb::$app->getRuntimePath() . dirname($image_url)); } return 'runtime/' . IWeb::$app->controller->theme . '/' . $thumbFileName; }
/** * @brief 开始执行上传 * @return array 包含上传成功信息的数组 * $file = array( * name 如果上传成功,则返回上传后的文件名称,如果失败,则返回客户端名称 * size 上传附件大小 * fileSrc 上传文件完整路径 * dir 上传目录 * ininame 上传图片名 * flag -1:文件类型不允许; -2:文件大小超出限制; 1:上传成功 * ext 上传附件扩展名 * ); */ public function execute() { //总的文件上传信息 $info = array(); foreach ($_FILES as $field => $file) { $fileInfo = array(); //不存在上传的文件名 if (!isset($_FILES[$field]['name']) || $_FILES[$field]['name'] == '' || !isset($_FILES[$field]['tmp_name'])) { continue; } //上传控件为数组格式 file[]格式 if (is_array($_FILES[$field]['name'])) { $keys = array_keys($_FILES[$field]['name']); foreach ($keys as $key) { if (!isset($_FILES[$field]['name'][$key]) || $_FILES[$field]['name'][$key] == '') { continue; } //获取扩展名 $fileext = IFile::getFileType($_FILES[$field]['tmp_name'][$key]); if (is_array($fileext) || $fileext == null) { $fileext = IFile::getFileSuffix($_FILES[$field]['name'][$key]); } /*开始上传文件*/ //(1)上传类型不符合 if (!in_array($fileext, $this->allowType)) { $fileInfo[$key]['name'] = $_FILES[$field]['name'][$key]; $fileInfo[$key]['flag'] = -1; } else { if ($_FILES[$field]['size'][$key] > $this->maxsize) { $fileInfo[$key]['name'] = $_FILES[$field]['name'][$key]; $fileInfo[$key]['flag'] = -2; } else { //修改图片状态值 $fileInfo[$key]['name'] = ITime::getDateTime('Ymdhis') . mt_rand(100, 999) . '.' . $fileext; $fileInfo[$key]['dir'] = $this->dir; $fileInfo[$key]['size'] = $_FILES[$field]['size'][$key]; $fileInfo[$key]['ininame'] = $_FILES[$field]['name'][$key]; $fileInfo[$key]['ext'] = $fileext; $fileInfo[$key]['fileSrc'] = $fileInfo[$key]['dir'] . $fileInfo[$key]['name']; if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) { if (move_uploaded_file($_FILES[$field]['tmp_name'][$key], $this->dir . $fileInfo[$key]['name'])) { if (file_exists($_FILES[$field]['tmp_name'][$key])) { IFile::unlink($_FILES[$field]['tmp_name'][$key]); } $fileInfo[$key]['flag'] = 1; } } } } } } else { if ($_FILES[$field]['name'] == '' || $_FILES[$field]['tmp_name'] == '') { continue; } //获取扩展名 $fileext = IFile::getFileType($_FILES[$field]['tmp_name']); if (is_array($fileext) || $fileext == null) { $fileext = IFile::getFileSuffix($_FILES[$field]['name']); } /*开始上传文件*/ //(1)上传类型不符合 if (!in_array($fileext, $this->allowType)) { $fileInfo[0]['name'] = $_FILES[$field]['name']; $fileInfo[0]['flag'] = -1; } else { if ($_FILES[$field]['size'] > $this->maxsize) { $fileInfo[0]['name'] = $_FILES[$field]['name']; $fileInfo[0]['flag'] = -2; } else { //修改图片状态值 $fileInfo[0]['name'] = ITime::getDateTime('Ymdhis') . mt_rand(100, 999) . '.' . $fileext; $fileInfo[0]['dir'] = $this->dir; $fileInfo[0]['size'] = $_FILES[$field]['size']; $fileInfo[0]['ininame'] = $_FILES[$field]['name']; $fileInfo[0]['ext'] = $fileext; $fileInfo[0]['fileSrc'] = $fileInfo[0]['dir'] . $fileInfo[0]['name']; if (is_uploaded_file($_FILES[$field]['tmp_name'])) { if (move_uploaded_file($_FILES[$field]['tmp_name'], $this->dir . $fileInfo[0]['name'])) { if (file_exists($_FILES[$field]['tmp_name'])) { IFile::unlink($_FILES[$field]['tmp_name']); } $fileInfo[0]['flag'] = 1; } } } } } $info[$field] = $fileInfo; } return $info; }
/** * @brief 生成缩略图 * @param string $fileName 生成缩略图的目标文件名 * @param int $width 缩略图的宽度 * @param int $height 缩略图的高度 * @param string $ExtName 缩略图文件名附加值 * @return string 缩略图文件名 */ public static function thumb($fileName, $width = 200, $height = 200, $ExtName = '_thumb') { if (is_file($fileName)) { //获取原图信息 list($imgWidth, $imgHeight) = getImageSize($fileName); //计算宽高比例,获取缩略图的宽度和高度 if ($imgWidth >= $imgHeight) { $thumbWidth = $width; $thumbHeight = $width / $imgWidth * $imgHeight; } else { $thumbWidth = $height / $imgHeight * $imgWidth; $thumbHeight = $height; } //生成$fileName文件图片资源 $thumbRes = self::createImageResource($fileName); $thumbBox = imageCreateTrueColor($width, $height); //填充补白 $padColor = imagecolorallocate($thumbBox, 255, 255, 255); imagefilledrectangle($thumbBox, 0, 0, $width, $height, $padColor); //拷贝图像 imagecopyresampled($thumbBox, $thumbRes, ($width - $thumbWidth) / 2, ($height - $thumbHeight) / 2, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight); //生成缩略图文件名 $fileExt = IFile::getFileSuffix($fileName); $thumbFileName = str_replace('.' . $fileExt, $ExtName . '.' . $fileExt, $fileName); //生成图片文件 $result = self::createImageFile($thumbBox, $thumbFileName); if ($result == true) { return $thumbFileName; } else { return null; } } else { return null; } }
/** * @brief 开始执行上传 * @return array 包含上传成功信息的数组 * $file = array( * name 如果上传成功,则返回上传后的文件名称,如果失败,则返回客户端名称 * size 上传附件大小 * fileSrc 上传文件完整路径 * dir 上传目录 * ininame 上传图片名 * flag -1:上传的文件超出服务器限制; -2:上传的文件超出浏览器限制; -3:上传的文件被部分上传; -4:没有找到上传的文件; -5:上传的文件丢失; * -6:上传的临时文件没有正确写入; -7:扩展名不允许上传; -8:上传的文件超出了程序的限制; -9:上传的文件中有木马病毒 ; 1:上传成功; * ext 上传附件扩展名 * ); */ public function execute() { //总的文件上传信息 $info = array(); foreach ($_FILES as $field => $file) { $fileInfo = array(); //不存在上传的文件名 if (!isset($_FILES[$field]['name']) || $_FILES[$field]['name'] == '') { continue; } //上传控件为数组格式 file[]格式 if (is_array($_FILES[$field]['name'])) { $keys = array_keys($_FILES[$field]['name']); foreach ($keys as $key) { $fileInfo[$key]['name'] = $_FILES[$field]['name'][$key]; //上传出现错误 if (isset($_FILES[$field]['error'][$key]) && $_FILES[$field]['error'][$key] != 0) { $fileInfo[$key]['flag'] = 0 - $_FILES[$field]['error'][$key]; } else { //获取扩展名 $fileext = IFile::getFileType($_FILES[$field]['tmp_name'][$key]); if (is_array($fileext) || $fileext == null) { $fileext = IFile::getFileSuffix($_FILES[$field]['name'][$key]); } //图片木马检测 if (in_array($fileext, $this->checkType) && !IFilter::checkHex($_FILES[$field]['tmp_name'][$key])) { $fileInfo[$key]['flag'] = -9; } else { /*开始上传文件*/ //(1)上传类型不符合 if (!in_array($fileext, $this->allowType)) { $fileInfo[$key]['flag'] = -7; } else { if ($_FILES[$field]['size'][$key] > $this->maxsize) { $fileInfo[$key]['flag'] = -8; } else { //修改图片状态值 $fileInfo[$key]['name'] = ITime::getDateTime('Ymdhis') . mt_rand(100, 999) . '.' . $fileext; $fileInfo[$key]['dir'] = $this->dir; $fileInfo[$key]['size'] = $_FILES[$field]['size'][$key]; $fileInfo[$key]['ininame'] = $_FILES[$field]['name'][$key]; $fileInfo[$key]['ext'] = $fileext; $fileInfo[$key]['fileSrc'] = $fileInfo[$key]['dir'] . $fileInfo[$key]['name']; $fileInfo[$key]['flag'] = 1; if ($this->isForge == false) { if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) { IFile::mkdir($this->dir); move_uploaded_file($_FILES[$field]['tmp_name'][$key], $this->dir . $fileInfo[$key]['name']); } } else { IFile::xcopy($_FILES[$field]['tmp_name'][$key], $this->dir . $fileInfo[$key]['name']); } } } } } } } else { $fileInfo[0]['name'] = $_FILES[$field]['name']; //上传出现错误 if (isset($_FILES[$field]['error']) && $_FILES[$field]['error'] != 0) { $fileInfo[0]['flag'] = 0 - $_FILES[$field]['error']; } else { //获取扩展名 $fileext = IFile::getFileType($_FILES[$field]['tmp_name']); if (is_array($fileext) || $fileext == null) { $fileext = IFile::getFileSuffix($_FILES[$field]['name']); } //图片木马检测 if (in_array($fileext, $this->checkType) && !IFilter::checkHex($_FILES[$field]['tmp_name'])) { $fileInfo[0]['flag'] = -9; } else { /*开始上传文件*/ //(1)上传类型不符合 if (!in_array($fileext, $this->allowType)) { $fileInfo[0]['flag'] = -7; } else { if ($_FILES[$field]['size'] > $this->maxsize) { $fileInfo[0]['flag'] = -8; } else { //修改图片状态值 $fileInfo[0]['name'] = ITime::getDateTime('YmdHis') . mt_rand(100, 999) . '.' . $fileext; $fileInfo[0]['dir'] = $this->dir; $fileInfo[0]['size'] = $_FILES[$field]['size']; $fileInfo[0]['ininame'] = $_FILES[$field]['name']; $fileInfo[0]['ext'] = $fileext; $fileInfo[0]['fileSrc'] = $fileInfo[0]['dir'] . $fileInfo[0]['name']; $fileInfo[0]['flag'] = 1; if ($this->isForge == false) { if (is_uploaded_file($_FILES[$field]['tmp_name'])) { IFile::mkdir($this->dir); move_uploaded_file($_FILES[$field]['tmp_name'], $this->dir . $fileInfo[0]['name']); } } else { IFile::xcopy($_FILES[$field]['tmp_name'], $this->dir . $fileInfo[0]['name']); } } } } } } $info[$field] = $fileInfo; } return $info; }
private function checkIterance($file, $photoObj) { //如果关闭了图片重复提交机制 if ($this->iterance == false) { return null; } $fileMD5 = null; //上传图片的md5值(默认) $photoRow = array(); //图库里照片信息(默认) $result = array(); //结果 if (is_file($file)) { //生成文件md5码 $fileMD5 = md5_file($file); } if ($fileMD5 != null) { //根据md5值取得图像数据 $where = "id = '" . $fileMD5 . "'"; $photoRow = $photoObj->getObj($where); } //设置了缩略图 if (isset($photoRow['img'])) { if (is_file($photoRow['img'])) { $result['img'] = $photoRow['img']; $result['flag'] = 1; if ($this->thumbWidth && $this->thumbHeight && $this->thumbKey) { foreach ($this->thumbWidth as $thumbWidth_Key => $thumbWidth_Val) { //获取此宽度和高度应有的缩略图名 $fileExt = IFile::getFileSuffix($photoRow['img']); $thumbFileName = str_replace('.' . $fileExt, '_' . $this->thumbWidth[$thumbWidth_Key] . '_' . $this->thumbHeight[$thumbWidth_Key] . '.' . $fileExt, $photoRow['img']); if (is_file($thumbFileName)) { $result['thumb'][$this->thumbKey[$thumbWidth_Key]] = $thumbFileName; unset($this->thumbKey[$thumbWidth_Key]); } } //重新生成系统中不存在的此宽高的缩略图 foreach ($this->thumbKey as $thumbKey_key => $thumbKey_val) { $thumbExtName = '_' . $this->thumbWidth[$thumbKey_key] . '_' . $this->thumbHeight[$thumbKey_key]; $thumbName = $this->thumb($photoRow['img'], $this->thumbWidth[$thumbKey_key], $this->thumbHeight[$thumbKey_key], $thumbExtName); $result['thumb'][$this->thumbKey[$thumbKey_key]] = $thumbName; } } return $result; } else { $photoObj->del('id = "' . $photoRow['id'] . '"'); return null; } } else { return null; } }