调用 函数phpinfo() 查看
配置 | 说明 |
---|---|
file_uploads | 是否允许上传文件,On开启 Off禁止上传 |
upload_tmp_dir | 文件上传过程中临时保存的目录,默认保存位置为 /tmp |
upload_max_filesize | 允许上传的最大文件大小,可以使用 K、M、G单位如 2M |
post_max_size | PHP将接受的最大POST数据大小,包括上传文件、表单数据。所以post_max_size要大于 upload_max_filesize |
max_file_uploads | 单个请求时,允许上传的最大文件数量 |
upload_max_filesize
设置项限制的是单个文件上传的大小<form action="01.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="">
<button>提交</button>
</form>
<?php
header("Content-Type: text/html;charset=utf-8");
var_dump($_FILES['file']);
$_FILES [‘input_name‘]
$_FILES [‘input_name‘][‘name‘]
:原始上传文件名$_FILES [‘input_name‘][‘type‘]
:上传文件的mime类型$_FILES [‘input_name‘][‘tmp_name‘]
:上传文件保存的临时目录$_FILES [‘input_name‘][‘error‘]
:上传错误信息$_FILES [‘input_name‘][‘size‘]
:以字节为单位表示的文件的大小array(5) {
["name"]=>
string(8) "nmap.bat"
["type"]=>
string(24) "application/octet-stream"
["tmp_name"]=>
string(47) "C:\Users\lanying\AppData\Local\Temp\php8CEA.tmp"
["error"]=>
int(0)
["size"]=>
int(7)
}
上传出错会在$_FILES[‘error‘] 选项中体现,具体错误说明如下:
错误 | 错误码 | 说明 |
---|---|---|
UPLOAD_ERR_OK | 0 | 没有错误发生 |
UPLOAD_ERR_INI_SIZE | 1 | 上传的文件超过了 php.ini 中 upload_max_filesize |
错误 | 错误码 | 说明 |
---|---|---|
UPLOAD_ERR_FORM_SIZE | 2 | 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值 |
UPLOAD_ERR_PARTIAL | 3 | 文件只有部分被上传 |
UPLOAD_ERR_NO_FILE | 4 | 没有文件被上传 |
UPLOAD_ERR_NO_TMP_DIR | 6 | 找不到临时文件夹 |
UPLOAD_ERR_CANT_WRITE | 7 | 文件写入失败 |
name 使用数组作为属性值
<form action="02.php" method="post" enctype="multipart/form-data">
<input type="file" name="file[]" id="">
<input type="file" name="file[]" id="">
<input type="file" name="file[]" id="">
<button>提交</button>
</form>
<?php
var_dump($_FILES['file']);
// var_dump($_FILES['file']['type'][1]);
输出结果:
array(5) {
["name"]=>
array(3) {
[0]=>
string(12) "README-WIN32"
[1]=>
string(12) "python27.dll"
[2]=>
string(12) "README-WIN32"
}
["type"]=>
array(3) {
[0]=>
string(24) "application/octet-stream"
[1]=>
string(0) ""
[2]=>
string(24) "application/octet-stream"
}
($_FILES[‘file‘][‘type‘][1]
获取上传第二个文件的文件类型
bool is_uploaded_file ( string $filename )
is_uploaded_file($FILES[‘input_name‘][‘tmp_name‘]);
bool move_uploaded_file ( string $filename , string $destination )
Move_uploaded_file($FILES[‘input_name‘][‘tmp_name‘],‘文件命名和保存地址‘);
索引数组
关联数组
关联数组中的键标记为 =>
$result[]
默认从第0个元素开始迭代
$msg = [
'name' => 'wukong',
'age' => 500
];
foreach($msg as $value){
echo $value; // wukong500
} // 此时只迭代值
echo "<br></br>";
foreach($msg as $key => $value){
} // 同时迭代键和值
? mkdir( string $pathname[, int $mode = 0777[, bool $recursive=FALSE [, resource $context ]]] ) : bool
mkdir() 函数 根据传入的路径常见目录
mode参数在Windows下被忽略
第三个参数选择是否设置递归模式
is_dir( string $filename) : bool
pathinfo($_FILES[ ‘file‘] [‘name‘]);
array(4) {
["dirname"]=>
string(1) "."
["basename"]=>
string(22) "3rd-party-licenses.txt"
["extension"]=>
string(3) "txt"
["filename"]=>
string(18) "3rd-party-licenses"
}
// 通常用扩展名这个属性
目标:能够处理单文件上传也能够处理多文件上传
<form action="controller.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="">
<input type="file" name="files[]" id="">
<input type="file" name="files[]" id="">
<button>提交</button>
</form>
makeDir() 判断uploads文件夹是否存在,不存在则创建
format() 函数 将单文件上传和多文件上传时的文件信息保存入一个二维数组
make() 函数对上传文件进行移动和校验
<?php
class Uploader{
public function make(){
$path = $this->makeDir();
$files = $this->format();
foreach ($files as $file) {
if($file['error'] == 0){
if(is_uploaded_file($file['tmp_name'])){
$ex = pathinfo($file['name'])['extension'];
move_uploaded_file($file['tmp_name'],$path."/".mt_rand(1,9999).".".$ex);
}
}else{
echo "上传失败";
}
}
var_dump($files);
}
// TODO:foreach 语句
private function format(){
// 对数组中存有数据的格式化:将三维数组和二维数组中存有的信息统一存入一个二维数组
// 定义一个数组存储信息
$files = [];
foreach($_FILES as $file){
if(is_array($file['name'])){
// 对三位数组进行遍历,一个上传文件的信息作为一个一维数组的元素
foreach($file['name'] as $id => $value){
$files[] = [
'name' => $file['name'][$id],
'type' => $file['type'][$id],
'error' => $file['error'][$id],
'tmp_name' => $file['tmp_name'][$id],
'size' => $file['size'][$id]
]; // 数组不写下标时默认从0开始一直往下迭代
}
}else{
$files[] = $file;
}
}
return $files;
}
// 如果没有上传文件目录就建立
public function makeDir(){
$path = 'uploads/'.date('Y-m-d');
is_dir($path) or mkdir($path,0755,true);
return $path;
// TODO 文件操作函数
}
}
原文:https://www.cnblogs.com/lanying0/p/12355627.html