Home > Backend Development > PHP Tutorial > Two implementation methods of php file upload, _PHP tutorial

Two implementation methods of php file upload, _PHP tutorial

WBOY
Release: 2016-07-12 08:55:28
Original
939 people have browsed it

Two implementation methods of php file upload,

There are generally two ways to upload files:

There are two types:
1. Standard input form method, typically using $_FILES to receive;
2. Transmit in Base64 format, usually AJAX asynchronous upload.

The first type
The standard input form method is suitable for uploading large files and supports batch processing. A few key sentences of html code:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic[]" accept="image/*" class="form-control" multiple />
  <input type="submit" value="上传 " />
</form>
Copy after login

Different names:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic_1" accept="image/*" class="form-control" />
  <input type="file" name="id_pic_2" accept="image/*" class="form-control" />
  <input type="submit" value="上传 " />
</form>
Copy after login

Where enctype="multipart/form-data" is essential for file upload. In addition, type="file" sets the input type, and accept="image/*" specifies priority in uploading images (MIME reference manual). Multiple supports selecting multiple files at one time, and pic[] receives multiple files in the form of an array. The mobile terminal can also add the parameter capture="camera" to select the camera to take pictures and upload them.

Backend processing:
Get uploaded files through $_FILES.

$files = $_FILES;
When transferring multiple files, if the names are different, the format of the returned $_FILES array will be different.

When the names are the same:

array(1) {
 ["id_pic"] => array(5) {
  ["name"] => array(2) {
   [0] => string(5) "1.jpg"
   [1] => string(5) "2.jpg"
  }
  ["type"] => array(2) {
   [0] => string(10) "image/jpeg"
   [1] => string(10) "image/jpeg"
  }
  ["tmp_name"] => array(2) {
   [0] => string(27) "C:\Windows\Temp\php7A7E.tmp"
   [1] => string(27) "C:\Windows\Temp\php7A7F.tmp"
  }
  ["error"] => array(2) {
   [0] => int(0)
   [1] => int(0)
  }
  ["size"] => array(2) {
   [0] => int(77357)
   [1] => int(56720)
  }
 }
}
Copy after login


When the names are different:

   array(2) {
 ["id_pic_1"] => array(5) {
  ["name"] => string(5) "1.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEE.tmp"
  ["error"] => int(0)
  ["size"] => int(77357)
 }
 ["id_pic_2"] => array(5) {
  ["name"] => string(5) "2.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp"
  ["error"] => int(0)
  ["size"] => int(56720)
 }
}
Copy after login

When performing foreach traversal on $_FILES, the previous output format is not very convenient. The latter can be traversed directly. We can write a method for unified conversion:

function dealFiles($files) {
    $fileArray = array();
    $n     = 0;
    foreach ($files as $key=>$file){
      if(is_array($file['name'])) {
        $keys    =  array_keys($file);
        $count   =  count($file['name']);
        for ($i=0; $i<$count; $i++) {
          $fileArray[$n]['key'] = $key;
          foreach ($keys as $_key){
            $fileArray[$n][$_key] = $file[$_key][$i];
          }
          $n++;
        }
      }else{
        $fileArray = $files;
        break;
      }
    }
    return $fileArray;
 }
Copy after login

Okay, I talked about how the backend processes the received $_FILES array and converts it into a unified format. The next tasks are mainly:
1. Check whether the uploaded file is illegal;
2. Check whether the uploaded file exceeds the size;
3. Check whether the saved path exists and whether it is writable;
4. File rename;

A very important function is used in the upload process: move_uploaded_file(filename, $destination) to perform file moving operations. Move $_FILES['id_pic']['tmp_name'] to the new path. Of course, before moving, you can use is_uploaded_file($_FILES['id_pic']['tmp_name']) to determine whether the file is uploaded normally.

Multiple file uploads use move_uploaded_file() multiple times in a loop to perform moving operations.

Second type
Mainly upload pictures.
Use the change event of the input to process the image (such as compression) with canvas, and then send the file stream to the backend via ajax.

The basic principle is to render the image through canvas, and then compress and save it into a base64 string through the toDataURL method (can be compiled into a jpg format image).

Backend processing:
The backend will eventually receive the base64 string sent by the frontend, and then process the string into an image. Specifically, please use the keyword base64 to image development language for Google|Baidu. There is a base64Len in the result generated by the front end, which is the length of the string, and the back end should check to confirm whether the submission is complete.

//php示例:
$img = base64_decode($_POST['img']);
$img = imagecreatefromstring($img);

Copy after login

The above is the entire content of this article, I hope it will be helpful to everyone’s study.

Articles you may be interested in:

  • php file upload suffix name and file type comparison table (covering almost all files)
  • Example of php ajax implementation of image file upload function
  • Complete example of video file upload in PHP
  • Using Session and Javascript in PHP to implement file upload progress bar function
  • ThinkPHP combined with AjaxFileUploader to implement refresh-free file upload method
  • Thinkphp multi-file upload implementation method
  • PHP file upload method to determine whether file has been selected to upload files
  • A classic PHP file upload class sharing
  • Configure php.ini Implement PHP file upload function
  • php jQuery.uploadify file upload tutorial

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1117028.htmlTechArticleTwo implementation methods of PHP file upload. There are generally two ways to upload files: There are two ways: 1. Standard input form method, typically $_FILES is used to receive; 2. Use Base64 method...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template