php文件上传程序
文章提供一款完整理的php文件上传程序实例代码,他可以上传图片并且把图片保存到1:按天存入目录 2:按月存入目录 ,还可以设置上传图片生成水印.
<!doctype html> <html> <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 { < formaction = "upfile.php"method = "post"enctype = "multipart/form-data"name = "myform"onsubmit = "return check()" > < inputtype = "file"name = "upfile"value = ""class = "text" > < inputtype = "submit"name = "up"value = "上传"class = "button" > < inputtype = "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($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($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($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; } }
教程网址:http://www.phprm.com/scxz/fs960.html
欢迎收藏∩_∩但请保留本文链接。