首  页 | 资讯中心 | 网络学院 | 天新汽车 | 天新手机 | 天新游戏 | 软件开发 | 考试认证
品 牌 机 | 笔 记 本 | 服 务 器 | 天新数码 - DC - DV - MP3 - MP4 - GPS - TV | 数字家庭
硬件 DIY - 主板 - CPU - 内 存 - 硬 盘 - 显示器 - 显卡 - 光驱 - 机箱 - 键鼠 - 网络设备
办公设备 | 打 印 机 | 扫 描 仪 | 投 影 仪 | 一 体 机 | 传 真 机 | 路 由 器 | 交 换 机
软件下载 | 驱动下载 | 游戏下载 | 源码下载 | 教程下载 | 站长在线 | 产品中心 | 报价中心
开发首页 | 开发语言 | .Net开发 | Java开发 | Web开发 | 数据库开发 | 移动开发 | 游戏开发 | 企业开发 | 操作系统 | 软件工程
VB VC Delphi PB BCB C++ - ASP.net C# VB.net - J2EE J2SE J2ME EJB - ASP PHP JSP CGI - MSSQL Oracle DB2 MySQL - CodingLife
  Web开发首页 | ASP开发 | PHP开发 | CGI开发 | Perl开发 | XML开发 | JavaScript | VBScript | Web服务器
  您现在的位置:天新网 > 软件开发 > Web开发 > PHP开发
用PHP文件上传的具体思路及实现
http://dev.21tx.com 2006年01月19日 it计算机教程网

每日文章精萃
.Net:VB.NET中得到计算机硬件信息 Java:为什么要升级到struts1.1
ASP:ASP实用大全-ASP服务器组件(6) PHP:使用php动态生成gif时遇到的问题和解
JSP:Orion系统结构 CGI:perl实例分析教程之二
VB:VB开发应用软件之写在动手之前 VC:完美实现真彩自绘菜单

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

上一篇: 利用PHP编程防范XSS跨站脚本攻击
下一篇: 使用 PHP 5.0创建图形的巧妙方法

编辑推荐
相关内容
·结合AJAX的PHP开发之后退、前进和刷新
·PHP强制对象类型之instanceof操作符
·PHP编程技巧:看实例学正则表达式
·PHP一些常用的正则表达式
·PHP程序员的优化调试技术和技巧
·用PHP与XML联手进行网站开发
·让你的PHP引擎全速运转的三个绝招
·PHP4实际应用经验篇(6)
·Pattern Modifiers - 规则表达式的修饰符
·PHP中的DOM XML函数
·PHP开发入门教程之面向对象
·大型系统上PHP令人不爽的九大原因
·PHPUnit袖珍指南之PHPUnit的目的
·PHP 5.0对象模型深度探索之起步
·PHP中的XML应用
·怎样将MySQL数据库结构和数据导出或导入
·在PHP中操作MySQL要注意哪些问题?
·Output Buffer(输出缓冲)函数的妙用
·用MySQL内建复制来最佳化可用性(四)
·用MySQL内建复制来最佳化可用性(二)
最近更新
人气最热
·利用PHP编程防范XSS跨站脚本攻击
·使用 PHP 5.0创建图形的巧妙方法
·PHP程序加速探索之压缩输出gzip
·PHP程序加速探索之代码优化
·搜索引擎技术核心揭密(PHP版)
·PHP程序漏洞产生的原因和防范方法
·使用MD5变换算法防穷举(冲撞)破译密码
·PHP程序加速探索之脚本执行速度测试
·AJAX技术在PHP开发中的简单应用
·PHP+MySQL分页显示示例分析
·Windows2000下安装Apache PHP4 MySQL
·PHP程序的常见漏洞攻击分析
·初学入门PHP和MySQL
·PHP入门速成(2)
·SSI使用详解
·十天学会php之第二天
·Web技术进阶—PHP构建网站
·如何在PHP中使用Oracle数据库
·Php高手带路--问题汇总解答
·一个完整、安全的用户登录系统

 
·[硬件]爱国者移动存储迷你王(战斧型)测试
·[数码]五色炫彩iPod mini专用橡胶护套
·[汽车]上海经销商欲掀二手车置换高潮
·[开发]关于Delphi中预编译指令的使用方法
·[资讯]英国一项调查显示有工作的女性身体更为
·[游戏]《天堂2》22:30紧急停机维护公告
·[本本]做慈善 苹果ibook讨好美国儿童
·[办公]首家0.55英寸商用液晶投影机面市
·[手机]迪斯尼又添新伙伴 泛泰即将推出米老鼠
·[考试]专家指点:MCP考试新题型一一剖析
·[学院]mknod - 建立块专用或字符专用文件
·[娱乐]乌龙院--独羊难眠
 

关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net