java的文件上传相信大家都见识过了,那代码看着都头疼,一个文件上传可以写出几十行的代码用struts2或者smartupload来开发还稍微轻松一点。php的文件上传相比java要简单了许多,很少的代码就可以把功能实现.要学习php文件上传就得知道php处理文件上传的原理,php的这种文件上传机制和java有点不一样。php的处理是如果文件上传表单被提交在apache服务器上就会生成一个临时的数据文件。只有把这个数据文件转存之后上传才算真正的完成。
1.写一个html用来上传文件
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <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"> 文件1:<input type="file" name="img[]"/><br/> 文件2:<input type="file" name="img[]"/><br/> <input type="submit" value="上传"/> </form> </body> </html>
<?php header("Content-type: text/html; charset=utf-8"); //echo "<pre>"; //echo print_r($_FILES); //echo "</pre>"; //取得htdocs的路径 $uploadpath=$_SERVER["DOCUMENT_ROOT"]."/mypic/"; //判断文件类型,如果不是jpg则退出程序 for($i=0;$i<count($_FILES["img"]["type"]);$i++){ if($_FILES["img"]["type"][$i]!="image/jpeg"&&$_FILES["img"]["type"][$i]!=null){ echo "flie type error;"; header("Refresh:2;url=index.html"); exit(); } } for($i=0;$i<count($_FILES["img"]["name"]);$i++){ $fileName=time().rand(1,200).substr($_FILES["img"]["name"][$i],strrpos($_FILES["img"]["name"][$i],".")); //转存文件(php文件的时候其实已经在服务器上生成了临时文件) if(move_uploaded_file($_FILES["img"]["tmp_name"][$i],$uploadpath.$fileName)){ echo $_FILES["img"]["name"][$i]." 保存成功"."<br/>"; } } ?>
Array ( [img] => Array ( [name] => Array ( [0] => 大海.jpg [1] => 小树.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => C:\Windows\Temp\phpBAD8.tmp [1] => C:\Windows\Temp\phpBAE9.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 20251 [1] => 261851 ) ) )
可以看到文件的确上传上去了,开发中需要注意的是上传后文件的重命名,文件类型和大小的判断。一般的网站不允许上传exe或者过大的文件,而且上传的文件也要讲究,例如把不同用户上传的文件放到不同的文件夹里这样管理起来也很方便
最后还需要知道php对文件上传的一些限制:以php5.4为例,该版本支持上传的单个文件为2M,文件上传支持的总文件大小为8M;超过8M提交表单会出现警告和通知,文件也不会上传成功,如果有特别的需要可以修改php.ini文件或用js或用其他开源的文件上传插件。这种限制在java文件上传中是没有的。