PHP3是一种非常强大的CGI脚本语言,就其语言特点基本上源于C,就其实现方式而言更象PERL,而其对数据库的内在支持更使之成为ASP的强大对手。
首先在前台必须有一个界面
< HTML >
< HEAD >
< TITLE >文件上载界面< /TITLE >
< /HEAD >
< BODY >< TABLE >< CENTER >
< FORM ENCTYPE = "multipart/form-data" NAME = "SubmitForm"
ACTION = "upload.php3" METHOD = "POST" >
< INPUT TYPE = "hidden" NAME =
"MAX_FILE_SIZE" VALUE ="1000000" >
< TR >
< TD >< INPUT NAME = "UploadFile"
TYPE = "file" SIZE = "30" >< /TD >
< /TR >
< TR >
< TD >< INPUT NAME = "submit" VALUE =
"提交" TYPE = "submit" >< /TD >
< TD >< INPUT NAME = "reset" VALUE =
"重置" TYPE = "reset" >< /TD >
< /TR >
< /FORM >< /CENTER >< /TABLE >< /BODY >
< /HTML >
值得注意的是一个 MAX_FILE_SIZE 的隐藏值域,通过设置其VALUE 可以限制上载文件的大小。
然后在后台实现文件上载操作。如果只是最基本的上载,寥寥几行就可以搞定
< ?
If($UploadFile != "none")
{
copy($UploadFile,"$UploadFile_name");
unlink($UploadFile);
}
else
{
echo "你没有选择任何文件上载!";
}
? >
因为form传递过来的值自动赋值给同名变量,所以直接通过$UploadFile可以访问上载的文件,但由于这是一个保存文件的变量,因此文件名字必须通过另外一个$UploadFile_name变量取得。在拷贝文件后删去临时文件(unlink)。
上面的代码完全可以工作,但实际应用中漏洞百出,让我们逐步来完善之
首先,上载的文件必须有一个固定的目录保存,我们在这里用一个$UploadPath 变量保存之,如
$UploadPath = "/home/flier/upload/";
或复杂一点的自动定位,如
$UploadPath = AddSlashes(dirname
($PATH_TRANSLATED))."\\upload\\";
$PATH_TRANSLATED顾名思义是当前传送目录,
我们假定以其一个名为upload的子目录来保存上载的文件。dirname函数返回其目录名,然后加上子目录名
然后用一个变量$FileName保存完整的上载后文件名和路径$FileName = $UploadPath.$UploadFile_name;
其次,我们还想让用户得知上载文件的简要信息,如上载文件的大小
if($UploadFile_size < 1024)
// 上载文件大小
{
$FileSize = (string)$UploadFile_size . " 字节";
}
elseif($UploadFile_size < (1024 * 1024))
{
$FileSize = number_format((double)
($UploadFile_size / 1024), 1) . " KB";
}
else
{
$FileSize = number_format((double)
($UploadFile_size / (1024 * 1024)), 1) . " MB";
}
number_format函数起到格式化输出的作用,具体用法请参照手册
下一步我们必须考虑到文件已经存在和拷贝操作失败的情况,并提供相应的提示信息
if(!file_exists($FileName))
{
if(copy($UploadFile,$FileName))
{
echo "文件 $UploadFile_name
($FileSize)上载成功!";
}
else
{
echo "文件 $UploadFile_name 上载失败!";
}
unlink($UploadFile);
}
else
{
echo "文件 $UploadFile_name 已经存在!";
}
然后我们应该考虑到大文件上载时容易出现超时的情况,可以用set_time_limit($TimeLimit); 加大超时限制时间。
最后,把截面和实现代码综合到一个单独的文件中,为了实现这个想法,我们通过在 form中添加一个隐含值< INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1" > 指出当前的状态(界面或实现),以便区分对待 完成代码如下(文件名upload.php3)
< ?
if(!$UploadAction):
? >
< HTML >
< HEAD >
< TITLE >文件上载界面< /TITLE >
< /HEAD >
< BODY >< TABLE >< CENTER >
< FORM ENCTYPE = "multipart/form-data" NAME =
"SubmitForm" ACTION = "upload.php3" METHOD = "POST" >
< INPUT TYPE = "hidden" NAME =
"MAX_FILE_SIZE" VALUE ="1000000" >
< INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1" >
< TR >
< TD >< INPUT NAME = "UploadFile" TYPE =
"file" SIZE = "30" >< /TD >
< /TR >
< TR >
< TD >< INPUT NAME = "submit" VALUE =
"提交" TYPE = "submit" >< /TD >
< TD >< INPUT NAME = "reset" VALUE =
"重置" TYPE = "reset" >< /TD >
< /TR >
< /FORM >< /CENTER >< /TABLE >< /BODY >
< /HTML >
< ?
else:
? >
< HTML >
< HEAD >
< TITLE >文件上载代码< /TITLE >
< /HEAD >
< BODY >
< ?
$UploadAction=0;
$TimeLimit=60; /* 设置超时限制时间
缺省时间为 30 秒
设置为0时为不限时 */
set_time_limit($TimeLimit);
If(($UploadFile != "none")&&
($UploadFile != ""))
{
$UploadPath = AddSlashes(dirname
($PATH_TRANSLATED))."\\upload\\"; // 上载文件存放路径
$FileName = $UploadPath.$UploadFile_name;
// 上载文件名
if($UploadFile_size < 1024)
// 上载文件大小
{
$FileSize = (string)$UploadFile_size . " 字节";
}
elseif($UploadFile_size < (1024 * 1024))
{
$FileSize = number_format((double)
($UploadFile_size / 1024), 1) . " KB";
}
else
{
$FileSize = number_format((double)
($UploadFile_size / (1024 * 1024)), 1) . " MB";
}
if(!file_exists($FileName))
{
if(copy($UploadFile,$FileName))
{
echo "文件 $UploadFile_name ($FileSize)上载成功!";
}
else
{
echo "文件 $UploadFile_name 上载失败!";
}
unlink($UploadFile);
}
else
{
echo "文件 $UploadFile_name 已经存在!";
}
}
else
{
echo "你没有选择任何文件上载!";
}
set_time_limit(30); // 恢复缺省超时设置
? >
< BR >< A HREF = "upload.php3" >返回< /A >
< /BODY >
< /HTML >
< ?
endif;
用PHP3实现文件上载
时间: 2024-12-30 05:25:57
用PHP3实现文件上载的相关文章
教您纯Jsp的自定义的单个文件上载代码
js 本文是一个纯Jsp的自定义的单个文件上载代码: <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.io.*"%> <%@ page import="java.util.*"%> <%@ page import="javax.servlet.*"%> <%@ page impor
使用JSF和MyFaces实现文件上载
js Web浏览器为我们利用Web应用程序发送文件提供了一条简单的途径,但是当前版本的Java Web标准(servlets.JSP和JSF)却无法为我们提供任何帮助.幸运的是,有一些第三方框架组件(例如Apache Commons File Upload. Apache MyFaces和Oracle ADF Faces)实现了这种特性,它们都暴露了简单的API和定制的标记(tag). 本文的前面一部分介绍文件上载操作是如何实现的,解释了MyFaces和通用文件上载(前者在内部使用了后者).我们
使用ASP实现文件上载(上传)的各种方法
上传 最近做在做项目,涉及到文件上载的问题,找来资料研究了一下.当用户需要将文件传输到服务器上时,常用方法是使用FTP方式,用FTP的话虽然传输稳定,但安全性是个严重的问题,而且FTP服务器读用户库获取权限,这样对于用户使用来说还是不太方便.如果我们能把文件上载功能与Web集成,使用户仅用Web浏览器就能完成上载任务,这对于他们来说将是非常方便的. 网络上有很多介绍ASP上载文件的方法,归结起来有以下三大类实现方法,读者可以根据自己网站的条件和需求来选择合适的方法. 一.服务器组件上载方式: 该
多文件上载系统完整版
<?php //多文件上载系统完整版 //功能强大,可任意控制上载文件数,是否覆盖 include("../include/common.inc"); $title = "多个文件的上载程序"; include("../include/header.inc"); //定义允许上载文件的数目 define("UPLOAD_NO", 10); echo("<p align='center'><fo
PHP实现多文件上载的系统程序
程序 <?php //多文件上载系统完整版 include("../include/common.inc"); $title = "多个文件的上载程序"; include("../include/header.inc"); //定义允许上载文件的数目 define("UPLOAD_NO", 10); echo("<p align='center'><font size='4' color='#
PHP实例:用PHP实现多文件上载系统程序
PHP实例:用PHP实现多文件上载系统程序 <?php //多文件上载系统完整版 include("../include/common.inc"); $title = "多个文件的上载程序"; include("../include/header.inc"); //定义允许上载文件的数目 define("UPLOAD_NO", 10); echo("<p align='center'><fon
在VS.NET下创建文件上载控件
创建|控件 在VS.NET下创建文件上载控件 前言:还记得在asp3.0里,我们为了上载文件可真是煞费苦心,写了一大堆的代码,可执行起来还是那么慢.但在asp.net里这个问题可以轻松搞定,这篇文章我们就探讨如何建立一个用户自定义的文件上载控件,并在我们的.ASPX程序中使用它.正文第一步:开发自定义文件上载控件打开VS.NET,建立一个工程:WebApp,我们使用WebApp项目来做我们的工作.在项目WebApp上点右健选择Add下的Add Web User Control-,这时我们就可以建
利用DWR开发基于Ajax的文件上载portlet
简介 Web 门户为用户提供了访问各种资源和服务的中心网关.与此同时,它们还为用户提供了与其他用户进行资源共享的平台.从照片到音频.视频文件再到研究用的科学数据集,用户可以共享任何内容.因此,文件上载是 Web 门户的一种基本的必备功能. 当今的 Web 门户在很大程度上依赖于 Java portlet 技术.虽然很多使用 Ajax 的开发人员都给出了各种各样的文件上载进度条解决方案,但我们还没有听说过哪个是基于 portlet 的.本文展示了如何开发基于 Ajax 的文件上载 portlet,
php多文件上载系统完整版
<?php //多文件上载系统完整版 include("../include/common.inc"); $title = "多个文件的上载程序"; include("../include/header.inc"); //定义允许上载文件的数目 define("UPLOAD_NO", 10); echo("<p align='center'><font size='4' color='#000