1、FORM标签enctype属性
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,
这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form-data,才能完整的传递文件数据
<form enctype="multipart/form-data" method="post" name="upform">
input标签 type 属性中的 "file"
<input name="upfile" type="file">
2、$_FILES 系统函数
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 储存的临时文件名,一般是系统默认。
$_FILES['myFile']['error'] 该文件上传相关的错误代码。
--------------type-----------------
image/jpg
image/jpeg
image/png
image/pjpeg
image/gif
image/bmp
image/x-png
application/x-zip-compressed
-------------error-----------------
0; 文件上传成功。
1; 超过了文件大小php.ini中。
2; 超过了文件大小
MAX_FILE_SIZE 选项指定的值。
3; 文件只有部分被上传。
4; 没有文件被上传。
5; 上传文件大小为0。
3、move_uploaded_file函数
上传后移动文件到目标位置的函数
move_uploaded_file(临时文件,目标位置和文件名);
4、is_uploaded_file 函数
判断上传MIME类型的文件函数
is_uploaded_file (MIME)
- <?php
- header("content-type:text/html; charset=utf-8");
- require_once('DBI/DBConn.php');
- $id = $_POST['id'];
- $gotoPage = ($id=='new') ? "./products.php":"./products.php?id=".$id;
- $upload_file=$_FILES["upload_file"]["name"];//获取文件名
- $upload_tmp_file=$_FILES["upload_file"]["tmp_name"];//获取临时文件名
- $upload_filetype=$_FILES["upload_file"]["type"];//获取文件类型
- $upload_status=$_FILES["upload_file"]["error"]; //获取文件出错情况
- $upload_dir="../image/upload/"; //指定文件存储路径
- // 分析文件出错情况并给出提示
- $alertInfo = "";
- switch($upload_status)
- {
- case 0:$alertInfo = ""; break;
- case 1:$alertInfo = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。"; break;
- case 2:$alertInfo = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; break;
- case 3:$alertInfo = "文件只有部分被上传。"; break;
- case 4:$alertInfo = "没有文件被上传。"; break;
- case 6:$alertInfo = "没有找到临时文件目录。"; break;
- case 7:$alertInfo = "文件写入失败。"; break;
- }
- if($upload_status != 0)
- {
- echo "<mce:script lang='javascript'><!--
- alert('$alertInfo'); window.location='".$gotoPage."'
- // --></mce:script>";
- }
- // 循环排除替换文件名中的非法字符
- $errorchar = array ("-"," ","~","!","@","#","$","%","^","&","(",")","+",",","(",")","?","!","“","”","《","》",":",";","——"); //定义非法字符集
- foreach($errorchar as $char)
- {
- if(strpos($upload_file,$char))
- {
- $upload_file = str_replace($char,"_",$upload_file);
- echo "文件名中含有非法字符!已经替换为/"_/"!";
- }
- }
- // 定义文件最终的存储路径和名称
- $upload_path = $upload_dir.$upload_file;
- $gbk_upload_path = iconv('utf-8' , 'gbk' ,$upload_path);
- if(is_uploaded_file($upload_tmp_file) )
- {
- // 检查是否有相同文件存在
- if(file_exists($gbk_upload_path))
- {
- echo "<mce:script lang='javascript'><!--
- alert('同名文件已经存在,请修改你要上传的文件名'); window.location='".$gotoPage."'
- // --></mce:script>";
- }
- else if(move_uploaded_file($upload_tmp_file,$gbk_upload_path))
- {
- $desc = $_POST['desc'];
- $img_path = $upload_file;
- $sql = ($id == 'new') ? "INSERT INTO products (name,img) VALUES ('$name', '$img_path')":
- "UPDATE products SET name ='$desc',img = '$img_path' WHERE id=$id";
- $result =mysql_query($sql) or die;
- //把文件从文件临时目录移动到上传目录
- if(mysql_affected_rows() < 1)
- {
- echo "<mce:script lang='javascript'><!--
- alert('文件已经成功上传,但数据插入出现错误'); window.location='".$gotoPage."'
- // --></mce:script>";
- }
- else
- { //把文件从文件临时目录移动到上传目录
- echo "<mce:script lang='javascript'><!--
- alert('文件已经成功上传'); window.location='".$gotoPage."'
- // --></mce:script>";
- }
- }
- else
- {
- echo "<mce:script lang='javascript'><!--
- alert('文件上传失败'); window.location='".$gotoPage."'
- // --></mce:script>";
- }
- }
- ?>