用PHP文件上传的具体思路及实现

  文件上传我们需要用到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>

时间: 2024-10-31 21:44:12

用PHP文件上传的具体思路及实现的相关文章

PHP文件上传之多文件上传的实现思路_php实例

多文件上传的两种情况 ①使用多个name值 <input type="file" name="file1"> <input type="file" name="file2"> <input type="file" name="file3"> <input type="file" name="file4"&g

PHP文件上传的具体思路及实现

上传 最近一段时间对PHP文件处理方面很感兴趣,因此在许多站点上看了许多的文件处理的文章,但是国内许多的站点上的PHP文件处理方面的知识大多数是你抄我的我抄你的,用baidu.com或者是google.com搜索出来的东西多是重复的.最近在国外一个站点上盾了一篇文章感觉很不错,因此推荐给大家阅读. 首先我们有必要说明一下文件上传的操作流程及用到的知识点: 文件上传我们需要用到HTML里面表单的type="file"类型,及其enctype属性.这是我们大家必须要用的.当然了PHP函数库

Asp.Net 无刷新文件上传并显示进度条的实现方法及思路_实用技巧

相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认"拿来主义",只是我个人更喜欢凡是求个所以然.本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助. 效果图: 本文涉及到的知识点:1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序(IHttpHandler)和

Asp.Net 无刷新文件上传并显示进度条的实现方法及思路

相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦苦来 实现呢?我并不否认"拿来主义",只是我个人更喜欢凡是求个所以然.本篇将阐述通过Html,IHttpHandler和 IHttpAsyncHandler实现文件上传和上传进度的原理,希望对你有多帮助. 效果图: 本文涉及到的知识点: 1.前台用到Html,Ajax,JQuery,JQuery UI 2.后台用到一般处理程序(IHttpHandler)

C# 通用文件上传模块该怎么写?想写个没思路

问题描述 最近要做个通用的上传模块把文件上传到服务器!但是上传服务器要服务的吧,一时之间没什么头绪.哪位大神能指点下啊小弟感激不尽啊 解决方案 本帖最后由 gongyq_627 于 2011-06-02 09:28:06 编辑解决方案二:但是上传服务器要服务的吧?不明白你的意思文件上传本没什么复杂的,想要比较好的效果可以考虑使用第三方插件,比如基于Jquery的js插件:Uploadify--解决方案三:usingSystem;usingSystem.Collections.Generic;us

AJAX实现基于WEB的文件上传的进度控制

ajax|web|控制|上传 1. 引言  2. 实现代码  2.1. 服务器端代码  2.1.1. 文件上传状态类(FileUploadStatus)  2.1.2. 文件上传状态侦听类(FileUploadListener)  2.1.3. 后台服务类(BackGroundService)  2.1.4. 文件上传状态控制类(BeanControler)  2.2. 客户端代码  2.2.1. AjaxWrapper.js  2.2.2. fileUpload.html  2.2.3. re

文件上传方法

文件上传是很早以前的事了,最早那会常用的就是IPC连接,然后一个一个的COPY,自从动网upfile漏洞出来以后,各种脚本系统如PHP.JSP下的文件漏洞纷纷暴出,原理都是大同小异,没有过滤文件上传路径,导致可以抓包然后把空格20改成00,变成空字符NULL,系统是从右往左识别的,所以到空字符那就截断了,更简单的就是过滤文件上传类型不完整,改后缀就可以解决了,这些上传文件的漏洞,用万能上传工具就可以轻松搞定,不过漏洞文件名不同罢了. 还有一些另类的文件上传方法,是在系统做了比较好的防范下完成的,

多文件上传设计

多文件上传思路是,上传一个文件服务器上同时入库表,然后会callback返回文件信息,js将文件ID插入input fileId,提交整个表单的时候,做sqlupdate将文件的分类和分类ID关联上. 设计优点:根据obj_id,obj_type可以很方便的判断服务器上的文件哪些是无用的临时文件,哪些是用户的有用文件,可以定期做文件清理操作 obj_type "文章表","链接表" Java代码   CREATE TABLE `core_files` (     `

JavaWeb 后端 &lt;十四&gt; 文件上传下载

1.文件上传与下载 案例:          注册表单/保存商品等相关模块!          --à 注册选择头像 / 商品图片          (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 1.1 文件上传 文件上传,要点: 前台:          1. 提交方式:post          2. 表单中有文件上传的表单项: <input type="file" />          3. 指定表单类型:                    默认类