用PHP文件上传的具体思路及实现
热 ★★★★
用PHP文件上传的具体思路及实现
作者:闵涛 文章来源:闵涛的学习笔记 点击数:556 更新时间:2009/4/23 11:03:15
文件上传我们需要用到HTML里面表单的type=file类型,及其enctype属性。这是我们大家必须要用的。当然了PHP函数库当中的FILE函数库,字符串类型函数库,目录函数库及$_FILES[]的使用是我们必须要用到的。
也许每一个站点都可能会对上传文件有许多的限制,这些限制会包括
文件类型,文件大小,扩展名,以及上传目录的存在与否,上传文件的存在与否,目录的可写性,可读性,上传文件的改名及怎样把文件从缓存当中复制到你所需要的目录当中。 当然出错的预处理也是我们不容忽视的!如果再深一步的讨论我们还可以对文件的操作起用事件日志的记录。 下面我们通过一段程序来实现这些功能: 首先是我们预设的变量值,它包括文件大小,文件扩展名类型,MIMI类型,及是否删除的开关变量
$MAX_SIZE = 2000000; $FILE_MIMES =
array('image/jpeg','image/jpg','image/gif' ,'image/png','application/msword'); $FILE_EXTS
= array('.zip','.jpg','.png','.gif'); $DELETABLE = true;
下一部就是设置浏览器访问变量及目录访问变量:
$site_name = $_SERVER['HTTP_HOST']; $url_dir =
http://.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); $url_this
= http://.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $upload_dir =
files/; $upload_url = $url_dir./files/; $message
=; 建立上传目录并相应改变权限:
if (!is_dir(files)) { if (!mkdir($upload_dir)) die
(upload_files directory doesn't exist and creation failed); if
(!chmod($upload_dir,0755)) die (change permission to 755
failed.); } 用户请求的处理:
if ($_REQUEST[del] && $DELETABLE) { $resource =
fopen(log.txt,a); fwrite($resource,date(Ymd h:i:s).DELETE -
$_SERVER[REMOTE_ADDR].$_REQUEST[del]\\n); fclose($resource); if
(strpos($_REQUEST[del],/.)>0); //possible hacking else if
(strpos($_REQUEST[del],files/) === false); //possible hacking else if
(substr($_REQUEST[del],0,6)==files/)
{ unlink($_REQUEST[del]); print
<script>window.location.href='$url_this?message=deleted
successfully'</script>; } } else if ($_FILES['userfile'])
{ $resource = fopen(log.txt,a); fwrite($resource,date(Ymd
h:i:s).UPLOAD - $_SERVER[REMOTE_ADDR] .$_FILES['userfile']['name'].
.$_FILES['userfile']['type'].\\n); fclose($resource); $file_type
= $_FILES['userfile']['type']; $file_name =
$_FILES['userfile']['name']; $file_ext =
strtolower(substr($file_name,strrpos($file_name,.))); //文件大小的检查: if
( $_FILES['userfile']['size'] > $MAX_SIZE) $message = The file size
is over 2MB.; //File Type/Extension Check else if
(!in_array($file_type, $FILE_MIMES) && !in_array($file_ext,
$FILE_EXTS) ) $message = Sorry, $file_name($file_type) is not allowed
to be uploaded.; else $message = do_upload($upload_dir,
$upload_url); print
<script>window.location.href='$url_this?message=$message'</script>; } else
if (!$_FILES['userfile']); else $message = Invalid File
Specified.; 列出我们上传的文件: $handle=opendir($upload_dir); $filelist
= ; while ($file = readdir($handle)) { if(!is_dir($file) &&
!is_link($file)) { $filelist .= <a
href='$upload_dir$file'>.$file.</a>; if ($DELETABLE) $filelist .=
<a href='?del=$upload_dir$file' title='delete'>x</a>; $filelist .=
<sub><small><small><font color=grey> .date(d-m H:i,
filemtime($upload_dir.$file)) .</font></small></small></sub>; $filelist
.=<br>; } } function do_upload($upload_dir, $upload_url)
{ $temp_name = $_FILES['userfile']['tmp_name']; $file_name =
$_FILES['userfile']['name']; $file_name =
str_replace(\\\\,,$file_name); $file_name =
str_replace(',,$file_name); $file_path =
$upload_dir.$file_name; //File Name Check if ( $file_name ==)
{ $message = Invalid File Name Specified; return
$message; } $result = move_uploaded_file($temp_name,
$file_path); if (!chmod($file_path,0777)) $message = change
permission to 777 failed.; else $message = ($result)?$file_name
uploaded successfully. : Somthing is wrong with uploading a
file.; return $message; } ?> <center> <font
color=red><?=$_REQUEST[message]?></font> <br> <form name=upload
id=upload ENCTYPE=multipart/form-data method=post> Upload File <input
type=file id=userfile name=userfile> <input type=submit name=upload
value=Upload> </form> <br><b>My Files</b> <hr
width=70%> <?=$filelist?> <hr width=70%> <small><sup>Developed By
<a style=text-decoration:none
href=http://tech.citypost.ca>CityPost.ca</a> </sup></small> </center> 15a
没有相关教程
教程录入:mintao 责任编辑:mintao
上一篇教程: 利用PHP编程防范XSS跨站脚本攻击 下一篇教程: 使用PHP编写基于Web的文件管理系统
【字体:小 大 】【发表评论 】【加入收藏 】【告诉好友 】【打印此文 】【关闭窗口 】
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
网友评论: (只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
同类栏目
赞助链接
500 - 内部服务器错误。
500 - 内部服务器错误。
您查找的资源存在问题,因而无法显示。