php文件上传类 php文件上传代码
一个简单的php文件上传的类,在整理 php 类时发现的一个图片处理类,PHP 处理图片的类已经很多了,有单独处理图片的,也有加水印的,也有生成图片的,总之,在 PHP 当中,处理图片已经很简单了,甚至在一些小型的应用中,直接应用 PHP 的面向过程就可以实现图片的上传过程,当然,为了程序的规范,我们还是有必要使用PHP的面向对象的.
下面的这个PHP文件的上传类主要是用来上传文件的,包括图片,视频,word文档的,其实这里建议用来处理图片,推荐的主要原因是这个类很规范,基本上所有的上传参数都可以在类里面进行定义,而不需要在 php.ini 里面进行修改,代码如下:
<?php class files{ /** * 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']) */ static function upload( $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 ( empty empty ( $_FILES ) === false) { //原文件名 $file_name = $files [ 'name' ]; //服务器上临时文件名 $tmp_name = $files [ 'tmp_name' ]; //文件大小 $file_size = $files [ 'size' ]; //目录名 $dir_name = empty empty ( $dir ) ? 'image' : trim( $dir ); //检查文件名 if (! $file_name ) { $msg [ 'error' ] = "请选择文件。" ; } //检查目录 else if (@ is_dir ( $save_path ) === false) { $msg [ 'error' ] = "上传目录不存在。请联系管理员" ; } //检查目录写权限 else if (@ is_writable ( $save_path ) === false) { $msg [ 'error' ] = "上传目录没有写权限。请联系管理员" ; } //检查是否已上传 else if (@ is_uploaded_file ( $tmp_name ) === false) { $msg [ 'error' ] = "临时文件可能不是上传文件。请重新上传" ; } //检查文件大小 else if ( $file_size > $max_size ) { $msg [ 'error' ] = "上传文件大小超过限制。" ; } //检查目录名 else if ( empty empty ( $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"] - 由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。
查看更多关于php文件上传类 php文件上传代码 - php类库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29565