07月11, 2014

php中文件上传相关的基础知识记录

在公司制作大冶咪力豆奶网站的时候,导航栏目下面有一个人才招聘的二级菜单,里面有招聘信息和求职中心,我在求职中心做了个应聘的表单,提交到后台可以查看相关应聘者的信息,其中这里面有个可以上传附件的文本域,之前在做先锋旅游网站的时候碰到过文件上传的相关问题,那个网站是同事处理的.

(该企业网站项目也是用phpcms制作的),于是我就参考了以前的解决方法,但是还是遇到了一些小问题.就是文件上传的部分在后台一直看不到相关的信息,即没有上传成功.

记得当时是周五,我下午下班的时候最后一个走的,还是没有找到原因.(一些表单中该注意的,或者添加的相关信息也都弄了),晚上也没怎么睡好,第二天周末我一个人来到公司,继续查找相关的问,我将前台提交的数据都打印出来看下,其他的信息都能够正确的打印出来,就是上传附件的那个一直为空,于是我就继续对应查找相关的字段是否有问题,结果我将$_FILES['name']打印出来看下,却显示1,上网查找结果发现了问题,(注意修改php.ini 中 upload_max_filesize的文件限制大小)

就是我的本地phpstudy中的配置文件php.ini中的upload_max_filesize文件限制了大小2M,修改这个值,保存后重新开启服务器即可.当时感觉到心情好了许多,以后遇到问题还是要多尝试,多打印调试.程序就是慢慢调试出来的.(遇到问题,解决问题,享受解决问题带来的快乐,~~~)

1.文件上传前台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>
    <!-- 此行定义字符集,在使用汉字的国家,字符集通常有 gb2312,utf-8两种字符集,设置不对会导致页面中文乱码因为我的编辑器是utf-8的,所以这里我定义字符集为utf-8。如果你的字符集是gb2312可以修改charset值 -->
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- 此行多是IE浏览器不兼容导致的,现在IE6,IE7使用的人数不多了,大多数可以忽略 -->
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    <!-- 定义文档标题 -->
    <title>PHP上传实例</title>
    <!-- 加入js脚本,简单的前端判断,防止没有选择上传文件就点击提交 -->
    <script type="text/javascript">
    // 当页面加载完后执行里边的函数体

    // 因为页面的加载顺序是自上到下,否则你把JS移到页脚也可以

    window.onload = function() {
        // 给上传按钮添加鼠标单击事件
        document.forms[0].elements[1].onclick = function() {

            // 判断要上传的文件名是否为空
            if (document.forms[0].upfile.value == '') {
                // 如果是空则弹出警告
                alert('请先选择文件');

                // 结束脚本运行
                return false;
            }

            // 如果文件不为空则上传文件
            document.forms[0].submit();
        }

    }
    </script>
</head>

<body>
    <div align="center" style="width:60%; height:300px; font-size:13px;margin:0 auto;">
        <h3>上传图片预览</h3>
        <form name="frm" action="upload.php" method="post" enctype="multipart/form-data">
            <font style="letter-spacing:1px" color="#FF0000">*只允许上传jpg|png|bmp|pjpeg|gif格式的图片</font>
            <br /><br />
            请选择图片:
            <input name='upfile' type='file' />
            <input name="btn" type="submit" value="上传" /><br />
        </form>
    </div>
</body>

</html>

2.后台php处理页面相关代码:

<?php
//全局变量
$arrType=array('image/jpg','image/gif','image/png','image/bmp','image/pjpeg','image/jpeg');

$max_size='1024000000';      // 最大文件限制(单位:byte)
$upfile='./uploadimage'; //图片目录路径
$file=$_FILES['upfile'];

//print_r($file);
//exit;

   if($_SERVER['REQUEST_METHOD']=='POST'){ //判断提交方式是否为POST
     if(!is_uploaded_file($file['tmp_name'])){ //判断上传文件是否存在
    echo "<font color='#FF0000'>文件不存在!</font>";
    exit;
    }

  if($file['size']>$max_size){  //判断文件大小是否大于500000字节
    echo "<font color='#FF0000'>上传文件太大!</font>";
    exit;
   } 
  if(!in_array($file['type'],$arrType)){  //判断图片文件的格式
     echo "<font color='#FF0000'>上传文件格式不对!</font>";
     exit;
   }
  if(!file_exists($upfile)){  // 判断存放文件目录是否存在
   mkdir($upfile,0777,true);
   } 
   $imageSize=getimagesize($file['tmp_name']);
   $img=$imageSize[0].'*'.$imageSize[1];
   $fname=$file['name'];
   $ftype=explode('.',$fname);
   $fn=date("YmdHis");
   $picName=$upfile."/ $fn".$fname;

   //echo  $picName;
   //exit;

   if(file_exists($picName)){
    echo "<font color='#FF0000'>同文件名已存在!</font>";
    exit;
     }
   if(!move_uploaded_file($file['tmp_name'],$picName)){  
    echo "<font color='#FF0000'>移动文件出错!</font>";
    exit;
    }
   else{
    echo "<font color='#FF0000'>图片文件上传成功!</font><br/>";
    echo "<font color='#0000FF'>图片大小:$img</font><br/>";
    echo "图片预览:<br><div style='border:#F00 1px solid; width:$imageSize[0];height:$imageSize[1]'>
    <img src=\"".$picName."\">图片文件名称:$fn$fname</div>";
    }
 }
?>

本文链接:https://901web.com/post/php中文件上传相关的基础知识记录.html

-- EOF --

Comments

请在后台配置评论类型和相关的值。