PHP4 예제

주의

서버 보안을 위해 파일 업로드 및 문서 임포트 처리를 구현할 때 아래 가이드를 참고합니다.

소프트웨어 보안 취약점 진단 가이드

1. JSON 인코더 설치

다운로드: JSON.phps

2. 이미지 업로드 (Video 및 파일 업로드도 동일한 패턴을 따릅니다)

주의

아래 샘플 코드의 파일 업로드 부분은 의도적으로 최소화되어 있으며, 적절한 보안 처리가 적용되어 있지 않습니다.

파일 업로드는 프로젝트에 이미 구현된 기능을 사용하고, 아래 코드는 에디터 연동 부분만 참고합니다.

<?php
$uploadDir = 'uploads/images';
$fieldName = 'file';

$fileNameParts  = explode('.', $_FILES[$fieldName]['name']);
$extension      = end($fileNameParts);
$tmpName        = $_FILES[$fieldName]['tmp_name'];
$newFileName    = sha1(microtime());
$fileUploadPath = "${uploadDir}/${newFileName}.${extension}";
move_uploaded_file($tmpName, $fileUploadPath);

include("./JSON.phps");

header('Content-Type: application/json');
echo json_encode_new(['uploadPath' => $fileUploadPath]);

function json_encode_new($data) {
    $json = new Services_JSON();
    return $json->encode($data);
}
?>

3. HWP / MS Word / LibreOffice 문서 임포트

주의

아래 샘플 코드의 파일 업로드 부분은 의도적으로 최소화되어 있으며, 적절한 보안 처리가 적용되어 있지 않습니다.

파일 업로드는 프로젝트에 이미 구현된 기능을 사용하고, 아래 코드는 에디터 연동 부분만 참고합니다.

<?php
$uploadDir = 'uploads/docs';
$fieldName = 'file';

$fileNameParts  = explode('.', $_FILES[$fieldName]['name']);
$extension      = end($fileNameParts);
$tmpName        = $_FILES[$fieldName]['tmp_name'];
$newFileName    = sha1(microtime());
$fileUploadPath = "${uploadDir}/${newFileName}.${extension}";
move_uploaded_file($tmpName, $fileUploadPath);

$wordDir    = 'works';
$importPath = "${wordDir}/${newFileName}";
executeConverter($fileUploadPath, $importPath);

// From v2.3.0 the filename is "document.pb" (was "document.word.pb")
$pbFilePath     = "${importPath}/document.pb";
$serializedData = readPBData($pbFilePath);

include("./JSON.phps");

header('Content-Type: application/json');
echo json_encode_new([
    'serializedData' => $serializedData,
    'importPath'     => $importPath,
]);

function executeConverter($inputFilePath, $outputFilePath) {
    $sedocConverterPath = 'c:/sedocConverter/sedocConverter.exe';
    $fontsDir           = 'c:/sedocConverter/fonts';
    $tempDir            = 'c:/sedocConverter/tmp';
    $cmd = "${sedocConverterPath} -f ${fontsDir} ${inputFilePath} ${outputFilePath} ${tempDir}";
    exec($cmd);
}

function readPBData($pbFilePath) {
    $filesize = filesize($pbFilePath);
    $zd       = gzopen($pbFilePath, 'r');
    $data     = substr(gzread($zd, $filesize), 16);
    gzclose($zd);

    $byteArray = unpack('C*', gzuncompress($data));
    return array_values($byteArray);
}

function json_encode_new($data) {
    $json = new Service_JSON();
    return $json->encode($data);
}
?>

관련 정보