文件上传需要考虑的细节:
(1), 如何控制用户上传的文件大小 < 2m
(2), 如何控制用户上传的文件类型(问题!) (3), 如何防止用户图片覆盖问题 (4), 如何防止同一个用户上传的文件名相同问题upload.php 这是一个上传文件的界面.
如果要上传文件,我们需要把
<form action=” ” enctype=” multipart/form-data” method=”post”>
上传文件<input type=”file” name=”myfile”/>
<input type=”sumbit” value=”上传”/>
</form>
Document
uploadprocess.php
"; print_r($_FILES); echo $_SERVER['DOCUMENT_ROOT']."";//获取文件服务器的根目录。 echo dirname(__FILE__)."";//获取当前文件的目录; echo __FILE__."";//获取当前文件的目录和文件名。 echo basename(__FILE__);//获取当前文件的目录和文件名。 echo ""; //获取文件的大小 $file_size=$_FILES['myfile']['size']; if($file_size>2*1024*1024){ echo "文件过大,不能上传大于2m文件"; exit(); } //获取文件的类型 $file_type=$_FILES['myfile']['type']; if($file_type!='image/jpg' && $file_type!='image/jpeg'){ echo "文件类型只能是图片 jpg的"; exit(); } //判断是否上传ok if(is_uploaded_file($_FILES['myfile']['tmp_name'])){ //把文件转存到你希望的目录 $uploaded_file=$_FILES['myfile']['tmp_name']; //我们给每个用户动态的创建一个文件夹 $user_path=dirname(__FILE__)."/file/up/".$username; $user_path=iconv("utf-8","gb2312",$user_path); //判断该用户是否已经有文件夹 if(!file_exists($user_path)){ mkdir($user_path); } //$move_to_file=$user_path."/".$_FILES['myfile']['name']; $file_true_name=$_FILES['myfile']['name']; $move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,".")); if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))){ echo $_FILES['myfile']['name']."上传ok"; }else{ echo "文件上传失败"; } }else{ echo "上传失败"; } ?>
1. is_uploaded_file(file)函数判断指定的文件是否是通过 HTTP POST 上传的
如果 file 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。
该函数可以用于确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。
这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。
2. $_FILES
今天我们着重讲$_FILES函数。
当客户端提交后,我们获得了一个$_FILES 数组 $_FILES数组内容如下: $_FILES['myFile']['name'] 客户端文件的原名称。 $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。
3. move_uploaded_file(file,newloc) 将上传的文件移动到新位置
若成功,则返回 true,否则返回 false。
参数 | 描述 |
---|---|
file | 必需。规定要移动的文件。 |
newloc | 必需。规定文件的新位置。 |