PHP 文件上传过程实例

PHP学习 cyanprobe 9年前 (2015-07-10) 10964次浏览 已收录 14个评论

前言:

这是对昨天糊弄课程的补充,今天来看看我的PHP,文件上传过程实现的实际案例。我们来说下这次要实现的功能,首先用户可以选择文件并上传,服务器判断文件类型,并进行重新命名后保存。
ps:感谢挑错党小幻莅临挑错…

本课程中存在的错误:用尾缀分隔的方式可能导致,挂马的危险。比如1.jpg.php就可以成功挂马,应该对文件尾缀进行分隔统计后判断最终尾缀。

2015-07-10_155645

实现过程:

HTML中的文件选项:

 //我们建立index.php为主页
<html>
<body> <form action="up.php" method="POST" enctype="multipart/form-data">
用户名:<input type="text" name="uName" ></br>
图片:<input type="file" name="uImg"></br> //file格式提交组件
<input type="submit" value="提交">
</form>  </body>  </html>

up.php上传页面实现过程:

 <?php
$name=$_POST["uName"];//获取用户名
echo $name."</br>";
$uImg=_FILES["uImg"]; //获得image内容
echo $uImg ; //此时你发现这里输出了一个数组
print_r($uImg);
//array([name]=>test.jpg [type]=>inage/jpeg [tmp_name]=>c:/Windows/tmp/php6F.tmp[error]=>0[size=>99])//数组key分别为文件名称,文件类型,临时存放目录。错误信息,文件大小
[error]错误信息:0文件上传成功 1超过php.ini中文件限制大小 2超过文本域范围 3部分上传 4没有选择上传文件 ……………………
——————————————对文件尾缀进行判断——————————————————
$ext=explode(".",uImg[name]);//用explode“.”为分隔依据,分割文件名。
$extName=$uImg["1"];//获得文件尾缀
if($uImg!=jpg&&$uImg!=jpeg&&$uImg!=gif){
echo"文件格式异常!"; exit;//终止后面程序运行}
——————————————对文件大小进行判断——————————————————
if($uImg["size"]>2000000){
echo "文件过大"; exit;}
——————————————重命名————————————————————————————
$uImgname=time().rand(10000,99999).".".$uImg;
$upLoadUrl="upload/".$uImgname
move_uploaded_file($uImg["tmpname"],$upLoadUrl);
//使用move_uploaded_file(临时目录,拷贝目录);将临时目录中的文件拷贝到指定位置。
?>

一个最基础的,文件上传模块就这样做好了,有兴趣的同学们可以继续折腾在做个类似相册的小工具。

后记:

话说这篇文章是昨天就写好的,给自己一个偷懒的理由—今天发,其实这也是一种蓄力的说~学习超文本预处理器语言的基础一定要扎实,学一点,练一点,不熟悉绝对不能继续,每5天要复习2天。毕竟这种语言的一年自学成功率只有20%。它虽然不是很难,但是对方法和语法要求都是很高的。因为这是fangker的第一门动态语言,关于c语言这种程序之母没有太大的接触,直接上PHP这种衍生语言,更要仔细不可。


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 文件上传过程实例
喜欢 (5)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(14)个小伙伴在吐槽
  1. 看你这么每天踏踏实实的努力,真为你高兴!赞!!好样的!!签到成功!签到时间:2015-07-10 22:00:21,每日打卡,生活更精彩哦~
    huowolf2015-07-10 22:03 回复
  2. 格式判断可以用Mine来完成$_FILES["uImg"]["type"] == "image/gif"而不是使用尾缀来判断,使用尾缀,会导致各种误判 explode 函数是分割数组,你选择了 key[1]当然,可以有key[2]/[3]……这个是不能排除的,而一般的图马则是以 .jpg.php来命名尾缀。当然,生成图马后,文件的Mine属性,会生成为无(也就是怪异属性,和php原本的一样为无)所以,即使是按照后缀进行识别,也请不要,使用分割字符串的方法,而是直接运行格式获取。$extName=$uImg["1"];//获得文件尾缀if($uImg!=jpg&&$uImg!=jpeg&&$uImg!=gif){明显有逻辑上的错误! 在此之前 变量 uImg 应该是一个图片文件,没错吧。是你说来吐槽的,不要怪我,而且你就没运行试试?不说代码问题,就说最开始的<?php 你就写错了 ……居然成了 <php?跪了。我写了个类似的,你可以看一下。 上传txt文本的,你看看,当然,上传图片也可以。(好吧,是我记不住全部的图片Mine……)文件提交成员管理:验证密码:文件上传:
    小幻2015-07-11 13:50 回复
  3. 额,传不上代码……格式判断可以用Mine来完成$_FILES["uImg"]["type"] == "image/gif"而不是使用尾缀来判断,使用尾缀,会导致各种误判 explode 函数是分割数组,你选择了 key[1]当然,可以有key[2]/[3]……这个是不能排除的,而一般的图马则是以 .jpg.php来命名尾缀。当然,生成图马后,文件的Mine属性,会生成为无(也就是怪异属性,和php原本的一样为无)所以,即使是按照后缀进行识别,也请不要,使用分割字符串的方法,而是直接运行格式获取。$extName=$uImg["1"];//获得文件尾缀if($uImg!=jpg&&$uImg!=jpeg&&$uImg!=gif){明显有逻辑上的错误! 在此之前 变量 uImg 应该是一个图片文件,没错吧。是你说来吐槽的,不要怪我,而且你就没运行试试?不说代码问题,就说最开始的<?php 你就写错了 ……居然成了 <php?跪了。我写了个类似的,你可以看一下。 上传txt文本的,你看看,当然,上传图片也可以。(好吧,是我记不住全部的图片Mine……)文件提交成员管理:验证密码:文件上传:
    小幻2015-07-11 13:51 回复
    • cyanprobe
      可以使用array_reverse();调转value值,然后取0。屏蔽传马问题。
      凶恶的方块2015-07-12 23:12 回复
  4. 看图片吧
    小幻2015-07-11 13:53 回复
  5. 拜读一下,哈哈
    yameimei2015-07-12 09:40 回复
  6. 好玩意!!博主也是PHP大婶?
    姜辰2015-07-23 18:08 回复
    • cyanprobe
      :arrow: 都变大婶了,嫂嫂我也不容易啊。其实我是个渣渣,才入门的 :wink:
      凶恶的方块2015-07-24 14:45 回复
  7. 后缀名这个确实很容易遗漏,学习了