PHP file upload progress processing

When the file is too large, or the user's network status is average, the upload process usually takes a while. If the user is left waiting with a blank screen at this time, I believe most users will directly close the application, so one should monitor the upload progress. The need to report to users in real time was put on the table by Product Wang. A high-quality upload progress prompt will instantly make your app look up to.

Before PHP 5.4, you always needed to install additional extensions to monitor the file upload progress. Starting from 5.4, the new feature of session.upload_progress is introduced. We only need to enable the configuration in php.ini to monitor the file upload progress through the session. in php.ini.

Note: To study this chapter, you need to have a basic foundation in session, javascript and ajax.

We need to configure, pay attention to view and modify the php.ini file:

With the configuration enabled, we can record a complete file upload progress through session. In the session, an array with the following results will appear:

$_SESSION["upload_progress_test"] = array( //请求时间 "start_time" => 1234567890, // 上传文件总大小 "content_length" => 57343257, //已经处理的大小 "bytes_processed" => 453489, //当所有上传处理完成后为TRUE,未完成为false "done" => false, "files" => array( 0 => array( //表单中上传框的名字 "field_name" => "file1", //上传文件的名称 "name" => "test1.avi", //缓存文件,上传的文件即保存在这里 "tmp_name" => "/tmp/phpxxxxxx", //文件上传的错误信息 "error" => 0, //是否上传完成,当这个文件处理完成后会变成TRUE "done" => true, //这个文件开始处理时间 "start_time" => 1234567890, //这个文件已经处理的大小 "bytes_processed" => 57343250, ), 1 => array( "field_name" => "file2", "name" => "test2.avi", "tmp_name" => NULL, "error" => 0, "done" => false, "start_time" => 1234567899, "bytes_processed" => 54554, ), ) );

This array records the progress of file upload in detail, and the status of the files that have been processed is true. Next, we use a jQuery AJAX example to learn the file upload progress process.

First, in the form, you need to add an input tag with type=hidden, and the tag value is customized (it is recommended to use a meaningful value, because this value will be used in the background)

" value="test" />

Here, a div with an ID of progress is added as a container to display the upload progress. We use js's setTimeout() to execute ajax regularly to obtain the file upload progress, and the background file returns the progress percentage of the file upload.

 

The above code returns the file upload progress every 0.1 seconds through JQ's ajax. And display the progress percentage in the div tag.

The background code needs to be divided into two parts. upload.php handles uploading files. progress.php gets the upload progress in the session and returns the progress percentage.

I won’t go into details about file upload here. Please refer to the above for detailed steps. upload.php:

Mainly focus on progress.php:

Here, file progress The code has been completed. With the front-end, we can create a cool file upload function!


Continuing Learning
||
submit Reset Code
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!
##session.upload_progress.name[=PHP_SESSION_UPLOAD_PROGRESS ] If _POST[session.upload_progress.name] is not set, no progress will be reported. ##session.upload_progress.freq[=1%] session.upload_progress.min_freq[=1.0]
Configuration item Description
session.upload_progress.enabled Whether to enable the upload progress report (default enabled) 1 is on, 0 is off
session.upload_progress.cleanup Whether to delete the progress data in time after the upload is completed (enabled by default, recommended to be enabled)
session.upload_progress.prefix[=upload_progress_ ] Progress data will be stored in _SESSION[session.upload_progress.prefix . _POST[session.upload_progress.name]]
The frequency of updating progress (number of bytes processed), also supports percentage representation of '%'.
Time interval for updating progress (second level)