仓酷云

标题: PHP网站制作之用菜鸟的目光浅谈php上传文件 [打印本页]

作者: 不帅    时间: 2015-1-16 22:13
标题: PHP网站制作之用菜鸟的目光浅谈php上传文件
不过语法好学,但是怎么用语法来实现每个人都有每个人的方式,几乎是各有千秋。然而借鉴别人成功的代码,绝对是有益无害,因此,多看那些经过千锤百炼凝出来的经典代码,是进阶的最好方法。自己因为想写个discuz插件,这个插件功效上触及到上传文件这一功效,故以菜鸟的目光来进修了下php上传文件。起首,w3cshool查了下案例,以为他说的十分具体,连我这个菜鸟都略懂了一二。贴上地点:http://www.w3school.com.cn/php/php_file_upload.asp照着这个解说,写了下他这个demo,贴上代码:html:<formaction="demo.php"method="post"enctype="multipart/form-data"><labelfor="file">Filename:</label><inputtype="file"name="file"id="file"><br/><inputtype="submit"name="submit"value="Submit"/></form>这个表单页,作为php菜鸟的我说下我在这个内里学到的新器材:1.form的属性enctype,百度翻译了下这个单词,才晓得,这个是encodetype的缩写,就是指定往服务器传送信息的编码格局;2.input的type属性file,这个公用文件上传的;php:复制代码//echophpinfo();//var_dump($_FILES);die;if((($_FILES["file"]["type"]=="image/gif")($_FILES["file"]["type"]=="image/jpeg")($_FILES["file"]["type"]=="image/pjpeg"))&&($_FILES["file"]["size"]<100*1024*1024)){if($_FILES["file"]["error"]>0){echo"Error:".$_FILES["file"]["error"]."<br/>";}else{echo"Upload:".$_FILES["file"]["name"]."<br/>";echo"Type:".$_FILES["file"]["type"]."<br/>";echo"Size:".($_FILES["file"]["size"]/1024)."Kb<br/>";echo"Storedin".$_FILES["file"]["tmp_name"];}if(file_exists("upload/".$_FILES["name"]["name"])){echo$_FILES["file"]["name"]."alreadyexists.";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);echo"Storedin:"."upload/".$_FILES["file"]["name"];}}else{echo"Invalidfile";}复制代码关于调试这个demo的时分,我碰到一个成绩:就是运转这个demo的时分php报出warning,暗示上传不乐成。这个时分我就想打印出$_FILES这个变量来看看,了局打印出来发明error=1;才晓得上传的文件凌驾了php.ini的上传文件巨细,招致上传失利。这里说下俺新懂得的常识点:  复制代码  PHP编程言语中的罕见的$_FILES体系函数用法有:  $_FILES[myFile][name]显现客户端文件的原称号。  $_FILES[myFile][type]文件的MIME范例,比方"image/gif"。  $_FILES[myFile][size]已上传文件的巨细,单元为字节。  $_FILES[myFile][tmp_name]贮存的一时文件名,通常为体系默许。  $_FILES[myFile][error]该文件上传相干的毛病代码。以下为分歧代码代表的意义:  0;文件上传乐成。  1;凌驾了文件巨细php.ini中即体系设定的巨细。  2;凌驾了文件巨细  MAX_FILE_SIZE选项指定的值。  3;文件只要部分被上传。  4;没有文件被上传。  5;上传文件巨细为0。复制代码到这里,应当就晓得了我方才运转demo的毛病是啥招致的,那既然发明是php.ini内里限定超越了,那接上去我就修正了下php.ini的设置。总结下我修正这个php.ini上传限定的感觉:起首,要修正php上传文件巨细限定,那要改php.ini内里的两个参数,一个是upload_max_filesize,另有个就是post_max_size,修正下这两个参数的巨细就能够了!其次,就是找准php.ini的地位,我因为当地电脑搭建的是集成情况,以是php.ini在apache文件夹上面,假如是本人搭建的情况,那就在php文件夹上面,假如找不到,echo下phpinfo(),能够看到php.ini文件的地位。那到此为止,跟我差未几的老手们就可以运转w3cshool下面的demo了,完成上传实例了。关于上传文件,我看了下discuz其他插件作者开辟的插件,有点小劳绩,贴下去跟人人分享下:复制代码  $fileTypes=array(mp3,wav);//界说同意上传的文件范例$result=null;$uploadDir=./mail;//上传路径if(!submitcheck($_POST[formhash2])){//检测是不是是上传文件if($_POST[upname]==){//判别上传文件的定名是不是为空$result=lang(plugin/saya_mails,noname);}else{$myfile=$_FILES[myfile];//猎取上传的文件信息$myfileType=substr($myfile[name],strrpos($myfile[name],".")+1);//两种猎取上传文件的后缀名//$myfileTyle=substr(strrchr($myfile[name],.),1);if($myfile[size]>1024*1024*1024){//判别上传文件巨细是不是凌驾限定$result=lang(plugin/saya_mails,big);}elseif(!in_array($myfileType,$fileTypes)){//判别是不是是同意上传的范例$result=lang(plugin/saya_mails,type);}elseif(is_uploaded_file($myfile[tmp_name])){//判别是不是是经由过程HTTPpost上传的文件$toFile=./source/plugin/saya_mails/mail/.$myfile[name];//方针存储地点if(@move_uploaded_file($myfile[tmp_name],$toFile)){//将文件拷贝到方针存储地点//这个中央加@是屏障毛病信息和告诫//if(copy($myfile[tmp_name],$toFile)){$end=0;$result=lang(plugin/saya_mails,success);  }else{$result=lang(plugin/saya_mails,unknow);}}else{$result=lang(plugin/saya_mails,big);}    }  }复制代码对照了下,w3cshool下面的上传实例,以为这个作者写的更完美一点大致流程就是:  1.判别是不是是上传文件,他用的这个办法是discuz自带的,我们一样平常用,就是form传送过去的埋没参数的值存不存在来举行判别;  2.判别上传文件的定名是不是为空,这一步人人能够跳过,这个是他本人写了个input罢了;  3.判别上传巨细是不是超越;  4.猎取文件后缀名,判别是不是是同意的上传文件范例;  5.判别文件是不是是经由过程httppost上传的;  6.挪动保留文件;关于以下流程,团体总结了下本人取得的新的常识点:  1.关于猎取文件的后缀名,原插件作者是经由过程函数strrpos()来前往"."地点的地位,然后经由过程截取函数substr()来取得上传文件的后缀。   这里,strrpos()函数,我本人的了解应当是stringreturnposition的缩写,固然我还没查证过!这个函数是前往字符串里要查找的字符串最初呈现的地位,并前往这个地位。也就是从后往前查,第一次呈现的地位。参考地点:http://www.w3school.com.cn/php/func_string_strrpos.asp  这里原作者用这个办法来判别,一定是能够的,我百度了下,发明也能够用strrchr()和substr()函数互助来完成这个办法,我把我想的办法正文在了下面源代码内里了,实在差未几,strrchr()函数就是前往最初一次呈现的要查找的字符串到开头的字符串,参考地点:http://www.w3school.com.cn/php/func_string_strrchr.asp  经由过程以上两种办法来判别上传文件的范例是不是达标,而不是经由过程$_FILES["file"]["type"]来判别,如许更好判别点,关于老手,由于只需你打印下$_FILES这个参数你就晓得了,type属性没这么判别来的明晰了然。  2.经由过程is_uploaded_file()来判别文件是不是是经由过程http上传的  3.move_uploaded_file()后面的@是用来屏障毛病信息和告诫的学习数据库了,MYSQL可算是PHP的黄金搭档了,不过,虽然话是这么说,你也可能恨不得把MYSQL给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。
作者: 精灵巫婆    时间: 2015-1-18 23:27
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 兰色精灵    时间: 2015-1-18 23:27
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 透明    时间: 2015-1-18 23:29
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 爱飞    时间: 2015-1-18 23:29
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 兰色精灵    时间: 2015-1-19 05:03
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 小妖女    时间: 2015-1-27 19:16
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 只想知道    时间: 2015-2-5 13:52
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
作者: 第二个灵魂    时间: 2015-2-12 01:52
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 飘飘悠悠    时间: 2015-3-2 20:53
本文当是我的笔记啦,遇到的问题随时填充
作者: 变相怪杰    时间: 2015-3-11 06:27
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 因胸联盟    时间: 2015-3-17 22:43
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 愤怒的大鸟    时间: 2015-3-25 04:56
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2