PHP多文件上传理解总结
上传文件HTML的输入标签FILE类型中的名称后要加[],作用是在HTML中向PHP建立数组,比如名称为pictures,多文件引用名称则为pictures[],实例代码如下:
< form action =]upload.php] method =]post] enctype =]multipart/form-data] > < p > < input type =]file] name =]pictures[]] /> < br /> < input type =]file] name =]pictures[]] /> < br /> < input type =]file] name =]pictures[]] /> < br /> < input type =]submit] value =]上传] /> </ p > </ form >手册中实例,选择文件后点击上传,代码如下:
<?php print_r($_FILES); ?>
查看源文件,代码如下:
Array ( [pictures] => Array ( [name] => Array ( [0] => file1.txt [1] => file2.txt [2] => file3.txt ) [type] => Array ( [0] => application/octet-stream [1] => application/octet-stream [2] => application/octet-stream ) [tmp_name] => Array ( [0] => D:EasyPHP\tmpphp47.tmp [1] => D:EasyPHP\tmpphp48.tmp [2] => D:EasyPHP\tmpphp49.tmp ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [size] => Array ( [0] => 94289 [1] => 65536 [2] => 102400 ) ) )假设名为 /file1.txt和 /file2.txt 的文件被提交,则 $_FILES['pictures']['name'][0] 的值将是 file1.txt,而 $_FILES['pictures']['name'][1] 的值将是 file2.txt。类似的,$_FILES['file2.txt']['size'][0] 将包含文件 file1.txt 的大小,有了上面信息了我们要实现多文件上传就简单了,代码如下:
<?php class upload { public $up_ext = array (), $up_max =5210, $up_dir ; private $up_name , $up_rename =true, $up_num =0, $up_files = array (), $up_ret = array (); function __construct( $name , $ext = array (), $rename =true) { if (! empty empty ( $name )) { $this ->up_name = $name ; ! empty empty ( $ext ) && $this ->up_ext = $ext ; $this ->up_rename = $rename ; $this ->up_dir = website_dirroot. $globals [ 'cfg_upload_path' ]; $this ->initupload(); } else { exit ( 'upload文件域名称为空,初始化失败!' ); } } private function initupload() { if ( is_array ( $_files [ $this ->up_name])) { $up_arr = count ( $_files [ $this ->up_name]); $up_all = count ( $_files [ $this ->up_name], 1); $up_cnt = ( $up_all - $up_arr ) / $up_arr ; for ( $i = 0; $i < $up_cnt ; $i ++) { if ( $_files [ $this ->up_name][ 'error' ][ $i ] != 4) { $this ->up_files[] = array ( 'tmp_name' => $_files [ $this ->up_name][ 'tmp_name' ][ $i ], 'name' => $_files [ $this ->up_name][ 'name' ][ $i ], 'type' => $_files [ $this ->up_name][ 'type' ][ $i ], 'size' => $_files [ $this ->up_name][ 'size' ][ $i ], 'error' => $_files [ $this ->up_name][ 'error' ][ $i ] ); } } $this ->up_num = count ( $this ->up_files); } else { if (isset( $_files [ $this ->up_name])) { $this ->up_files = array ( 'tmp_name' => $_files [ $this ->up_name][ 'tmp_name' ], 'name' => $_files [ $this ->up_name][ 'name' ], 'type' => $_files [ $this ->up_name][ 'type' ], 'size' => $_files [ $this ->up_name][ 'size' ], 'error' => $_files [ $this ->up_name][ 'error' ] ); $this ->up_num = 1; } else { exit ( '没找找到需要upload的文件!' ); } } $this ->chkupload(); } private function chkupload() { if ( empty empty ( $this ->up_ext)) { $up_mime = array ( 'image/wbmp' , 'image/bmp' , 'image/gif' , 'image/pjpeg' , 'image/x-png' ); foreach ( $this ->up_files as $up_file ) { $up_allw = false; foreach ( $up_mime as $mime ) { if ( $up_file [ 'type' ] == $mime ) { $up_allw = true; break ; } } ! $up_allw && exit ( '不允许上传' . $up_file [ 'type' ]. '格式的文件!' ); if ( $up_file [ 'size' ] / 1024 > $this ->up_max) { exit ( '不允许上传大于 ' . $this ->up_max. 'k 的文件!' ); } } } else { foreach ( $this ->up_files as $up_file ) { $up_ext = end ( explode ( '.' , $up_file [ 'name' ])); $up_allw = false; foreach ( $this ->up_ext as $ext ) { if ( $up_ext == $ext ) { $up_allw = true; break ; } } ! $up_allw && exit ( '不允许上传.' . $up_ext . '格式的文件!' ); if ( $up_file [ 'size' ] / 1024 > $this ->up_max) { exit ( '不允许上传大于 ' . $this ->up_max. 'k 的文件!' ); } } } $this ->uploading(); } private function uploading() { if (io::dircreate( $this ->up_dir)) { if ( chmod ( $this ->up_dir, 0777)) { if (! empty empty ( $this ->up_files)) { foreach ( $this ->up_files as $up_file ) { if ( is_uploaded_file ( $up_file [ 'tmp_name' ])) { $file_name = $up_file [ 'name' ]; if ( $this ->up_rename) { $file_ext = end ( explode ( '.' , $file_name )); $file_rnd = substr (md5(uniqid()), mt_rand(0, 26), 6); $file_name = date ( 'ymdhis' ). '_' . $file_rnd . '.' . $file_ext ; } $file_name = $this ->up_dir. '/' . $file_name ; if (move_uploaded_file( $up_file [ 'tmp_name' ], $file_name )) { $this ->up_ret[] = str_replace (website_dirroot, '' , $file_name ); } else { exit ( '文件上传失败!' ); } } } } } else { exit ( '未开启写入权限!' ); } } else { exit ( '上传目录创建失败!' ); } //开源代码phpfensi.com } public function getupload() { return empty empty ( $this ->up_ret) ? false : $this ->up_ret; } function __destruct() {} } ?>在上面我们会看到一个for ($i = 0; $i < $up_cnt; $i ++),这个是遍历我们上面讲的一个个实例了.
查看更多关于PHP多文件上传理解总结 - php上传下载的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29315