Advertisement
Guest User

File uploads

a guest
Jul 8th, 2013
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. /**
  4. * krs1911@gmail.com
  5. */
  6.  
  7. /**
  8. * You can add more file inputs by just copying & pase line
  9. * <input name='p1' type='file' accept='<?= implode(',', $settings['ext']); ?>' />
  10. * remember about changing the field name eg. p2, p3, p4, ...
  11. */
  12.  
  13. /* ----------------------------------------------- */
  14. /* SETTINGS */
  15. /* ----------------------------------------------- */
  16.  
  17. $settings = array(
  18.     //Maximum file size defined in Bytes. However it depends on what values are set for directives in php.ini: upload_max_filesize, post_max_size and memory_limit
  19.     'file_maxsize'  => 5000000,
  20.    
  21.     // Accepted extensions
  22.     'ext'           => array(
  23.         'image/gif'
  24.     ),
  25.    
  26.     // Directory where files should be placed. Note this is relative path, so folder images/ will be serached in the same location as script execution
  27.     'dir'           => 'images/',
  28.    
  29.     'handleUps'             => true, // Upload enabled/disabled -> options: true/false
  30.     'createDirIfNoExist'    => true, // Create output directory (specified at 'dir') when doesn't exist. Options true/false
  31.     'allowNoFile'           => false // Allow to execute script if no file has been selected for at least one file field. Options true/false
  32. );
  33.  
  34. /* ----------------------------------------------- */
  35. /* NO MORE FURTHER EDITING NEEDED */
  36. /* ----------------------------------------------- */
  37.  
  38. try
  39. {
  40.     // Check if file handling on and ifdata has been sent
  41.     if ($settings['handleUps'] && array_key_exists('send', $_POST))
  42.     {
  43.         // yes - proceed
  44.         $errors = array();
  45.        
  46.         // Check if files has been sent without any problems
  47.         foreach ($_FILES as $fieldname => $fileprop)
  48.         {
  49.             // Check file error
  50.             if ($fileprop != UPLOAD_ERR_OK)
  51.             {
  52.                 switch ($fileprop['error'])
  53.                 {
  54.                     case UPLOAD_ERR_INI_SIZE:
  55.                     case UPLOAD_ERR_FORM_SIZE:
  56.                         $errors[] = 'File '.$fileprop['name'].' is too big (maximum size is '.sizeFormat($settings['file_maxsize'], 'MB').')';
  57.                     break;
  58.                     case UPLOAD_ERR_PARTIAL:
  59.                     case UPLOAD_ERR_NO_TMP_DIR:
  60.                     case UPLOAD_ERR_CANT_WRITE:
  61.                         $errors[] = 'File '.$fileprop['name'].' wasn\'t succesfully uploaded.';
  62.                     break;
  63.                     case UPLOAD_ERR_NO_FILE:
  64.                         if (!$settings['allowNoFile'])
  65.                         {
  66.                             $errors[] = 'No file has been selected at field '.$fieldname.'.';
  67.                         }
  68.                     break;
  69.                     case UPLOAD_ERR_EXTENSION:
  70.                         $errors[] = 'File '.$fileprop['name'].' extension is not correct.';
  71.                     break;
  72.                 }
  73.             }
  74.         }
  75.        
  76.         // If there are errors -> do not proceed
  77.         if (!empty($errors))
  78.         {
  79.             throw new Exception(implode('<br />', $errors));
  80.         }
  81.        
  82.         // Create target directory if not exists and if script allowed to
  83.         if (!file_exists($settings['dir']))
  84.         {
  85.             if (!$settings['createDirIfNoExist'])
  86.             {
  87.                 throw new Exception('Target directory does not exists.');
  88.             }
  89.            
  90.             if (!mkdir($settings['dir'], 0777))
  91.             {
  92.                 throw new Exception('Target directory error.');
  93.             }
  94.         }
  95.        
  96.         // Continue with checking size, veryfing extensions and moving files to te proper directory
  97.         $filesExt = array();
  98.        
  99.         foreach ($_FILES as $filename => $fileprop)
  100.         {  
  101.             try
  102.             {
  103.                 // If file is uploaded one
  104.                 if (!is_uploaded_file($fileprop['tmp_name']))
  105.                 {              
  106.                     throw new Exception('There was a problem with handling '.$fileprop['name'].' file.');
  107.                 }
  108.                
  109.                 // Filesize
  110.                 if ($fileprop['size'] > $settings['file_maxsize'])
  111.                 {                
  112.                     throw new Exception('File '.$fileprop['name'].' is too big (maximum size is '.sizeFormat($settings['file_maxsize']).').');
  113.                 }
  114.                
  115.                 // Check claimed extension
  116.                 if (!in_array($fileprop['type'], $settings['ext']))
  117.                 {
  118.                     throw new Exception('File '.$fileprop['name'].' has inapropriate extension.');
  119.                 }
  120.                
  121.                 // Verify extension
  122.                 if (class_exists('finfo') && floatval(phpversion()) >= 5.3)
  123.                 {
  124.                     $finfo = finfo_open(FILEINFO_MIME_TYPE);
  125.                     $type = finfo_file($finfo, $fileprop['tmp_name']);
  126.                 }
  127.                 else if (function_exists('exif_imagetype'))
  128.                 {                  
  129.                     $type = exif_imagetype($fileprop['tmp_name']);
  130.                 }
  131.                 else
  132.                 {    
  133.                     $type = $fileprop['type'];
  134.                 }
  135.                
  136.                 if (!in_array($type, $settings['ext']))
  137.                 {              
  138.                     throw new Exception('File '.$fileprop['name'].' has inappropriate extension.');
  139.                 }
  140.                
  141.                 // Save ext
  142.                 $filesExt[$filename] = end(explode('/', $type));
  143.             }
  144.             catch (Exception $ex)
  145.             {
  146.                 $errors[] = $ex->getMessage();
  147.             }
  148.         }
  149.        
  150.         // Save files only if there are no errors
  151.         if (!empty($errors))
  152.         {
  153.             throw new Exception(implode('<br />', $errors));
  154.         }
  155.        
  156.         foreach ($_FILES as $filename => $fileprop)
  157.         {
  158.             // Move uploaded file
  159.             if (!move_uploaded_file($fileprop['tmp_name'], $settings['dir'].time().'.'.$filesExt[$filename]))
  160.             {
  161.                 throw new Exception('File '.$fileprop['name'].' couldn\'t be saved.');
  162.             }
  163.         }
  164.     }
  165. }
  166. catch (Exception $ex)
  167. {
  168.     echo '<div style=\'border: 1px solid red; background-color: rgba(255, 0, 0, 0.1); color: red; padding: 15px; text-align: center;\'>'.$ex->getMessage().'</div>';
  169. }
  170.  
  171. function sizeFormat($size, $format)
  172. {
  173.     switch ($format)
  174.     {
  175.         case 'GB': $size /= 1000;
  176.         case 'MB': $size /= 1000;
  177.         case 'KB': $size /= 1000;
  178.     }
  179.    
  180.     return $size.' '.$format;
  181. }
  182.  
  183. ?>
  184.  
  185. <form method='post' enctype='multipart/form-data'>
  186.     <input name='MAX_FILE_SIZE' type='hidden' value='<?= $settings['file_maxsize']; ?>' />
  187.     <input name='p1' type='file' accept='<?= implode(',', $settings['ext']); ?>' />
  188.     <input name='send' type='submit' value='Send' />
  189. </form>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement