Example #1
0
 /**
  * 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;
 }