欢迎光临
我们一直在努力

文件上传——终结者Ⅰ-PHP教程,PHP应用

建站超值云服务器,限时71元/月

php代码:——————————————————————————–

<?

/*

————————————————————————————

类名:lwguploadandquery

说明:sql语句执行和文件上传类,是lwgupload类的子类

作者:龙卫国

网络user:lwg888

邮箱:lwg888@163.com

使用、修改、传播请保留作者信息

————————————————————————————

*/

require_once(dirname(__file__)."/lwgdb.inc.php");//数据库连接与查询类

require_once(dirname(__file__)."/lwgupload.inc.php");//父类

class lwguploadandquery extends lwgupload{

var $sql;//sql语句

var $url;//文件上传成功后转向的url

//重要提示:sql语句写法:

//$sql=sprintf("update test1 set name=%s, image1=%s, image2=%s where id=%d",$_post[name],"image1_name","image2_name",$_post[id]);

//"image1_name","image2_name"中,image1和image2是文件域的name或id,后面加了"_name"后缀,便于下面找到它并修改它

function lwguploadandquery($sql="",$uploadfield="",$url="",$uploadpath="",$maxsize="",$ftype="all"){

$this->sql=$sql;

$this->url=$url;

$this->lwgupload($uploadfield,$uploadpath,$maxsize,$ftype);

}

function run(){

if (empty($this->sql))return $this->output("没有可执行的sql语句。");

if (!is_array($this->uploadfield))$this->uploadfield=array($this->uploadfield);//如果不为数组改为数组,便于后面代码的简化

if (!is_array($this->maxsize))$this->maxsize=array($this->maxsize);//同上

if (!is_array($this->ftype))$this->ftype=array($this->ftype);//同上

$totaluploadfield=count($this->uploadfield);

for ($i=0;$i<$totaluploadfield;$i++){

$uploadfile=$_files[$this->uploadfield[$i]][tmp_name];

$file_name=$_files[$this->uploadfield[$i]][name];

$file_old=$_post[$this->uploadfield[$i]._old];//用在更新中,表示上传文件所对应的原有文件

$file_del=$_post[$this->uploadfield[$i]._del];//原有文件是否标记为删除

if ($uploadfile!=""&&$file_name!=""){

//表示需要上传,即文件域里填入了任何字符

$uploadfield[]=$this->uploadfield[$i];

//取得新的上传字段,因为文件域中没有填入任何字符的不用上传

$maxsize[]=(!empty($this->maxsize[$i]))?$this->maxsize[$i]:$this->maxsize[0];

//取得相对应的大小限制值

$ftype[]=(!empty($this->ftype[$i]))?$this->ftype[$i]:$this->ftype[0];

//取得相对应的类型限制值

$newfile=$this->uploadpath."/".$file_name;

//上传后的文件地址

$insertname=$file_name;

//修改sql语言时要用到,将mysql表中对应字段的值改为目前上传文件名

if ($file_old!="")$oldfile[]=$this->uploadpath."/".sprintf(%s,$file_old);

//用在更新中,取得原有文件地址,当新文件上传后删除旧文件

}

else if ($file_old!=""){

//表示不需要上传,即文件域里没有填入任何字符,但是有旧文件

if ($file_del=="true"){

//如果旧文件标记为删除

$insertname="";

//修改sql语言时要用到,将mysql表中对应字段的值改为空

$oldfile[]=$this->uploadpath."/".sprintf(%s,$file_old);

}

else $insertname=sprintf(%s,$file_old);

//既不用上传也不用删除,修改sql语言时要用到,将mysql表中对应字段的值改为原文件名

}

else $insertname="";

//既不用上传也没有原文件,修改sql语言时要用到,将mysql表中对应字段的值改为空

$this->sql=str_replace($this->uploadfield[$i]."_name", $insertname, $this->sql);

//修改sql语句

}

$this->uploadfield=$uploadfield;

$this->maxsize=$maxsize;

$this->ftype=$ftype;

if (count($uploadfield)>0){

if (!$this->test($oldfile))return false;

}

//测试能否全部上传

if (count($oldfile)>0)$this->err_del((count($oldfile)-1),$oldfile);

//通过测试后删除标记为删除的原文件

$db=new lwgdb();//数据库连接与查询类

if (count($uploadfield)==0){

if(!$db->query($this->sql)){

return $this->output("错误:no1,提交失败,请重试。");

//no1表示没有上传文件,且sql语句执行失败

}

else $this->debugstr.="sql语句:".$this->sql."执行成功 <br>";

}

else {

if ($this->upload()){

if(!$db->query($this->sql)){

$this->err_del(count($uploadfield)-1,$this->newfile);

//删除上传了的文件

return $this->output("错误:no2,提交失败,请重试。");

//no1表示上传文件后,sql语句执行失败

}

else $this->debugstr.="sql语句:".$this->sql."执行成功 <br>";

}

}

if (!empty($this->url))header("location:".$this->url);

}

}

/*

——–使用方法————————————————

$uploadname=array("image1","image2");

$sql=sprintf("update test1 set name=%s, image1=%s, image2=%s where id=%d",$_post[name],$uploadname[0]._name,$uploadname[1]._name,$id);

$obj=new lwguploadandquery($sql,$uploadname,,upload,array(40960,2048),array(jpg,gif,all));

$obj->run();

或:

$obj=new lwguploadandquery($sql,$uploadname,,upload,array(40960,2048),array(jpg,gif,all));

$obj->uploadname=array("image1","image2");

$obj->sql=sprintf("update test1 set name=%s, image1=%s, image2=%s where id=%d",$_post[name],$uploadname[0]._name,$uploadname[1]._name,$id);

$obj->url="http://xxxxxx.com";

$obj->uploadpath="upload/image";

$obj->maxsize=1024*5;

$obj->ftype=swf;

$obj->run();

—————————————————————-

*/

?>

——————————————————————————–

<?

/*

————————————————————————————

类名:lwgupload

说明:多文件上传类

作者:龙卫国

网络user:lwg888

邮箱:lwg888@163.com

使用、修改、传播请保留作者信息

————————————————————————————

*/

class lwgupload{

//————-可以设置值的变量————————

var $uploadfield;//上传文件的字段名

var $maxsize;//限制上传文件的大小

var $file_old;//需要删除的旧文件

var $uploadpath;//文件的上传路径

var $ftype;//限制上传文件的类型

var $debug=true;//是否显示调试或错误信息

//————用来获取值的变量—————————

var $uploadfile;//上传后的临时文件

var $file_name;//文件名

var $file_size;//文件的大小

var $file_size_format;//格式化后的$file_size

var $file_type;//文件类型

var $debugstr="";//记录调试信息

var $err="";//记录错误信息

//构造函数

//$uploadfield 上传文件的字段名,上传多个文件时可以是数组

//$uploadpath 文件的上传路径,不能为数组

//$maxsize 限制上传文件的大小,上传多个文件时可以是数组,为不同的文件限制不同大小

//$ftype 限制上传文件的类型,上传多个文件时可以是数组,为不同的文件限制不同类型

//$ftype 为‘all’时为不限制类型

//使用时可以将$ftype的值设为array(jpg,gif,png,swf,all)表示为三个上传文件限制类型。第一个文件必须是jpg或gif或png,第二个必须是swf,第三个为任意类型

function lwgupload($uploadfield="",$uploadpath="",$maxsize="",$ftype="all"){

$this->uploadfield=$uploadfield;

$this->uploadpath=$uploadpath;

$this->maxsize=$maxsize;

$this->ftype=$ftype;

}

//test()用来测试能否全部上传,否则一个也不要上传

//$oldfile表示要删除的文件,用在更新中,删除旧的上传新的

function test($oldfile=){

if ($this->uploadfield=="")return;

if (empty($this->uploadpath))$this->uploadpath=dirname($_server[path_translated])."/upload";

if (empty($this->maxsize))$this->maxsize=1048576;

if (!is_array($this->uploadfield))$this->uploadfield=array($this->uploadfield);

//如果不为数组改为数组,便于后面代码的简化

$total_upload=count($this->uploadfield);//获得总字段数

if (!is_array($this->maxsize))$this->maxsize=array($this->maxsize);//如果不为数组改为数组,便于后面代码的简化

if (!is_array($this->ftype))$this->ftype=array($this->ftype);//同上

//如果没有相应路径则建立之

if (!file_exists($this->uploadpath)){

if (!mkdir($this->uploadpath,0700))return output("错误!请手动建立有效路径。");

}

include_once(dirname(__file__)."/lwgfiletype.inc.php");

//该文件包含了数组变量$filetype,记录大多数文件类型对应的扩展名

set_time_limit(60);//设置超时为60秒

$needupload=array();//经测试可以上传的文件

for ($i=0;$i<$total_upload;$i++){

$this->uploadfile[$i]=$_files[$this->uploadfield[$i]][tmp_name]; //临时文件

$this->file_name[$i]=$_files[$this->uploadfield[$i]][name]; //文件名

$this->file_type[$i]=$_files[$this->uploadfield[$i]][type]; //类型

$this->file_lname[$i]=strtolower(substr( strrchr($this->file_name[$i], "." ), 1 )); //扩展名

$this->file_size[$i]=$_files[$this->uploadfield[$i]][size]; //大小

$this->file_old[$i]=$_post[$this->uploadfield[$i]._old]; //需要删除的文件

$this->newfile[$i]=$this->uploadpath."/".$this->file_name[$i];//上传后的地址

$maxsize=(!empty($this->maxsize[$i]) && $this->maxsize[$i]>0)?$this->maxsize[$i]:$this->maxsize[0];

$maxsize_value=$this->format_maxsize($maxsize);//将$maxsize格式化

$thetype=(!empty($this->ftype[$i]))?$this->ftype[$i]:$this->ftype[0];

$ftype=array();

$lname=array();

if ($thetype!="all"){

$tmp_type=explode(",",$thetype);

for ($n=0;$n<sizeof($tmp_type);$n++){

$tmp_t=trim($tmp_type[$n]);

if (!empty($tmp_t)){

$s_tmp=strtolower($tmp_t);

$ftype[]=$filetype[$s_tmp];

$lname[]=$s_tmp;

}

}

}

//分析限制当前类型的参数

if (($this->file_size[$i]==0)||($this->uploadfile[$i]=="")){

return $this->output($this->uploadfield[$i]."上传了无效文件或0字节文件。");

}

if ($thetype!="all" && !in_array($this->file_type[$i],$ftype) && !in_array($this->file_lname[$i],$lname)){

return $this->output("对不起!上传文件格式只能是".$thetype."。");

}

if ($this->file_size[$i] > $maxsize){

return $this->output("对不起!文件".$this->file_name[$i]."大于".$maxsize_value.",上传失败。\n请减小文件到".$maxsize_value."之内,然后再试。");

}

if (file_exists($this->newfile[$i])){

if ($oldfile=="" || ($oldfile!="" && !in_array($this->newfile[$i],$oldfile)))return $this->output("对不起!文件".$this->file_name[$i]."已经存在,上传失败。请更改文件名,然后再试。");

//$oldfile表示要删除的文件,虽然要上传的文件存在,但它将要被删除,因此还是可以上传

}

if (in_array($this->file_name[$i],$needupload)){

//如果两个以上的上传字段上传相同的文件是不允许的

return $this->output("对不起!文件".$this->file_name[$i]."重复,上传失败。请更改文件名,然后再试。");

}

$needupload[]=$this->file_name[$i];

}

set_time_limit(30);//设置超时为30秒

return true;

}

//测试过关后可以上传

function upload(){

if ($this->uploadfield=="")return false;

$total_upload=count($this->uploadfield);

for ($i=0;$i<$total_upload;$i++){

$this->file_size_format[$i]=$this->format_maxsize($this->file_size[$i]);

if (@move_uploaded_file($this->uploadfile[$i],$this->newfile[$i]))

$this->debugstr.="文件".$this->file_name[$i]."(".$this->file_size_format[$i].")上传成功。<br>";

else {

if ($i>0)$this->err_del(($i-1),$this->newfile);

//如果有一个上传失败,则删除所有已上传的文件

return $this->output("对不起!文件".$this->file_name[$i]."上传失败。请重试。");

}

}

return true;

}

//格式化文件大小数字

function format_maxsize($value){

if ($value<1024)$maxsize_value = $value."字节";

elseif ($value<1024*1024)$maxsize_value = number_format((double)($value/1024),2)."kb";

else $maxsize_value = number_format((double)($value/(1024*1024)),2)."mb";

return $maxsize_value;

}

//出错后删除已上传的文件

function err_del($i,$thefile){

while ($i>=0){

if (@unlink($thefile[$i])!=false)$this->debugstr.="文件".$thefile[$i]."删除成功 <br>";

$i–;

}

}

//记录和输出错误信息

function output($msg){

if ($msg!="")$this->err=$msg;

if ($this->debug)echo "<script language=\"javascript\" type=\"text/javascript\">alert(\"".$msg."\");history.go(-1)</script>";

return false;

}

}

/*

—————-使用方法———————————————–

$obj=lwgupload("image1","",1024*2,"all");

if ($obj->test())$obj->upload();

————————————————————————-

*/

?>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 文件上传——终结者Ⅰ-PHP教程,PHP应用
分享到: 更多 (0)

相关推荐

  • 暂无文章