1、FORM标签enctype属性
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,
这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form-data,才能完整的传递文件数据
input标签 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)
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 "
alert('$alertInfo'); window.location='".$gotoPage."'
// -->";
}
// 循环排除替换文件名中的非法字符
$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 "
alert('同名文件已经存在,请修改你要上传的文件名'); window.location='".$gotoPage."'
// -->";
}
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 "
alert('文件已经成功上传,但数据插入出现错误'); window.location='".$gotoPage."'
// -->";
}
else
{//把文件从文件临时目录移动到上传目录
echo "
alert('文件已经成功上传'); window.location='".$gotoPage."'
// -->";
}
}
else
{
echo "
alert('文件上传失败'); window.location='".$gotoPage."'
// -->";
}
}
?>