php+文件上传类的代码,php文件上传类 php文件上传代码

段干高歌
2023-12-01

一个简单的php文件上传的类,在整理 php 类时发现的一个图片处理类,PHP 处理图片的类已经很多了,有单独处理图片的,也有加水印的,也有生成图片的,总之,在 PHP 当中,处理图片已经很简单了,甚至在一些小型的应用中,直接应用 PHP 的面向过程就可以实现图片的上传过程,当然,为了程序的规范,我们还是有必要使用PHP的面向对象的.

下面的这个PHP文件的上传类主要是用来上传文件的,包括图片,视频,word文档的,其实这里建议用来处理图片,推荐的主要原因是这个类很规范,基本上所有的上传参数都可以在类里面进行定义,而不需要在 php.ini 里面进行修改,代码如下:

classfiles{

/**

* upload

*

* 文件上传

*

* @param String $path e.g. Zend_Registry::get('upload')

* @param Array $files e.g. $_FILES['Filedata']

* @param String $dir e.g. $_POST['dir']

*

* return Array $msg e.g. if($msg['error'])

*/

staticfunctionupload($path,$files,$dir)

{

$msg=array();

//文件保存目录路径

$save_path=$path;

//文件保存目录URL

$save_url=$path;

//定义允许上传的文件扩展名

$ext_arr=array(

'image'=>array('gif','jpg','jpeg','png','bmp'),

'flash'=>array('swf','flv'),

'media'=>array('swf','flv','mp3','wav', 'wm

a', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),

'file'=>array('doc','docx','xls','xlsx', 'pp

t', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),

);

//最大文件大小

$max_size= 1000000;

$save_path=realpath($save_path) .'/';

//有上传文件时

if(emptyempty($_FILES) === false) {

//原文件名

$file_name=$files['name'];

//服务器上临时文件名

$tmp_name=$files['tmp_name'];

//文件大小

$file_size=$files['size'];

//目录名

$dir_name=emptyempty($dir) ?'image': trim($dir);

//检查文件名

if(!$file_name) {

$msg['error'] ="请选择文件。";

}

//检查目录

elseif(@is_dir($save_path) === false) {

$msg['error'] ="上传目录不存在。请联系管理员";

}

//检查目录写权限

elseif(@is_writable($save_path) === false) {

$msg['error'] ="上传目录没有写权限。请联系管理员";

}

//检查是否已上传

elseif(@is_uploaded_file($tmp_name) === false) {

$msg['error'] ="临时文件可能不是上传文件。请重新上传";

}

//检查文件大小

elseif($file_size>$max_size) {

$msg['error'] ="上传文件大小超过限制。";

}

//检查目录名

elseif(emptyempty($ext_arr[$dir_name])) {

$msg['error'] ="目录名不正确。";

}

else

{

//获得文件扩展名

$temp_arr=explode(".",$file_name);

$file_ext=array_pop($temp_arr);

$file_ext= trim($file_ext);

$file_ext=strtolower($file_ext);

//检查扩展名

if(in_array($file_ext,$ext_arr[$dir_name]) === false) {

$msg['error'] = "上传文件扩展名是不允许的扩展名。

n只允许" . implode(",", $ext_arr[$dir_name]) . "格式。";

}

else

{

//创建文件夹

$dbsave="";//数据库中存放的路径

if($dir_name!=='') {

$save_path.=$dir_name."/";

$save_url.=$dir_name."/";

$dbsave=$dir_name.'/';

if(!file_exists($save_path)) {

mkdir($save_path);

}

}

$y=date("Y");

$m=date("m");

$d=date("d");

$save_path.=$y."/";

$save_url.=$y."/";

$dbsave.=$y.'/';

if(!file_exists($save_path)) {

mkdir($save_path);

}

$save_path.=$m."/";

$save_url.=$m."/";

$dbsave.=$m.'/';

if(!file_exists($save_path)) {

mkdir($save_path);

}

$save_path.=$d."/";

$save_url.=$d."/";

$dbsave.=$d.'/';

if(!file_exists($save_path)) {

mkdir($save_path);

}

//新文件名

$new_file_name=date("YmdHis") .'_'. rand(1000

0, 99999) . '.'.$file_ext;

//移动文件

$file_path=$save_path.$new_file_name;

if(move_uploaded_file($tmp_name,$file_path) === false) {

$msg['error'] ="上传文件失败。";

}

//数据库最终存储的文件

$dbsave.=$new_file_name;

@chmod($file_path, 0644);

$file_url=$save_url.$new_file_name;

$msg['file_url'] =$file_url;

$msg['file_size'] =$file_size;

$msg['db_path'] =$dbsave;

}//检查扩展名

}//目录正确性

return$msg;

}

}

//文件上传

}

?>

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件,第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。

就像这样:

$_FILES["file"]["name"] – 被上传文件的名称

$_FILES["file"]["type"] – 被上传文件的类型

$_FILES["file"]["size"] – 被上传文件的大小,以字节计

$_FILES["file"]["tmp_name"] – 存储在服务器的文件的临时副本的名称

$_FILES["file"]["error"] – 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

 类似资料: