免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3159 | 回复: 2
打印 上一主题 下一主题

PHP实现文件上传的思路及实例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-08 13:19 |只看该作者 |倒序浏览
文件上传我们需要用到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﹥
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98439/showart_1958470.html

论坛徽章:
0
2 [报告]
发表于 2011-03-15 16:05 |只看该作者
回复 1# 路_人_


    $url_dir = http://.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

这行好像不行吧?有冒号哎。。。

论坛徽章:
0
3 [报告]
发表于 2011-03-21 11:43 |只看该作者
支持,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP