PHP.TP框架下商品项目的优化2-图片优化
图片存储、上传、显示优化
1、图片路径写进配置文件,当路径有变动时【因业务扩大,服务器存储图片空间不足等】,只需修改配置文件,而不用修改代码
2、封装显示、上传、删除函数,实现代码重用
【可类比其他类似的操作】
1、在/Common/Common/Conf/conf.php中,写入图片配置 C()
2、把显示图片showImage()的功能封装到/Common/Common/function.php中
//显示图片 function showImage($url, $width = '', $height = '') { $ic = C('IMAGE_CONFIG'); //读取配置文件 if($width) $width = "width='$width'"; //显示宽度(html代码) if($height) $height = "height='$height'"; echo "<img $width $height src='{$ic['viewPath']}$url' />"; }
在页面中显示图片
3、把上传图片uploadOne()的功能封装到/Common/Common/function.php中
function uploadOne($imgName, $dirName, $thumb = array()) { // 上传LOGO if(isset($_FILES[$imgName]) && $_FILES[$imgName]['error'] == 0) { $ic = C('IMAGE_CONFIG'); $upload = new \Think\Upload(array( 'rootPath' => $ic['rootPath'], 'maxSize' => $ic['maxSize'], 'exts' => $ic['exts'], ));// 实例化上传类 $upload->savePath = $dirName . '/'; // 图片二级目录的名称 // 上传文件 // 上传时指定一个要上传的图片的名称,否则会把表单中所有的图片都处理,之后再想其他图片时就再找不到图片了 $info = $upload->upload(array($imgName=>$_FILES[$imgName])); if(!$info) { return array( 'ok' => 0, 'error' => $upload->getError(), ); } else { $ret['ok'] = 1; $ret['images'][0] = $logoName = $info[$imgName]['savepath'] . $info[$imgName]['savename']; // 判断是否生成缩略图[$thumb数组存储尺寸] if($thumb) { $image = new \Think\Image(); // 循环生成缩略图 foreach ($thumb as $k => $v) { $ret['images'][$k+1] = $info[$imgName]['savepath'] . 'thumb_'.$k.'_' .$info[$imgName]['savename']; // 打开要处理的图片 $image->open($ic['rootPath'].$logoName); $image->thumb($v[0], $v[1])->save($ic['rootPath'].$ret['images'][$k+1]); } } return $ret; } } }
GoodsModel.class.php添加商品时_before_insert()使用
4、删除图片函数deleteImage()
function deleteImage($image = array()) { $savePath = C('IMAGE_CONFIG'); foreach ($image as $v) { unlink($savePath['rootPath'] . $v); } }
GoodsModel.class.php删除商品时_before_delete()使用