2026, 새로운 도약을 시작합니다.

멀티 파일 업로드 스킨 소스 분석 부탁드립니다. 채택완료

루미집사 님의 Plupload 적용한 멀티 업로드 스킨의 소스를 뜯어 보고 있습니다.

스킨 URL : https://sir.kr/g5_skin/38514

위스킨중 실제 파일이 업로드 되는 부분이 어딘지 모르겠네요...

file_upload.php 소스 부분에서 db를 등록하는 부분이 있는데..

이곳에서 파일을 업로드를 하나요? 그렇다면 어느부분에서 템프파일이 실제 서버로 이동이 되나요?

Copy




// Remove old temp files    

if ($cleanupTargetDir) {

    if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {

        die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');

    }

    while (($file = readdir($dir)) !== false) {

        $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;

        // If temp file is current file proceed to the next

        if ($tmpfilePath == "{$filePath}.part") {

            continue;

        }

        // Remove temp file if it is older than the max age and is not the current file

        if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath)  time() - $maxFileAge)) {

            @unlink($tmpfilePath);

        }

    }

    closedir($dir);

}

// Open temp file

if (!$out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb")) {

    die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');

}

if (!empty($_FILES)) {

    if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {

        die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');

    }

    // Read binary input stream and append it to temp file    

    if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {

        die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');

    }

}

else {    

    if (!$in = @fopen("php://input", "rb")) {

        die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');

    }

}

while ($buff = fread($in, 4096)) {

    fwrite($out, $buff);

}

@fclose($out);

@fclose($in);

$fileNameSub  = uploadfilenamechange($fileName); // 원본파일명을 변경한다.

$fileNameSubPath = $targetDir . DIRECTORY_SEPARATOR . $fileNameSub; // 파일저장위치

// Check if file has been uploaded

if (!$chunks || $chunk == $chunks - 1) {

    // Strip the temp .part suffix off 

    rename("{$filePath}.part", $fileNameSubPath);

    $img = @getimagesize($fileNameSubPath); // 파일정보

    // 이미지 파일인데 이미지파일타입이 아니면 파일을 삭제하고 등록하지 않는다.

    if ( preg_match("/\.({$config['cf_image_extension']})$/i", $ori_fileName) || preg_match("/\.({$config['cf_flash_extension']})$/i", $ori_fileName) ) {

            if ($img['2']  1 || $img['2'] > 16) {

                @unlink($fileNameSubPath);

                die('{"jsonrpc" : "2.0", "result" : null, "id" : "id2"}');

            }

    }

    $fileSize = filesize($fileNameSubPath); // 파일 size

    

    // "bf_no" 값 구하기

    $row = sql_fetch(" SELECT max(bf_no) AS bf_no FROM {$g5['board_file_table']} WHERE bo_table = '{$bo_table}' AND wr_id = '{$wr_id}' ", TRUE);

    $bf_no =  (isset($row['bf_no']))? ($row['bf_no'] + 1):'0';

    // 파일정보를 DB에 저장한다

    $sql = "INSERT INTO

                {$g5['board_file_table']}

            SET

                bo_table    = '{$bo_table}',

                wr_id       = '{$wr_id}',

                bf_no       = '{$bf_no}',

                bf_source   = '{$ori_fileName}',

                bf_file     = '{$fileNameSub}',

                bf_content  = '',

                bf_download = 0,

                bf_filesize = '{$fileSize}',

                bf_width    = '{$img[0]}',

                bf_height   = '{$img[1]}',

                bf_type     = '{$img[2]}',

                bf_datetime = '".G5_TIME_YMDHIS."' ";

    sql_query($sql, true);

    

    unset($img);

    unset($fileSize);

}

답변 1개

채택된 답변
+20 포인트

Plupload 는 https://www.plupload.com/

처음 보는 것이라.. 맞을지 모르겠습니다만, 추측으로는..

rename("{$filePath}.part", $fileNameSubPath);

부분이 'tmp 파일이 실제 저장위치 이동' 코드 인 것 같습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고