SoFunction
Updated on 2025-03-10

PHP implements multi-image uploading example

This article describes a practical PHP multi-image file upload class, which supports multi-image upload functions in gif, jpg, jpeg, pjpeg, and png formats. The class can also limit the image type, the size of the uploaded image, set the upload directory, and some submission judgments. In addition, this class is not limited to uploading images, and can also upload file types such as TXT/RAR. It only requires modification of the code. Interested readers can try it out by themselves.

The complete function code of the php multi-image upload class is as follows:

<?php
class more_file_upload{
  const FILE_PATH = '/uploadfile/'; //The directory for the default file upload, please modify it yourself  var file_type;
  var file_type_array;
  var file_type_real_array;
  var file_type_string;
  var file_name;
  var file_size;
  var file_tmp_name;
  var file_error;
  var handledate;
  static totalsize = 0;
  function __construct(file_name, file_error, file_size, file_tmp_name, file_type){
    this -> handledate = date('m-d-Y');
    if (!empty(file_name)){
      this -> file_name = file_name;
      this -> file_error = file_error;
      this -> file_size = file_size;
      this -> file_tmp_name = file_tmp_name;
      this -> file_type = file_type;
      this -> file_type_array = array('/', 'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png');
      this -> file_type_real_array = array(0.1, 'jpg' => 74707370, 'gif' => 7173, 'bmp' => 6677, 'png' => 807871);
      this -> show_execute_message(this -> file_error, this -> file_name, this -> file_type, this -> file_size);
      }
    }
  function __destruct(){
    this -> file_name = NULL;
    this -> file_error = NULL;
    this -> file_size = NULL;
    this -> file_tmp_name = NULL;
    this -> file_type = NULL;
    self :: totalsize = 0;
    }
  function show_execute_message(smfileerror, smfilename, smfiletype, smfilesize){
    if(smfileerror > 0){
      switch (smfileerror){
      case 1: smfilemessage = '<strong>File exceeds the server's convention size!  </strong>';
        break;
      case 2: smfilemessage = '<strong>File exceeds the specified file size!  </strong>';
        break;
      case 3: smfilemessage = '<strong>The file is only partially uploaded!  </strong>';
        break;
      case 4: echo "this-&gt;file_name " . 'File upload failed!  <br/>';
        break;
        }
      self :: __destruct();
      }else{
      smfiletypeflag = array_search(smfiletype, this -&gt; file_type_array);
      // Perform real format verification      if(smfiletypeflag != false){
        file = fopen(this -&gt; file_tmp_name, "rb");
        bin = fread(file, 10);
        fclose(file);
        strInfo = @unpack("c10chars", bin);
        typeCode = intval(strInfo['chars1'] . strInfo['chars2']);
        smfiletypeflag = array_search(typeCode, this -&gt; file_type_real_array);
        if(smfiletypeflag == false){ // Determine whether it is a png image          typeCode = intval(strInfo['chars2'] . strInfo['chars3'] . strInfo['chars4']);
          smfiletypeflag = array_search(typeCode, this -&gt; file_type_real_array);
          if(smfiletypeflag == false){ // Determine whether it is a jpg image            $typeCode = intval(strInfo['chars7'] . strInfo['chars8'] . strInfo['chars9'] . strInfo['chars10']);
            smfiletypeflag = array_search(typeCode, this -&gt; file_type_real_array);
            }
          }
        }
      if($smfiletypeflag == false){
        $smfilemessage = '<strong>The file type is incorrect, please verify!  </strong>';
        self :: __destruct();
        }else{
        $resflag = $this -&gt; move_file($this -&gt; file_tmp_name, this -&gt; file_name);
        if (resflag == 1){
          $smfilemessage = 'The file upload was successful!  ';
          self :: totalsize += intval($smfilesize);
          self :: __destruct();
          }else{
          $smfilemessage = '<strong>File upload failed!  </strong>';
          self :: __destruct();
          }
        }
      }
    $smfilesizeformat = $this -&gt; size_BKM(smfilesize);
    echo '&lt;tr&gt;
&lt;td align="left" &gt;' . smfilename . '&lt;/td&gt;
&lt;td align="center" &gt;' . smfiletype . '&lt;/td&gt;
&lt;td align="center" &gt;' . smfilesizeformat . '&lt;/td&gt;
&lt;td align="center" &gt;' . smfilemessage . '&lt;/td&gt;
&lt;/tr&gt;';
    }
  function move_file(mvfiletmp, mvfilename){ // Move files    mvfilenamearr = explode('.', basename(mvfilename));
    mvfilenamearr[0] = this -&gt; rand_string();
    mvfilename = implode('.', mvfilenamearr);
    if (is_uploaded_file(mvfiletmp)){
      uploadfile = self :: FILE_PATH . "mvfilename";
      result = move_uploaded_file(mvfiletmp, uploadfile);
      return result;
      }
    }
  function rand_string(){
    string = md5(uniqid(rand() . microtime()));
    return string;
    }
  function size_BKM(size){ // B/KB/MB unit conversion    if(size &lt; 1024)
    {
      size_BKM = (string)size . " B";
      }
    elseif(size &lt; (1024 * 1024))
      {
      size_BKM = number_format((double)(size / 1024), 1) . " KB";
      }else
      {
      size_BKM = number_format((double)(size / (1024 * 1024)), 1) . " MB";
      }
    return size_BKM;
    }
  }
?&gt;

Readers can copy the above code into a PHP file and save the file name: more_upload_file., and include the file when using it.