가장 빈번하게 사용하는 업로드 부분을 클래스로 구현해 봤습니다.
보시고 부족한 부분은 수정해 주시면 좋겠네요 ^^
<?
class FileUpload
{
var $directory;
var $fileInfo;
var $code;
var $limitSize;
var $extension;
/* 클래스 생성자
@ $directory : 파일업로드 디렉토리 경로,
@ $http_file_name : $_FILES[file_name] 정보,
@ $code : 파일명을 코드값을 기준으로 자동부여
@ $limit_size : MB
@ $extension : array 업로드 불가능한 확장자
@ return void */
function FileUpload($directory, $http_file_name, $code='', $limit_size=100, $extension=array('php','cgi','php3','pl','html','htm','exe','jsp')){
$this->directory = $directory;
$this->fileInfo = $http_file_name;
$this->code = $code;
$this->limit_size = $limit_size;
$this->extension = $extension;
}
function delFile($file_name){
if(file_exists($this->directory.'/'.$file_name)){
unlink($this->directory.'/'.$file_name);
return true;
}
else
return false;
}
/* 확장자를 제거한 파일이름을 리턴하는 메소드 */
function getFileName(){
$_file_name = explode('.',$this->fileInfo['name']);
return $_file_name[0];
}
/* 파일의 확장자 추출 메소드 */
function getFileExtension($file_name=''){
if($file_name=='') $file_name = $this->fileInfo['name'];
$_file_name = explode('.',strtolower($file_name));
return $_file_name[count($_file_name)-1];
}
/* 업로드 가능한 확장자 인지 검사 하는 메소드 */
function isValidExtension(){
$ext = $this->getFileExtension();
$isExt = in_array($ext, $this->extension);
if($isExt){
$this->errorMsg("업로드할 수 없는 확장자입니다.");
return false;
}
else
return true;
}
/* 파일 사이즈가 업로드 가능한지 확인 하는 메소드 */
function isLimitFileSize(){
if($this->limit_size * 1024 * 1024 < $fileInfo['size']){
$this->errorMsg("업로드 할 파일의 크기가 초과 하였습니다.");
return false;
}
else
return true;
}
/* 중복된 파일이름이 있을경우 새로운 이름을 부여하는 메소드 */
/* $auto_file_name : 자동파일명 부여 true/false */
function getValidFileName(){
$tmp_file_ext = $this->getFileExtension();
if($this->code!=''){
$file_name = $this->code.date('ymdHis').'.'.$tmp_file_ext;
$tmp_file_name = $this->code.date('ymdHis');
}
else {
$file_name = $this->fileInfo['name'];
$tmp_file_name = $this->getFileName();
}
if(!is_dir($this->directory)){
if(mkdir($this->directory)) chmod($this->directory,0777);
}
$i=1;
while(file_exists($this->directory.'/'.$file_name)){
$file_name = $tmp_file_name.'-'.$i.'.'.$tmp_file_ext;
$i++;
}
return $file_name;
}
function makeDir($dir=''){
if($dir=='') $dir = $this->directory;
$_dir = explode('/', $this->directory);
for($i=0; $i<count($_dir); $i++){
$now_dir .= '/'.$_dir[$i];
if(!file_exists($now_dir)){
mkdir($now_dir,0777);
chmod($now_dir,0777);
}
}
}
/* 파일을 업로드 하는 메소드 */
function uploadFile(){
if($this->isValidExtension() && $this->isLimitFileSize()){
//디렉토리가 없을 경우 자동 생성
// /file에 쓰기권한이 있어야 함
if(!file_exists($this->directory)) $this->makeDir();
$new_file_name = $this->getValidFileName();
if(move_uploaded_file($this->fileInfo['tmp_name'],$this->directory.'/'.$new_file_name)){
$this->fileInfo['rename'] = $new_file_name;
return true;
}
else {
$this->errorMsg("업로드를 실패했습니다. 다시 확인해 주세요");
return false;
}
}
}
function errorMsg($msg){
echo ('<script language="javascript">
alert("'.$msg.'");
</script>');
}
}
?>
사용법은 아래처럼 하시면 됩니다.
<?
include "class.FileUpload.php";
if($_FILES[doc][name]){
$temp_doc = $_FILES[doc][name];
//이미지의 경우 자동번호 부여
$ext = FileUpload::getFileExtension($_FILES[doc][name]);
if(in_array($ext, array('jpg','jpeg','gif','bmp')))
$fileUpload = new FileUpload($UPLOAD_DIR,$_FILES[doc],'IMG');
else
$fileUpload = new FileUpload($UPLOAD_DIR,$_FILES[doc]);
if($fileUpload->uploadFile()) $doc = $fileUpload->fileInfo[rename];
else {
Msg::backMsg("파일을 다시 선택해 주십시오");
exit();
}
echo "<br>".$doc //업로드된 파일명입니다.
}
?><div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
보시고 부족한 부분은 수정해 주시면 좋겠네요 ^^
<?
class FileUpload
{
var $directory;
var $fileInfo;
var $code;
var $limitSize;
var $extension;
/* 클래스 생성자
@ $directory : 파일업로드 디렉토리 경로,
@ $http_file_name : $_FILES[file_name] 정보,
@ $code : 파일명을 코드값을 기준으로 자동부여
@ $limit_size : MB
@ $extension : array 업로드 불가능한 확장자
@ return void */
function FileUpload($directory, $http_file_name, $code='', $limit_size=100, $extension=array('php','cgi','php3','pl','html','htm','exe','jsp')){
$this->directory = $directory;
$this->fileInfo = $http_file_name;
$this->code = $code;
$this->limit_size = $limit_size;
$this->extension = $extension;
}
function delFile($file_name){
if(file_exists($this->directory.'/'.$file_name)){
unlink($this->directory.'/'.$file_name);
return true;
}
else
return false;
}
/* 확장자를 제거한 파일이름을 리턴하는 메소드 */
function getFileName(){
$_file_name = explode('.',$this->fileInfo['name']);
return $_file_name[0];
}
/* 파일의 확장자 추출 메소드 */
function getFileExtension($file_name=''){
if($file_name=='') $file_name = $this->fileInfo['name'];
$_file_name = explode('.',strtolower($file_name));
return $_file_name[count($_file_name)-1];
}
/* 업로드 가능한 확장자 인지 검사 하는 메소드 */
function isValidExtension(){
$ext = $this->getFileExtension();
$isExt = in_array($ext, $this->extension);
if($isExt){
$this->errorMsg("업로드할 수 없는 확장자입니다.");
return false;
}
else
return true;
}
/* 파일 사이즈가 업로드 가능한지 확인 하는 메소드 */
function isLimitFileSize(){
if($this->limit_size * 1024 * 1024 < $fileInfo['size']){
$this->errorMsg("업로드 할 파일의 크기가 초과 하였습니다.");
return false;
}
else
return true;
}
/* 중복된 파일이름이 있을경우 새로운 이름을 부여하는 메소드 */
/* $auto_file_name : 자동파일명 부여 true/false */
function getValidFileName(){
$tmp_file_ext = $this->getFileExtension();
if($this->code!=''){
$file_name = $this->code.date('ymdHis').'.'.$tmp_file_ext;
$tmp_file_name = $this->code.date('ymdHis');
}
else {
$file_name = $this->fileInfo['name'];
$tmp_file_name = $this->getFileName();
}
if(!is_dir($this->directory)){
if(mkdir($this->directory)) chmod($this->directory,0777);
}
$i=1;
while(file_exists($this->directory.'/'.$file_name)){
$file_name = $tmp_file_name.'-'.$i.'.'.$tmp_file_ext;
$i++;
}
return $file_name;
}
function makeDir($dir=''){
if($dir=='') $dir = $this->directory;
$_dir = explode('/', $this->directory);
for($i=0; $i<count($_dir); $i++){
$now_dir .= '/'.$_dir[$i];
if(!file_exists($now_dir)){
mkdir($now_dir,0777);
chmod($now_dir,0777);
}
}
}
/* 파일을 업로드 하는 메소드 */
function uploadFile(){
if($this->isValidExtension() && $this->isLimitFileSize()){
//디렉토리가 없을 경우 자동 생성
// /file에 쓰기권한이 있어야 함
if(!file_exists($this->directory)) $this->makeDir();
$new_file_name = $this->getValidFileName();
if(move_uploaded_file($this->fileInfo['tmp_name'],$this->directory.'/'.$new_file_name)){
$this->fileInfo['rename'] = $new_file_name;
return true;
}
else {
$this->errorMsg("업로드를 실패했습니다. 다시 확인해 주세요");
return false;
}
}
}
function errorMsg($msg){
echo ('<script language="javascript">
alert("'.$msg.'");
</script>');
}
}
?>
사용법은 아래처럼 하시면 됩니다.
<?
include "class.FileUpload.php";
if($_FILES[doc][name]){
$temp_doc = $_FILES[doc][name];
//이미지의 경우 자동번호 부여
$ext = FileUpload::getFileExtension($_FILES[doc][name]);
if(in_array($ext, array('jpg','jpeg','gif','bmp')))
$fileUpload = new FileUpload($UPLOAD_DIR,$_FILES[doc],'IMG');
else
$fileUpload = new FileUpload($UPLOAD_DIR,$_FILES[doc]);
if($fileUpload->uploadFile()) $doc = $fileUpload->fileInfo[rename];
else {
Msg::backMsg("파일을 다시 선택해 주십시오");
exit();
}
echo "<br>".$doc //업로드된 파일명입니다.
}
?><div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 1430 | 18년 전 | 2981 | ||
| 1429 | 18년 전 | 2925 | ||
| 1428 | 18년 전 | 2820 | ||
| 1427 | 18년 전 | 2133 | ||
| 1426 |
|
18년 전 | 2310 | |
| 1425 |
|
18년 전 | 2865 | |
| 1424 |
|
18년 전 | 2959 | |
| 1423 |
frotone
|
18년 전 | 4131 | |
| 1422 | 18년 전 | 6119 | ||
| 1421 | 18년 전 | 2051 | ||
| 1420 | 18년 전 | 2178 | ||
| 1419 | 18년 전 | 1891 | ||
| 1418 | 18년 전 | 1652 | ||
| 1417 | 18년 전 | 2636 | ||
| 1416 | 18년 전 | 1698 | ||
| 1415 | 18년 전 | 1560 | ||
| 1414 | 18년 전 | 4737 | ||
| 1413 | 18년 전 | 1793 | ||
| 1412 | 18년 전 | 1835 | ||
| 1411 | 18년 전 | 1850 | ||
| 1410 | 18년 전 | 1971 | ||
| 1409 | 18년 전 | 3628 | ||
| 1408 | 18년 전 | 1649 | ||
| 1407 | 18년 전 | 1521 | ||
| 1406 | 18년 전 | 1351 | ||
| 1405 | 18년 전 | 1856 | ||
| 1404 | 18년 전 | 1903 | ||
| 1403 |
frotone
|
18년 전 | 3651 | |
| 1402 | 18년 전 | 1976 | ||
| 1401 | 18년 전 | 3111 | ||
| 1400 | 18년 전 | 4728 | ||
| 1399 | 18년 전 | 2860 | ||
| 1398 | 18년 전 | 8056 | ||
| 1397 | 18년 전 | 4061 | ||
| 1396 |
|
18년 전 | 2741 | |
| 1395 | 18년 전 | 1522 | ||
| 1394 | 18년 전 | 2626 | ||
| 1393 | 18년 전 | 5037 | ||
| 1392 | 18년 전 | 5221 | ||
| 1391 |
cncafe
|
18년 전 | 2094 | |
| 1390 |
mixdesign
|
18년 전 | 4352 | |
| 1389 | 18년 전 | 4098 | ||
| 1388 |
mixdesign
|
18년 전 | 4150 | |
| 1387 | 18년 전 | 2270 | ||
| 1386 | 18년 전 | 4185 | ||
| 1385 |
mixdesign
|
18년 전 | 2175 | |
| 1384 | 18년 전 | 3282 | ||
| 1383 | 18년 전 | 4925 | ||
| 1382 | 18년 전 | 1947 | ||
| 1381 |
오디세우스
|
18년 전 | 3404 | |
| 1380 |
mixdesign
|
18년 전 | 1637 | |
| 1379 | 18년 전 | 2742 | ||
| 1378 |
mixdesign
|
18년 전 | 1668 | |
| 1377 | 18년 전 | 2718 | ||
| 1376 |
|
18년 전 | 2553 | |
| 1375 |
|
18년 전 | 1558 | |
| 1374 |
|
18년 전 | 1492 | |
| 1373 |
|
18년 전 | 1738 | |
| 1372 | 18년 전 | 2239 | ||
| 1371 | 18년 전 | 2014 | ||
| 1370 | 18년 전 | 2379 | ||
| 1369 | 18년 전 | 4923 | ||
| 1368 |
mixdesign
|
18년 전 | 1815 | |
| 1367 | 18년 전 | 1258 | ||
| 1366 | 18년 전 | 1376 | ||
| 1365 | 18년 전 | 1337 | ||
| 1364 | 18년 전 | 1082 | ||
| 1363 | 18년 전 | 1079 | ||
| 1362 | 18년 전 | 1411 | ||
| 1361 | 18년 전 | 1363 | ||
| 1360 | 18년 전 | 2349 | ||
| 1359 | 18년 전 | 1224 | ||
| 1358 | 18년 전 | 1610 | ||
| 1357 | 18년 전 | 2100 | ||
| 1356 | 18년 전 | 1278 | ||
| 1355 | 18년 전 | 2829 | ||
| 1354 | 18년 전 | 1270 | ||
| 1353 | 18년 전 | 1648 | ||
| 1352 | 18년 전 | 1500 | ||
| 1351 | 18년 전 | 1451 | ||
| 1350 | 18년 전 | 1238 | ||
| 1349 | 18년 전 | 1077 | ||
| 1348 | 18년 전 | 1669 | ||
| 1347 | 18년 전 | 1109 | ||
| 1346 | 18년 전 | 3616 | ||
| 1345 | 18년 전 | 1712 | ||
| 1344 |
mixdesign
|
18년 전 | 1790 | |
| 1343 | 18년 전 | 1117 | ||
| 1342 | 18년 전 | 1850 | ||
| 1341 | 18년 전 | 1094 | ||
| 1340 | 18년 전 | 1163 | ||
| 1339 | 18년 전 | 1015 | ||
| 1338 | 18년 전 | 1004 | ||
| 1337 | 18년 전 | 1098 | ||
| 1336 |
|
18년 전 | 2578 | |
| 1335 | 18년 전 | 1544 | ||
| 1334 | 18년 전 | 1636 | ||
| 1333 | 18년 전 | 1203 | ||
| 1332 | 18년 전 | 1873 | ||
| 1331 | 18년 전 | 1517 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기