The PHP upload files often encountered several problems summed up, later use will not have to look for.
1. Make a simple upload file first
Copy the Code code as follows:
Copy the Code code as follows:
<?php
if (($_files["File" ["Size"] < 20000)
{
if ($_files["file" ["error"] > 0)
{
echo "Return Code:". $_files["File" ["Error"]. "
";
}
Else
{
echo "Upload:". $_files["File" ["Name"]. "
";
echo "Type:". $_files["File" ["type"]. "
";
echo "Size:". ($_files["File" ["Size"]/1024). The Kb
";
echo "Temp file:". $_files["File" ["Tmp_name"]. "
";
if (file_exists ("upload/". $_files["File" ["Name"]))
{
echo $_files["File" ["Name"]. "already exists.";
}
Else
{
Move_uploaded_file ($_files["file"] ["Tmp_name"],
"Upload/". $_files["File" ["name"]);
echo "Stored in:". " Upload/". $_files["File" ["Name"];
}
}
}
Else
{
echo "Invalid file";
}
?>
2. Then understand the value of the Super global variable $_files
Copy the Code code as follows:
$_files[' UserFile ' [' Name ']
$_files[' userfile ' [' type ']
$_files[' userfile ' [' Size ']
$_files[' UserFile ' [' Tmp_name ']
$_files[' userfile ' [' Error ']
where all values of $_files[' userfile ' [' Error '] are:
Upload_err_ok The value is 0, no error occurred and the file upload was successful.
Upload_err_ini_size has a value of 1, the uploaded file exceeds the value of the Upload_max_filesize option limit in php.ini.
Upload_err_form_size its value is 2, the size of the uploaded file exceeds the value specified by the Max_file_size option in the HTML form.
Upload_err_partial its value is 3, the file is only partially uploaded.
Upload_err_no_file has a value of 4 and no files are uploaded.
Upload_err_no_tmp_dir its value is 6 and cannot find a temporary folder. PHP 4.3.10 and PHP 5.0.3 introduced.
Upload_err_cant_write The value is 7, the file write fails. PHP 5.1.0 introduced.
3. Many situations: need to strictly judge the upload file type
We know that using $_files[' userfile ' [' type '] is a very unwise way to determine which file type to upload, because the decision is based on the suffix of the file, and anyone can change the suffix of a mp3 file to JPG to disguise it as a picture. Therefore, PHP official recommended to use PHP extension php_fileinfo to determine the MIME file, open the way to expand Baidu a lot, win and Linux slightly different.
4. Scenario One: automatically rename after uploading files with duplicate name
Copy the Code code as follows:
if (File_exists ("./upload/". $_files["File" ["Name"]))
{
do{
$suffix = "";
$suffix _length = 4;
$str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$len = strlen ($str)-1;
Append 4 random characters after file name
for ($i =0; $i < $suffix _length; $i + +) {
$suffix. = $str [rand (0, $len)];
}
$upload _filename = $_files[' file ' [' Name '];
$filename = substr ($upload _filename,0,strrpos ($upload _filename, ".")). $suffix. ".". substr ($upload _filename,strrpos ($_files["File" ["Name"], ".") +1);
}while (File_exists ("./upload/". $filename));
Move_uploaded_file ($_files["file"] ["Tmp_name"], "./upload/". $filename);
}else{
Move_uploaded_file ($_files["file"] ["Tmp_name"], "upload/". $_files["File" ["name"]);
}
5. Scenario Two: upload files According to the date sub-catalogue
Copy the Code code as follows:
$structure = './'. Date ("Y"). ' /'. Date ("M"). ' /'. Date ("D"). ' /';
if (!mkdir ($structure, 0777, True)) {
Die (' Failed to create folders ... ');
}
Move_uploaded_file ($_files["file"] ["Tmp_name"], $structure. $_files["File" ["name"]);
6. Scenario Three: multiple file uploads
Copy the Code code as follows:
Copy the Code code as follows:
<?php
foreach ($_files["Pictures"] ["error"] as $key = $error) {
if ($error = = UPLOAD_ERR_OK) {
$tmp _name = $_files["Pictures" ["Tmp_name"] [$key];
$name = $_files["Pictures" ["Name"] [$key];
Move_uploaded_file ($tmp _name, "data/$name");
}
}
?>
In some cases, this variable structure of multiple files is not useful:
Copy the Code code as follows:
Array (1) {
["Upload"]=>array (2) {
["Name"]=>array (2) {
[0]=>string (9) "File0.txt"
[1]=>string (9) "File1.txt"
}
["Type"]=>array (2) {
[0]=>string (Ten) "Text/plain"
[1]=>string (Ten) "Text/html"
}
}
}
In many cases, we need a structure like this.
Copy the Code code as follows:
Array (1) {
["Upload"]=>array (2) {
[0]=>array (2) {
["Name"]=>string (9) "File0.txt"
["Type"]=>string (Ten) "Text/plain"
},
[1]=>array (2) {
["Name"]=>string (9) "File1.txt"
["Type"]=>string (Ten) "Text/html"
}
}
}
The structure can be easily converted using the following function
Copy the Code code as follows:
function Diverse_array ($vector) {
$result = Array ();
foreach ($vector as $key 1 = $value 1)
foreach ($value 1 as $key 2 = $value 2)
$result [$key 2][$key 1] = $value 2;
return $result;
}
$upload = Diverse_array ($_files["upload"]);
7. Sometimes: need to configure the server to modify the maximum upload file size
First, on the form
You can limit the upload file size (which can be bypassed).
And then you need to adjust the configuration on the server.
Ini:
Max_execution_time = 30 Maximum time per script run, per second
Max_input_time = 60, each script can consume the time, the unit is also the second
Memory_limit = 128M, this is the maximum memory consumed by the script run
Post_max_size = 8M, form submission maximum data is 8M, this item is not limited to upload a single file size, but for the entire form of submission data restrictions.
Upload_max_filesize = 2M, maximum license size for uploaded files
Nginx:
Copy the Code code as follows:
Location/{
root HTML;
Index index.html index.htm;
Client_max_body_size 1000m;
}
The above is the common problem of the treatment method, I hope you can like.