一个简单的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"] – 由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。