ThinkPHP是国内比较流行的轻量级的PHP框架,它在国内流行的一个最主要的因素在于它的说明文档非常健全完善,以及它源码内的注释都是中文的,方便于英语能力较差的程序员学习.
图片上传在网站里是很常用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php)。方便于我们去实现图片上传功能.
1.我们首先需要创建一个表
<span 1</span> CREATE TABLE <span IF</span><span NOT EXISTS `tp_image` ( </span><span 2</span> `id` int(11) NOT <span NULL</span> AUTO_INCREMENT, <span 3</span> `image` varchar(200) NOT <span NULL</span>, <span 4</span> `create_time` int(11) NOT <span NULL</span>, <span 5</span> PRIMARY <span KEY</span><span (`id`) </span><span 6</span> ) ENGINE=MyISAM <span DEFAULT</span> CHARSET=utf8;
2.然后再conf文件里添加配置(最后一段配置是可选的,只是为了方便统一管理URL路径)
<?<span php </span><span return</span> <span array</span><span ( </span>'URL_MODEL' => 2, <span //</span><span 如果你的环境不支持PATHINFO 请设置为3</span> 'DB_TYPE' => 'mysql', 'DB_HOST' => 'localhost', 'DB_NAME' => 'thinkphp', 'DB_USER' => 'root', 'DB_PWD' => '', 'DB_PORT' => '3306', 'DB_PREFIX' => 'tp_', 'SHOW_PAGE_TRACE' =><span true</span>, <span //</span><span 显示页面调试明细</span> 'TMPL_PARSE_STRING' => <span array</span>( <span //</span><span 地址替换,用_UPLOAD_目录 代替 根目录下的Upload目录</span> '__UPLOAD__' => __ROOT__.'/Uploads',<span )</span>,<span ); </span>?>
3.添加一个Image模块(名字可以随便取)
<?<span php </span><span class</span> ImageAction <span extends</span><span Action{ </span><span /*</span><span * * 创建index 入口方法 </span><span */</span> <span public</span> <span function</span><span index(){ </span><span $image</span>=M('Image'<span ); </span><span $data</span>=<span $image</span>->order('create_time desc')->find(); <span //</span><span 获取最后上传图片</span> <span $this</span>->assign('data',<span $data</span><span ); </span><span $this</span>-><span display(); } </span>?>
4.创建相应index视图文件(index.html)
<!DOCTYPE html <span PUBLIC</span> "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style type="text/css"> <span #</span><span img{height:22px; border:#000 2px solid}</span> <span #</span><span button{height:30px; width:100px;}</span> </style> </head> <body> <div <span class</span>="result" >上传允许文件类型:gif png jpg 图像文件,并生成2张缩略图,其中大图带水印,生成后会删除原图。</div><br> <notempty name="data"><img src="__UPLOAD__/m_{<span $data</span alt="ThinkPHP图片上传_PHP教程" >.image}" /> <img src="__UPLOAD__/s_{<span $data</span alt="ThinkPHP图片上传_PHP教程" >.image}" /></notempty> <form action="__URL__/upload" method="post" enctype="multipart/form-data"> <input type="file" name="image" id="img"/> <input type="submit" value="上传" id="button"> </form> </body> </html>
5.选择图片,点击上传按钮后,会跳到Image模块的upload方法上,Image模块上现在还没有这个方法,于是我们创建它
<?<span php </span><span class</span> ImageAction <span extends</span><span Action{ </span><span /*</span><span * * 创建index 入口方法 </span><span */</span> <span public</span> <span function</span><span index(){ </span><span $image</span>=M('Image'<span ); </span><span $data</span>=<span $image</span>->order('create_time desc')->find(); <span //</span><span 获取最后上传图片</span> <span var_dump</span>(<span $data</span><span ); </span><span $this</span>->assign('data',<span $data</span><span ); </span><span $this</span>-><span display(); } <br /> </span><span //</span><span 如果上传的文件不为空,跳转到_upload方法</span> <span public</span> <span function</span><span upload(){ </span><span //</span><span 如果不为空</span> <span if</span>(!<span empty</span>(<span $_FILES</span><span )) { </span><span $this</span>-><span _upload(); } }</span>
6.如果提交的不是NULL,则跳到_upload方法上,此方法实现图片上传的功能
<?<span php </span><span class</span> ImageAction <span extends</span><span Action{ </span><span /*</span><span * * 创建index 入口方法 </span><span */</span> <span public</span> <span function</span><span index(){ </span><span $image</span>=M('Image'<span ); </span><span $data</span>=<span $image</span>->order('create_time desc')->find(); <span //</span><span 获取最后上传图片</span> <span var_dump</span>(<span $data</span><span ); </span><span $this</span>->assign('data',<span $data</span><span ); </span><span $this</span>-><span display(); } </span><span //</span><span 如果上传的文件不为空,跳转到_upload方法</span> <span public</span> <span function</span><span upload(){ </span><span //</span><span 如果不为空</span> <span if</span>(!<span empty</span>(<span $_FILES</span><span )) { </span><span $this</span>-><span _upload(); } } </span><span /*</span><span ** * 实现图片上传 </span><span */</span> <span public</span> <span function</span><span _upload(){ import(</span>'@.ORG.UploadFile'<span ); </span><span //</span><span 导入上传类</span> <span $upload</span> = <span new</span><span UploadFile(); </span><span //</span><span 设置上传文件大小</span> <span $upload</span>->maxSize = 3292200<span ; </span><span //</span><span 设置上传文件类型</span> <span $upload</span>->allowExts = <span explode</span>(',', 'jpg,gif,png,jpeg'<span ); </span><span //</span><span 设置附件上传目录</span> <span $upload</span>->savePath = './Uploads/'<span ; </span><span //</span><span 设置需要生成缩略图,仅对图像文件有效</span> <span $upload</span>->thumb = <span true</span><span ; </span><span //</span><span 设置引用图片类库包路径</span> <span $upload</span>->imageClassPath = '@.ORG.Image'<span ; </span><span //</span><span 设置需要生成缩略图的文件后缀</span> <span $upload</span>->thumbPrefix = 'm_,s_'; <span //</span><span 生产2张缩略图 //设置缩略图最大宽度</span> <span $upload</span>->thumbMaxWidth = '400,100'<span ; </span><span //</span><span 设置缩略图最大高度</span> <span $upload</span>->thumbMaxHeight = '400,100'<span ; </span><span //</span><span 设置上传文件规则</span> <span $upload</span>->saveRule = 'uniqid'<span ; </span><span //</span><span 删除原图</span> <span $upload</span>->thumbRemoveOrigin = <span true</span><span ; </span><span //</span><span 如果上传不成功</span> <span if</span> (!<span $upload</span>-><span upload()) { </span><span //</span><span 捕获上传异常</span> <span $this</span>->error(<span $upload</span>-><span getErrorMsg()); } </span><span else</span><span { </span><span //</span><span 取得成功上传的文件信息</span> <span $uploadList</span> = <span $upload</span>-><span getUploadFileInfo(); </span><span //</span><span 导入图片类</span> import('@.ORG.Image'<span ); </span><span //</span><span 给m_缩略图添加水印, Image::water('原文件路径','水印图片地址')</span> Image::water(<span $uploadList</span>[0]['savepath'] . 'm_' . <span $uploadList</span>[0]['savename'], APP_PATH.'Tpl/Public/Images/logo.png'<span ); </span><span //</span><span 图片名赋值给 字段image</span> <span $_POST</span>['image'] = <span $uploadList</span>[0]['savename'<span ]; } </span><span $model</span> = M('image'<span ); </span><span //</span><span 保存当前数据对象</span> <span $data</span>['image'] = <span $_POST</span>['image'<span ]; </span><span $data</span>['create_time'] =<span NOW_TIME; </span><span $list</span> = <span $model</span>->add(<span $data</span><span ); </span><span if</span> (<span $list</span> !== <span false</span><span ) { </span><span $this</span>->success('上传图片成功!'<span ); } </span><span else</span><span { </span><span $this</span>->error('上传图片失败!'<span ); } } } </span>?>
最后图片上传成功,生成两张缩略图:
需要说明的是:
ThinkPHP里自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php),要完整版的ThinkPHP包才有。
没有的话需要在Lib里创建一个文件夹(ORG),然后去官网下载扩展包把这两个文件放到ORG文件夹中。
我的是第二种情况