文件上传
type属性为 file 的 input 元素可以通过表单提交文件(上传文件),服务端PHP可以通过$_FILES获取上传的文件信息
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_FILES); //接收文件,使用一个 叫做 $_FILES 超全局成员 } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="text" name="bar"> --> <input type="file" name="img"> <button>提交</button> </form> </body> </html>
①如果一个表单中有文件域(文件上传),必须将表单的 method 设置为 post , enctype 设置为 multipart / form-data
②接收文件,使用一个叫做 $_FILES 超全局成员
文件上传案例
<?php if($_SERVER['REQUEST_METHOD']==='POST') { postback(); } function postback(){ if(!isset($_FILES['fileUpload'])){ $GLOBALS['message'] ="客户端提交的表单内容中根本没有文件域"; return; } $fileUpload=$_FILES['fileUpload']; echo $fileUpload['error']; if($fileUpload['error'] !== UPLOAD_ERR_OK){ $GLOBALS['message']="上传失败"; //服务端没有接收到上传的文件 return; } $sourceDir = $fileUpload['tmp_name']; //源文件在哪 $targetDir = './targetDir/' . $fileUpload['name']; //目标放在哪 $moved=move_uploaded_file($sourceDir,$targetDir); if(!$moved){ $GLOBALS['message']="上传失败"; return; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="file" name="fileUpload"> <button>上传</button> <?php if(isset($message)): ?> <?php echo $message;?> <?php endif ?> </form> </body> </html>
① $_FILES 是一个关联数组,键为表单的 name , 内容如下:
array(1) {
["fileUpload"]=>
array(5) {
["name"]=>
string(17) "demo.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(27) "C:\Windows\Temp\php786C.tmp"
["error"]=>
int(0)
["size"]=>
int(29501)
}
}
②修改 php.ini 中的 post_max_size配置,让服务端可以接受更大的请求体体积
③修改 php.ini中的 upload_max_filesize 配置,让服务端支持更大的单个上传文件