private function addFile(&$files, $name, $info)
{
if (strpos($name, '[') === false) {
$files[$name] = $info;
return;
}
$fileInfoAttributes = ['name', 'type', 'size', 'error', 'tmp_name', 'tmp_resource'];
$nameParts = preg_split('/\\]\\[|\\[/s', $name);
$baseName = array_shift($nameParts);
if (!isset($files[$baseName])) {
$files[$baseName] = [];
foreach ($fileInfoAttributes as $attribute) {
$files[$baseName][$attribute] = [];
}
} else {
foreach ($fileInfoAttributes as $attribute) {
$files[$baseName][$attribute] = (array) $files[$baseName][$attribute];
}
}
foreach ($fileInfoAttributes as $attribute) {
if (!isset($info[$attribute])) {
continue;
}
$current =& $files[$baseName][$attribute];
foreach ($nameParts as $namePart) {
$namePart = trim($namePart, ']');
if ($namePart === '') {
$current[] = [];
$lastKey = array_pop(array_keys($current));
$current =& $current[$lastKey];
} else {
if (!isset($current[$namePart])) {
$current[$namePart] = [];
}
$current =& $current[$namePart];
}
}
$current = $info[$attribute];
}
}