아직 추가되지 않은 기능(자동 이름 변경, 이미지 처리 등)이 있으니 필요에 따라 추가하시면 됩니다.
사용:
$up = new upfile(ROOT_PATH.'data /'.date("Ym" ,time()),array('gif','jpg','jpeg'),true)
$fileimg = $up->upload($_FILES['img) ']);//업로드로 돌아가기 파일명 배열 다음에는 $_FILES['img']가 업로드된 파일입니다.
$up->log를 사용하면 업로드 정보를 볼 수 있습니다
php
//====== ===================================== ========
/ / 파일명: upfile.class.php
// 요약: 파일 업로드 클래스
// 작성자: millken(Lost Lincoln)
// LastModifed: 2008 -6-4
// copyright (c )2008 millken@gmail.com
//========================== ============== ===============
if(! Defined('OK'))exit(__FILE__.'액세스 거부됨') ;
class upfile {
public $ExtensionFileFormat = array();
public $returninfo = array()
private $ImageFileFormat = array('gif','bmp','jpg', 'jpe','jpeg','png');
private $OtherFileFormat = array('zip','pdf','rar','xls','doc','ppt','csv') ;
private $savePath;
private $attachment_path = './upfiles/';
private $overwrite = false; # 동일한 이름을 덮어쓸지 여부
private $maxSize = 0; 파일 크기, 0이면 크기 제한이 없습니다.
private $ext;
private $errno = 0
/* 생성자
* (string)$savePath 파일 저장 경로, 기본값은 $attachment_path
* (array)$extensionFileFormat 업로드된 파일의 확장자를 사용자 정의합니다. 설정하지 않으면 $ImageFileFormat || $OtherFileFormat
* (bool)$overwrite 같은 이름
*/
공용 함수 __construct($savePath='',$extensionFileFormat = array(),$overwrite = false) {
$this->savePath = 비어 있음($savePath)?$ this->attachment_pathsavePath.'/';
$this->extensionFileFormat = is_array($extensionFileFormat)?$extensionFileFormat: array()
$this->overwrite = is_bool($overwrite)?$ overwrite:false;
}
/*업로드 기능
* (array)$files 업로드할 파일 배열 $_FILES['attach']
* (number)$maxSize 최대 개수 바이트, 기본값은 0, 업로드 크기 제한 없음
*/
공용 함수 upload($files,$maxSize=0) {
$this->maxSize = is_numeric($maxSize )?$maxSize:0;
if(isset($files) && is_array($files)) {
if(is_array($files[ 'name'])) {
foreach($files as $key => $var) {
foreach($var as $id => $val) {
$attachments[$id] [$key] = $val;
} else {
$attachments[] = $files;
}
}
self::check_file_type($ attachments)
if(empty($this->filelist) )) {
$this->log .= "업로드할 파일 목록이 비어 있습니다. n";
return array();
}
if(!self::makeDirectory() || !@is_writable($this->savePath)) {
$this-> log .= $this->savePath . "만들 수 없거나 해당 권한을 쓸 수 없습니다. n";
return array();
}
$filearray = array();
foreach($this->filelist as $k=>$f) {
if ($this->maxSize && $f['size']>$this->maxSize) {
$this->log .= $f['name'] "크기가 설정된 값을 초과합니다. value 정의된 값: " . $this->maxSize ."n";
}elseif($this->overwrite == false && file_exists($this->savePath . $f['name']) ) {
$this->log .= $f['name'] . "디렉토리에 이미 존재합니다:" . $this->savePath .
}else{
@ unlink($this->savePath . $f['name'])
if(@move_uploaded_file($f['tmp_name'],$this->savePath . mb_convert_encoding($f['name') ] ,'gbk','utf-8'))) {//인코딩 변환이 없으면 중국어가 지원되지 않습니다
$this->log .= $f['name'] "디렉토리에 성공적으로 업로드되었습니다. : ".$this->savePath ."n";
$filearray[$k] = $this->savePath . $f['name'];
}else{
$this ->log .= $f['name'] "업로드에 실패했습니다. n";
}
}
}
return $filearray;
}
/*파일 유형 감지
*(array)$files 파일 배열
* /
비공개 함수 check_file_type($files) {
$this->filelist = array()
foreach($files as $key=>$file) {
if($file [ 'error'] == 0) {
$ext = strtolower(substr($file['name'], strrpos($file['name'], '.') 1))); = @file_get_contents($file['tmp_name'],FALSE,NULL,0,20)
if((in_array($ext,array('jpg','jpeg')) && substr($str , 0 , 3) !== "xFFxD8xFF") || ($ext == 'gif' && substr($str ,0, 4) !== 'GIF8') || ($ext == 'png' && substr ( $str ,0, 8) !== "x89x50x4Ex47x0Dx0Ax1Ax0A") || ($ext == 'bmp' && substr($str ,0, 2) !== 'BM') || ' && (substr($str ,0, 3) !== 'CWS' || substr($str ,0, 3) !== 'FWS')) || ($ext == 'zip' && substr ( $str ,0, 4) !== "PKx03x04") || ($ext == 'rar' && substr($str ,0, 4) !== 'Rar!') || pdf' && substr($str ,0, 4) !== "x25PDF") || ($ext == 'chm' && substr($str ,0, 4) !== 'ITSF') || ext == 'rm' && substr($str ,0, 4) !== "x2ERMF") || ($ext == 'exe' && substr($str ,0, 2) !== "MZ" ) || (in_array($ext,array('doc','xls','ppt')) && substr($str ,0, 4) !== "xD0xCFx11xE0")) {
$this-> ; log .= $file['name'] . "파일 형식이 파일 내용과 일치하지 않습니다.n";
}elseif((!empty($this->extensionFileFormat) && in_array($ext,$this->extensionFileFormat)) || (empty($this->extensionFileFormat) && (in_array( $ext,$this->ImageFileFormat) || in_array($ext,$this->OtherFileFormat)))) {
$this->filelist[$key] =
}else; {
$this->log .= $file['name'] . "불합리한 문자입니다."
@unlink($file['tmp_name']);
}
}
}
/*生成上传目录
*
*/
비공개 함수 makeDirectory() {
$directoryName = str_replace("\", "/", $this->savePath);
$dirNames =explore('/', $directoryName)
$total = count($dirNames); 🎜>for($i=0; $i{
$temp .= $dirNames[$i].'/'
if (!is_dir($temp) ))
{
$oldmask = @umask(0);
if (!@mkdir($temp, 0777)) return false
@umask($oldmask);
};
if(is_dir($this->savePath)) {
return true
} else {
return
}
}
?>
以上就介绍了 PHP5 UTF8多文件上传类, 包括了方面的内容, 希望对PHP教程兴趣的朋友有所帮助.