PHP Example

Caution

For server security, refer to the guide below when implementing file upload and document import handling.

Software Security Weakness Diagnosis Guide

1. Prerequisites

2. Image Upload (Video and File uploads use the same pattern)

Caution

The file-upload portion of the sample code below is intentionally minimal and lacks proper security handling.

For the file-upload portion, use what is already in place inside your project, and refer to the code below for the integration portion only.

<?php
try {
    $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);

    header('Content-Type: application/json');
    echo json_encode(['uploadPath' => $fileUploadPath]);
} catch (Exception $e) {
    echo $e->getMessage();
    http_response_code(404);
}

3. HWP / Word / Excel Document Import

Caution

The file-upload portion of the sample code below is intentionally minimal and lacks proper security handling.

For the file-upload portion, use what is already in place inside your project, and refer to the code below for the integration portion only.

<?php
try {
    $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);

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

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

    header('Content-Type: application/json');
    echo json_encode([
        'serializedData' => $serializedData,
        'importPath'     => $importPath,
    ]);
} catch (Exception $e) {
    echo $e->getMessage();
    http_response_code(404);
}

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)
{
    $fb   = fopen($pbFilePath, 'r');
    $data = stream_get_contents($fb, -1, 16);
    fclose($fb);

    $byteArray = unpack('C*', zlib_decode($data));
    // PHP < 5.4.0: use gzuncompress instead
    // $byteArray = unpack('C*', gzuncompress($data));
    return array_values($byteArray);
}