From f191f1c11fdf7269a025a0d1f1973541567b8298 Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Wed, 9 Jan 2019 14:26:04 +0100 Subject: [PATCH] =?UTF-8?q?Fournit=20une=20structure=20identique=20=C3=A0?= =?UTF-8?q?=20l'upload=20de=20fichier=20dans=20$=5FFILES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vas/rest/index.phtml | 94 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 21 deletions(-) diff --git a/vas/rest/index.phtml b/vas/rest/index.phtml index e4a1f713..aa94a7d1 100755 --- a/vas/rest/index.phtml +++ b/vas/rest/index.phtml @@ -63,24 +63,13 @@ if (!empty($boundary)) { $aFilenamePathInfo = pathinfo($filename); $filename = $aFilenamePathInfo['filename'] . '.' . $aFilenamePathInfo['extension']; - // Multiples documents - if (substr($name, -2) == '[]') { - $_FILES[substr($name, 0, -2)][] = array( - "file" => substr($body, 0, strlen($body) - 2), - "name" => $filename - ); - } - // Documents simples - else { - $_PUTDATA[$name . "_file"] = substr($body, 0, strlen($body) - 2); - $_PUTDATA[$name . "_name"] = $filename; - - // Utilisation de $_FILES - $_FILES[$name] = array( - "file" => substr($body, 0, strlen($body) - 2), - "name" => $filename - ); - } + // [DEPRECATED] + $_PUTDATA[$name . "_file"] = substr($body, 0, strlen($body) - 2); + $_PUTDATA[$name . "_name"] = $filename; + + // Extrait les fichiers de aValues dans $_FILES + extractPutFileStruct($name, $filename, substr($body, 0, strlen($body) - 2), $properties); + } else { $_PUTDATA[$name] = substr($body, 0, strlen($body) - 2); } @@ -88,13 +77,12 @@ if (!empty($boundary)) { } } -error_log('$_POST: '. print_r($_POST, true)); -error_log('$_FILES: '. print_r($_FILES, true)); - $aParamsJson = json_decode(file_get_contents('php://input'), true); if ($_PUTDATA != null) { $aValues = array_merge($_REQUEST, $_PUTDATA); } else { + // Réorganise $_FILES pour les fichiers multiples + extractPostFileStruct(); $aValues = $_REQUEST; } if ($aParamsJson != null) { @@ -207,5 +195,69 @@ function customErrorHandler ($errno, $errstr, $errfile, $errline, $context){ } } + +/** + * Extract the PUT upload files structure and put them into $_FILES + * + * @param {string} $sField Field name + * @param {string} $sFileName File name + * @param {string} $sFileContent File content + * @param {array} $properties properties + */ +function extractPutFileStruct($sField, $sFileName, $sFileContent, $properties) { + + // Crée un fichier dans tmp + $sTmpFile = $properties['extract_dir'] . "/" . getUniqRandomId(); + $oFile = fopen($sTmpFile, 'w+'); + if (!$oFile){ + writeToErrorLog("Can't open file in " . $properties['extract_dir']); + return null; + }else{ + fwrite($oFile, $sFileContent); + fclose($oFile); + $aFileStruc = array( + "name" => $sFileName, + "tmp_name" => $sTmpFile, + "error" => "0", + "size" => filesize($sTmpFile) + ); + } + + // Fichiers simples + if (substr($sField, -2) != '[]') { + $_FILES[$sField] = $aFileStruc; + } + // Fichiers multiples + if (substr($sField, -2) == '[]') { + $_FILES[substr($sField, 0, -2)][] = $aFileStruc; + } +} + +/** + * Extract the POST upload multiple files into a common structure + * + */ +function extractPostFileStruct() { + + foreach ($_FILES as $key => $value) { + + // Fichier multiple + if (is_array($value['name'])) { + + $aFiles = []; + for ($i=0; $i < count($value['name']); $i++) { + + $aFile = []; + foreach ($value as $key2 => $value2) { + + $aFile[$key2] = $value[$key2][$i]; + } + array_push($aFiles, $aFile); + } + $_FILES[$key] = $aFiles; + } + } +} + include ("index.vhtml"); ?> -- GitLab