文件上传:
1.单个文件上传
2.多个文件上传
一.PHP配置文件中和上传有关的选项
file_uploads=on
upload_max_filesize= 最大不要超过服务器的内存
upload_tmp_dir= 上传文件的临时路径
二.上传表单需要注意事项
1.如果有文件操作,表单的提交方式必须是POST提交
2.表单上传需要使用type为file的表单
3.enctype="multipart/form-data"只要有文件上传就要改为这个值,其他情况可以使用默认值,用来指定表单编码的数据方式,让服务器知道,我们需要传递一个文件并带有一些常规的表单信息
4.建议添加一个MAX_FILE_SIZE隐藏表单,值得单位也是字节
三.PHP处理上传的数据
如果是文件上传的数据则使用$_FILES处理上传的文件
$_POST接受非上传的数据
//上传文件传递的信息
Array
(
[pic] => Array
(
[name] => 1.jpg
[type] => image/jpeg
[tmp_name] => uploadtemp\phpFFAB.tmp
[error] => 0
[size] => 9992
)
1.使用$_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,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。
2.使用$_FILES["表单名"]["size"]限制大小,单位是字节 1M=1000000
3.使用$_FILES["表单名"]["type"]或是文件的扩展名限制类型
4.将上传后的文件名改名
实例:
view.html
<html> <head> <title>File Upload</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> shopname:<input type="text" name="shopname" /><br> shopprice:<input type="text" name="price" /><br> shopnum:<input type="text" name="num" /><br> <input type="hidden" name="MAX_FILE_SIZE" value="20000000" /> shoppic:<input type="file" name="pic"/><br> <input type="submit" name="sub" value="添加商品" /><br> </form> </body> </html>
upload.php
<?php /*echo "<pre>"; print_r($_POST); print_r($_FILES); echo "</pre>"; Array ( [pic] => Array ( [name] => 1.jpg [type] => image/jpeg [tmp_name] => D:\uploadtemp\phpFFAB.tmp [error] => 0 [size] => 9992 ) */ //使用$_FILES["pic"]["error"]检查上传是否出错 if($_FILES["pic"]["error"]>0){ switch($_FILES["pic"]["error"]){ case 1: echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值<br>"; break; case 2: echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。<br>"; break; case 3: echo "文件只有部分被上传。<br>"; break; case 4: echo "没有文件被上传。<br>"; break; default: echo "未知错误<br>"; } } //使用$_FILES["pic"]["size"]限制大小,单位是字节 1M=1000000 //echo $_FILES["pic"]["size"]; $maxsize=50000; //50k if($_FILES["pic"]["size"]>$maxsize){ echo "上传的文件太大,不能超过{$maxsize}字节"; exit; } //使用$_FILES["pic"]["type"]或是文件的扩展名限制类型 /*list($dl,$xl)=explode("/", $_FILES["pic"]["type"]); if($dl!="image"){ echo "请上传一个图片"; exit; }*/ //按.将文件名分割 $arr=explode(".",$_FILES["pic"]["name"]); //取后缀名 $hz=$arr[count($arr)-1]; //echo $hz; //设置上传图片允许的类型 $allowtype=array("png","jpg","jpeg"); //判断后缀是否在要求的图片类型中 if(!in_array($hz,$allowtype)){ echo "这是不允许的类型"; exit; } //将上传后的文件名改名 //将临时位置的文件移动到指定的目录上 //制作上传文件的随机名 $filepath="./upload/"; //随机名路径 $randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100,999).".".$hz; //随机文件名 //判断是否是上传文件 if(is_uploaded_file($_FILES["pic"]["tmp_name"])){ //移动上传文件有专用的函数 if(move_uploaded_file($_FILES["pic"]["tmp_name"],$filepath.$randname)){ echo "上传文件成功!"; }else{ echo "上传失败!"; } }else{ echo "不是一个上传文件"; } //echo "上传文件成功!<br>"; ?>