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 ;
}
}?>