php上传原理及应用,PHP上传原理及应用

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."'

// -->";

}

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值