建议大家使用FireFox、Opera、Safri、IE8+等主流浏览器访问本站,否则可能会出现不兼容等问题!

PHP 文件上传过程实例

PHP学习 凶恶的方块 7499次浏览 已收录 14个评论

前言:

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

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

PHP 文件上传过程实例

实现过程:

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这种衍生语言,更要仔细不可。


方块网络 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明PHP 文件上传过程实例
喜欢 (5)or分享 (0)
avatar
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(14)个小伙伴在吐槽
  1. avatar
    后缀名这个确实很容易遗漏,学习了
    正儿八经是小可2015-08-11 10:02 回复 Windows 8.1 | Chrome 44.0.2403.130
  2. avatar
    好玩意!!博主也是PHP大婶?
    姜辰2015-07-23 18:08 回复 Windows XP | 搜狗浏览器 2.X
    • :arrow: 都变大婶了,嫂嫂我也不容易啊。其实我是个渣渣,才入门的 :wink:
      凶恶的方块2015-07-24 14:45 回复 Windows XP | Chrome 40.0.2214.93
  3. avatar
    拜读一下,哈哈
    yameimei2015-07-12 09:40 回复 Windows 7 | 搜狗浏览器 2.X
  4. avatar
    看图片吧
    小幻2015-07-11 13:53 回复 Windows 7 | Chrome 38.0.2125.122
  5. avatar
    额,传不上代码……格式判断可以用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 回复 Windows 7 | Chrome 38.0.2125.122
    • 可以使用array_reverse();调转value值,然后取0。屏蔽传马问题。
      凶恶的方块2015-07-12 23:12 回复 Windows XP | Chrome 40.0.2214.93
  6. avatar
    格式判断可以用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 回复 Windows 7 | Chrome 38.0.2125.122
    • :shock: 直接在代码高亮框写的.....
      凶恶的方块2015-07-11 13:51 回复 Windows XP | Chrome 40.0.2214.93
    • 我代码高亮怎么死了...
      凶恶的方块2015-07-11 13:51 回复 Windows XP | Chrome 40.0.2214.93
      • avatar
        表示php直接给转码了
        小幻2015-07-11 13:53 回复 Windows 7 | Chrome 38.0.2125.122
  7. avatar
    看你这么每天踏踏实实的努力,真为你高兴!赞!!好样的!!签到成功!签到时间:2015-07-10 22:00:21,每日打卡,生活更精彩哦~
    huowolf2015-07-10 22:03 回复 Android 4.4.4 | Safari 533.1
    • 特么,完全没学会,自己敲个两三遍不行 :evil:
      凶恶的方块2015-07-11 13:32 回复 Windows XP | Chrome 40.0.2214.93