/** * Handle a file uploaded by the client. * * @param string $targetDirectory Target directory * @param string $parameterName Parameter name as used in the form element * @param string $fileName Target file name (optional) * @param array $allowedTypes List containing allowed file types (optional) * @param int $sizeLimit File size limit in bytes (optional) * @return boolean True on success, false otherwise */ public static function handleUpload($targetDirectory, $parameterName, $fileName = null, $allowedTypes = array(), $sizeLimit = 512000) { if (!String::endsWith($targetDirectory, '/')) { $targetDirectory = "{$targetDirectory}/"; } $files = $_FILES; if (empty($files) || !file_exists($targetDirectory) && !mkdir($targetDirectory, 0777, true)) { return false; } foreach ($files as $index => $fileCollection) { if (is_array($files[$index]['name'])) { $files[$index] = Collection::diverse($fileCollection); } } $bracketStartPos = strpos($parameterName, '['); if ($bracketStartPos) { $bracketEndPos = strpos($parameterName, ']'); $parameterCollection = substr($parameterName, 0, $bracketStartPos); $parameterName = substr($parameterName, $bracketStartPos + 1, $bracketEndPos - $bracketStartPos - 1); $file = isset($files[$parameterCollection][$parameterName]) ? $files[$parameterCollection][$parameterName] : false; } else { $file = isset($files[$parameterName]) ? $files[$parameterName] : false; } if (!$file || $file['error'] !== UPLOAD_ERR_OK || !empty($allowedTypes) && !in_array($file['type'], $allowedTypes) || $sizeLimit > 0 && $file['size'] > $sizeLimit) { return false; } if (!$fileName) { $fileName = basename($file['name']); } return move_uploaded_file($file['tmp_name'], $targetDirectory . $fileName) ? $fileName : false; }