php文件上传程序
文章提供一款完整理的php文件上传程序实例代码,他可以上传图片并且把图片保存到1:按天存入目录 2:按月存入目录 ,还可以设置上传图片生成水印.
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd" > <html xmlns= "http://www.w3.org/1999/xhtml" > <head> <meta http-equiv= "content-type" content= "text/html; charset=gb2312" /> <title>上传文件程序</title> <style type= "text/css" > *{ font-size:12px; margin:0; padding:0; } a:link,a:visited{ text-decoration:none; color: #393 } a:hover{ text-decoration:underline; color:#0033cc } input.text{ border:1px solid #ccc;height:22px;line-height:22px;padding-left:5px;background:#fff;width:274px; } input.button{ background:#fff url(images/button.png);border:1px solid #9ea9c5;padding:2px 2px 0px 2px;margin-left:4px; margin-right:4px; } </style> <script language=javascript> function check() { var strfilename=document.myform.upfile.value; if (strfilename== "" ) { alert( "请选择要上传的文件" ); document.myform.upfile.focus(); return false; } } </script> </head> <body> <?php /*********************** 程序:上传文件 功能:上传文件、缩略图、加水印 ****************************/ include ( "common/upfiles.class.php" ); $path = "upload/coolsite" ; //文件上传路径 $mix = "smallimg" ; //缩略图路径(在upload下建立) $mark = "markimg" ; //加水引的图片存放路径(在upload下建立) $text = array ( "www.111cn.net" ); //水印内容 $oupload = new upfiles( $path , $mix , $mark ); //实例化类文件 if (isset( $_post [ 'up' ])){ if ( $_post [ 'urlid' ]== '1' ){ //上传图片 参数urlid 1:上传图片 2:上传其他文件.. $oupload ->tofile = true; //开启则只保存缩略图或者水印图,删除原图 $photo = $oupload ->upload( "upfile" ); //上传的文件域 $photourl = $oupload ->fileurl. "/" . $photo ; $newsmallimg = $oupload ->smallimg( $photo ); //缩略图功能 //$newmarkimg = $oupload->watermark($photo,$text); //水印功能 //echo $newsmallimg; //输出缩略图路径 //echo $newmark; //输出水印图路径 //echo "<img src='".$newsmallimg."' border='0'>"; //输出缩略图 //echo "<img src='".$newmark."' border='0'>"; //输出水印图 } else { $upfilename = $oupload ->upload( "upfile" ); //上传的文件域 } $strjs = "<script language=javascript>n" ; $strjs .= "parent.document.myform.upfile1.value='" . $newsmallimg . "'n" ; $strjs .= "parent.document.myform.upfile2.value='" . $photourl . "'n" ; $strjs .= "</script>n" ; echo $strjs ; //把上次文件路径附在upfile1、upfile2中去 } else { ?> <form action= "upfile.php" method= "post" enctype= "multipart/form-data" name= "myform" onsubmit= "return check()" > <input type= "file" name= "upfile" value= "" class = "text" ><input type= "submit" name= "up" value= "上传" class = "button" > <input type= "hidden" name= "urlid" value= "<?php echo $_get['urlid']?>" > </form> <?php }?> </body> </html> <? //upfiles.class.php /*========================= 上传类 upfiles.class.php ===========================*/ class upfiles { /*========================= //基本参数设置 ===========================*/ protected $annexfolder = "upload" ; //附件存放点,默认为:upload protected $dirtype = 2; //1:按天存入目录 2:按月存入目录 protected $smallfolder = "smallimg" ; //缩略图存放路径,注:必须是放在 $upload下的子目录,默认为:smallimg protected $markfolder = "markimg" ; //水印图片存放路径,注:必须是放在 $upload下的子目录,默认为:markimg protected $upfiletype = "jpg gif png rar zip" ; //上传的类型,默认为:jpg gif png rar zip protected $upfilemax = 102400; //上传大小限制,单位是"kb",默认为:1024kb protected $fonttype = "common/equinoxstd.otf" ; //水印字体库 protected $maxwidth = 800; //图片最大宽度 protected $maxheight = 600; //图片最大高度 /*========================= //初始化上传类 ===========================*/ public function __construct( $annexfolder , $smallfolder , $includefolder ) { switch ( $this ->dirtype) { case 1: $attach_subdir = 'day_' . date ( 'ymd' ); break ; case 2: $attach_subdir = 'month_' . date ( 'ym' ); break ; } $attach_dir = $annexfolder . '/' . $attach_subdir ; $attach_dir_small = $attach_dir . '/' . $smallfolder ; $attach_dir_mark = $attach_dir . '/' . $includefolder ; $this ->rootfolder = $annexfolder ; $this ->annexfolder = $attach_dir ; $this ->smallfolder = $attach_dir_small ; $this ->markfolder = $attach_dir_mark ; //$this->fonttype = $includefolder."/nasaliza.ttf"; } public function __get( $fileurl ){ $fileurl = $this ->annexfolder; return $fileurl ; } /*========================= //上传文件 ===========================*/ public function upload( $inputname ) { //检查文件夹是否存在 if (! file_exists ( $this ->annexfolder)){ if (! file_exists ( $this ->rootfolder)) @ mkdir ( $this ->rootfolder); if (! file_exists ( $this ->annexfolder)) @ mkdir ( $this ->annexfolder); if (! file_exists ( $this ->smallfolder)) @ mkdir ( $this ->smallfolder); if (! file_exists ( $this ->markfolder)) @ mkdir ( $this ->markfolder); } if (! file_exists ( $this ->smallfolder)){ @ mkdir ( $this ->smallfolder); } if (! file_exists ( $this ->markfolder)){ @ mkdir ( $this ->markfolder); } $this ->uptype = $_files [ $inputname ][ "type" ]; $this ->upname = $_files [ $inputname ][ "name" ]; $this ->uptmp_name = $_files [ $inputname ][ "tmp_name" ]; $this ->upsize = $_files [ $inputname ][ "size" ]; $this ->uperror = $_files [ $inputname ][ "error" ]; if ( $this ->uptype){ switch ( $this ->uptype) ///检查上传的类型 { case "image/pjpeg" : $fileextname = "jpg" ; break ; case "image/jpeg" : $fileextname = "jpg" ; break ; case "image/gif" : $fileextname = "gif" ; break ; case "image/x-png" : $fileextname = "png" ; break ; case "application/x-shockwave-flash" : $fileextname = "swf" ; break ; case "text/plain" : $fileextname = "txt" ; break ; case "application/msword" : $fileextname = "doc" ; break ; case "application/vnd.ms-excel" : $fileextname = "xls" ; break ; case "application/x-zip-compressed" : $fileextname = "zip" ; break ; case "audio/mpeg" : $fileextname = "mp3" ; break ; case "audio/x-ms-wma" : $fileextname = "wma" ; break ; case "application/pdf" : $fileextname = "pdf" ; break ; default : //如果不满足上述类型,那么上传文件被判断为格式不正确!! //$fileextname =strtolower(substr(strrchr(trim($this->upname), "."),1,4)); //$fileinfo=pathinfo($this->upname); //$fileextname=$fileinfo['extension']; $fileextname = "err" ; } } if (@ empty empty ( $this ->upname)) die ( "没有上传文件信息,请确认 <a href='javascript:history.go(-1);'>返回</a>" ); //$name = explode(".",$this->upname);//将上传前的文件以"."分开取得文件类型 //$filcount = count($name);//获得截取的数量 //$filtype = $name[$filcount-1];//取得文件的类型 $filtype = $fileextname ; if ( strpos ( $this ->upfiletype, $filtype ) === false){ die ( "上传文件类型仅支持 " . $this ->upfiletype. " 不支持 " . $filtype . " <a href='javascript:history.go(-1);'>返回</a>" ); } $filsize = $this ->upsize; if ( round ( $filsize /1024) > ( $this ->upfilemax*1024)) { die ( "上传文件超过 " . $this ->upfilemax. "kb" ); } $filename = "es_" . date ( "ymdhis" ). "." . $filtype ; //写入数据库的文件名 $fileurl = $this ->annexfolder. "/" . $filename ; //上传后的文件名称 $upfileok = move_uploaded_file( $this ->uptmp_name, $fileurl ); if ( $this ->uperror == 0 || $upfileok ) { echo "文件上传成功 <a href='javascript:history.go(-1);'>继续上传</a>" ; } else { die ( "上传文件失败,请确认你的上传文件不超过 $upfilemax kb 或上传时间超时" ); } return $filename ; //return $fileurl; } public function getinfo( $photo ) { $photo = $this ->annexfolder. "/" . $photo ; $imageinfo = getimagesize ( $photo ); $imginfo [ "width" ] = $imageinfo [0]; $imginfo [ "height" ] = $imageinfo [1]; $imginfo [ "type" ] = $imageinfo [2]; $imginfo [ "name" ] = basename ( $photo ); return $imginfo ; } /*========================= //缩略图 ===========================*/ public function smallimg( $photo , $width =250, $height =192) { $imginfo = $this ->getinfo( $photo ); $photo = $this ->annexfolder. "/" . $photo ; //获得图片源 $newname = substr ( $imginfo [ "name" ],0, strrpos ( $imginfo [ "name" ], "." )). "_thumb.jpg" ; //新图片名称 if ( $imginfo [ "type" ] == 1) { $img = imagecreatefromgif( $photo ); } elseif ( $imginfo [ "type" ] == 2) { $img = imagecreatefromjpeg( $photo ); } elseif ( $imginfo [ "type" ] == 3) { $img = imagecreatefrompng( $photo ); } else { $img = "" ; } if ( empty empty ( $img )) return false; $width = ( $width > $imginfo [ "width" ]) ? $imginfo [ "width" ] : $width ; $height = ( $height > $imginfo [ "height" ]) ? $imginfo [ "height" ] : $height ; $srcw = $imginfo [ "width" ]; $srch = $imginfo [ "height" ]; if ( $srcw * $width > $srch * $height ) { $height = round ( $srch * $width / $srcw ); } else { $width = round ( $srcw * $height / $srch ); } if (function_exists( "imagecreatetruecolor" )) { $newimg = imagecreatetruecolor( $width , $height ); imagecopyresampled( $newimg , $img , 0, 0, 0, 0, $width , $height , $imginfo [ "width" ], $imginfo [ "height" ]); } else { $newimg = imagecreate( $width , $height ); imagecopyresized( $newimg , $img , 0, 0, 0, 0, $width , $height , $imginfo [ "width" ], $imginfo [ "height" ]); } if ( $this ->tofile) { if ( file_exists ( $this ->smallfolder. "/" . $newname )){ @unlink( $this ->smallfolder. "/" . $newname ); } imagejpeg( $newimg , $this ->smallfolder. "/" . $newname ); return $this ->smallfolder. "/" . $newname ; } else { imagejpeg( $newimg ); } imagedestroy( $newimg ); imagedestroy( $img ); return $newname ; } /*========================= //加水印 ===========================*/ public function watermark( $photo , $text ) { $imginfo = $this ->getinfo( $photo ); $photo = $this ->annexfolder. "/" . $photo ; $newname = substr ( $imginfo [ "name" ], 0, strrpos ( $imginfo [ "name" ], "." )) . "_mark.jpg" ; //$newname = substr($imginfo["name"], 0, strrpos($imginfo["name"], ".")) . ".jpg"; switch ( $imginfo [ "type" ]) { case 1: $img = imagecreatefromgif( $photo ); break ; case 2: $img = imagecreatefromjpeg( $photo ); break ; case 3: $img = imagecreatefrompng( $photo ); break ; default : return false; } if ( empty empty ( $img )) return false; $width = ( $this ->maxwidth > $imginfo [ "width" ]) ? $imginfo [ "width" ] : $this ->maxwidth; $height = ( $this ->maxheight > $imginfo [ "height" ]) ? $imginfo [ "height" ] : $this ->maxheight; $srcw = $imginfo [ "width" ]; $srch = $imginfo [ "height" ]; if ( $srcw * $width > $srch * $height ) { $height = round ( $srch * $width / $srcw ); } else { $width = round ( $srcw * $height / $srch ); } if (function_exists( "imagecreatetruecolor" )) { $newimg = imagecreatetruecolor( $width , $height ); imagecopyresampled( $newimg , $img , 0, 0, 0, 0, $width , $height , $imginfo [ "width" ], $imginfo [ "height" ]); } else { $newimg = imagecreate( $width , $height ); imagecopyresized( $newimg , $img , 0, 0, 0, 0, $width , $height , $imginfo [ "width" ], $imginfo [ "height" ]); } $white = imagecolorallocate( $newimg , 255, 255, 255); $black = imagecolorallocate( $newimg , 0, 0, 0); $alpha = imagecolorallocatealpha( $newimg , 230, 230, 230, 80); //imagefilledrectangle($newimg, 0, $height-26, $width, $height, $alpha); //imagefilledrectangle($newimg, 13, $height-20, 15, $height-7, $black); imagettftext( $newimg , 14, 0, 20, $height -14, $white , $this ->fonttype, $text [0]); imagettftext( $newimg , 14, 0, 20, $height -6, $white , $this ->fonttype, $text [1]); if ( $this ->tofile) { if ( file_exists ( $this ->markfolder. "/" . $newname )){ @unlink( $this ->markfolder. "/" . $newname ); } imagejpeg( $newimg , $this ->markfolder. "/" . $newname ); if ( file_exists ( $this ->annexfolder. "/" . $newname )){ unlink( $this ->annexfolder. "/" . $newname ); } return $this ->markfolder. "/" . $newname ; } else { imagejpeg( $newimg ); } imagedestroy( $newimg ); imagedestroy( $img ); return $newname ; } }?>
查看更多关于php文件上传程序 - php上传下载的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29406