php 上传 实例 讲解
首先是HTML部分,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- * File: upload.php * Powered By Happig * Date:2012-8-30 *--> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件的上传</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" /> <!-- 这个是在上传前确认大小,只是不想客户上传半天被告知,文件太大, --> 选择文件:<input type="file" name="myfile" /> <input type="submit" value="上传文件" /> </form> </body> </html>
下边是php部分
<?php /* * File: upload.php * Powered By Happig * Date:2012-8-30 */ header("Content-Type:text/html;charset=UTF-8 "); error_reporting(); if($_FILES['myfile']['error'] > 0) { //判断文件是否可以成功上传到服务器,0表示上传成功 echo '上传错误: '; switch ($_FILES['myfile']['error']) { case 1: echo '您这个文件太大,我传不上去'; //上传文件大小超出了PHP配置文件中的约定值:upload_max_filesize break; case 2: echo '您这个文件太大,我传不上去'; //上传文件大小超出了表单中的约定值:MAX_FILE_SIZE break; case 3: echo '文件上传不完整,请重新上传'; //文件只有部分被上传了 break; case 4: echo '没有上传任何文件'; break; } exit; //如果$_FILES['myfile']['error']大于0都是有错误,输出错误信息并退出程序 } //获取上传文件的MIME类型中的主类型和子类型 list($maintype,$subtype)=explode("/",$_FILES['myfile']['type']); if ($maintype=="text") { //通过主类型限制不能上传文本文件,例如.txt .html .php等文件文件 echo '问题: 不能上传文本文件。'; exit; //如果用户上传文本文件则退出程序 } $upfile = './uploads/'.time().$_FILES['myfile']['name']; //定义上传后的位置和新文件名 if (function_exists("iconv")){ $upfile = iconv("UTF-8","GB2312",$upfile); } if (is_uploaded_file($_FILES['myfile']['tmp_name'])) { //判断是否为上传文件 if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile)) { //从移动文件 echo '问题: 不能将文件移动到指定目录。'; exit; } }else{ echo '客户您好,上传文件出问题了,请联系网站程序员;<br/>程序员须知:一般情况下报这个错,说明想要从临时文件转为服务器存储的这个文件不是正当途径上传的<br/>'; echo $_FILES['myfile']['name']; exit; } $size=$_FILES['myfile']['size']; //下边这几行是文件大小又 字节 换算为 kb M G 等单位 用一个嵌套循环可能更好些 if ($size>1024*1024*1024) {$size=round($size/(1024*1024*1024),2) ."G";} elseif ($size>1024*1024) {$size=round($size/(1024*1024),2) ."M";} elseif ($size>1024) {$size=round($size/1024,2) ."kb";} else {$size=$size;} echo '文件<b>'.$_FILES['myfile']['name'].'</b>上传成功,大小为<b>'.$size.'</b>!<br>'; //如果文件上传成功则输出 文件名&文件大小(保留两位小数点) ?>