PHP新手上路(八)


Posted in PHP onOctober 09, 2006

7. 文件上传

你可以利用PHP实现文件的上传功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上的版本。同时,因为本程序与你的PHP配置文件(PHP3为php3.ini,PHP4为php.in)设置有关。在执行该程序之前请先检查您的PHP配置文件有没有做好如下的设置:

将;upload_tmp_dir该行的注释符,即前面的分号“;”去掉,使该行在php.ini文档中起作用。upload_tmp_dir是用来定义上传文件存放的临时路径,在这里你还可以给其定义一个绝对路径,例如:upload_tmp_dir = d:upload  当然,此时你的d:upload目录必须有读写权限。

如果你在你的.php3程序里已经定义了上传的路径,此时上传文件的路径以.php3程序里定义的路径为基准。在下例中,receiver.php3文件就指定了用于存放上传文件的目录是:d:upload。

upload_max_filesize 是用来限制PHP处理的上载文件大小的最大值,以字节计算,缺省值为2097152= 2*1024*1024字节(2兆),你可以通过修改该缺省值来定义最大的上载文件大小。  

修改后不要忘了重启Apache,IIS或PWS服务哦。  


同时在PHP中,文件上载还有几点是值得注意的:
1. 在form表单中要将method属性设为post,enctype属性设为multipart/form-data;

2. 在form表单中可以加一个hidden类型的input框,其中名字为 MAX_FILE_SIZE的隐藏值域,通过设置其VALUE可以限制上载文件的大小。当然,这个值不可能超过PHP的配置文件(PHP3为php3.ini,PHP4为php.ini)中的upload_max_filesize,注意这个input框一定要放在所有file类型的input框前面,否则也是无效的哦;  

3. 在PHP程序运行完后,上传文件被放在了临时目录下。如果上传文件没有被改名或移动,那么在请求的最后该文件将自动被从临时文件夹中删除,所以我们最好立即将新的上传文件上传移到一个永久目录下或更改其文件名。  

首先我们需要一个上载文件的表单网页(upload.htm):  
<HTML>
<HEAD>
<TITLE>Upload Your File</TITLE>
</HEAD>
<BODY>
<FORM ACTION="receiver.php3"
ENCTYPE="multipart/form-data" METHOD=POST>
<INPUT TYPE="HIDDEN"
NAME="MAX_FILE_SIZE" VALUE="2000000">
<INPUT TYPE="FILE"
NAME="uploadfile" SIZE="24" MAXLENGTH="80">
<BR><BR>
<INPUT TYPE="SUBMIT" VALUE="Upload File!"
NAME="sendit">
<INPUT TYPE="SUBMIT" VALUE="Cancel"
NAME="cancelit"><BR>
</FORM>
</BODY>
</HTML>

处理上载文件的PHP文件(receiver.php3)
<?
function do_upload ()
{
global $uploadfile, $uploadfile_size;
global $local_file, $error_msg;
if ( $uploadfile == "none" )
{
$error_msg = "对不起,你没有选定任何文件上传!";
return;
}
if ( $uploadfile_size > 2000000 )
{
$error_msg = "对不起,你要上传的文件太大了!";
return;
}
$the_time = time ();

// 在这里指定你用来存放上传文件的目录,你需要对以下目录有写权限
// 同时,我们也可以给上传文件指定另外的目录,如:$upload_dir = "/local/uploads";  

$upload_dir = "d:/upload";
$local_file = "$upload_dir/$the_time";
if ( file_exists ( '$local_file' ) )
{
$seq = 1;
while ( file_exists ( "$upload_dir/$the_time$seq" ) ) { $seq++; }
$local_file = "$upload_dir/$the_time$seq";
};
rename ( $uploadfile, $local_file );
display_page ();
}
function display_page ()
{
// 这里是你的页面内容
}
?>
<HTML>
<HEAD>
<TITLE>php3 Receiving Script</TITLE>
</HEAD>
<BODY>
<?
if ( $error_msg ) { echo "<B>$error_msg</B><BR><BR>"; }
if ( $sendit )
{
do_upload ();
echo "文件上载成功!";
}
elseif ( $cancelit )
{
header ( "Location: $some_other_script" );
echo "文件上载失败!";
exit;
}
else
{
some_other_func ();
}
?>
</BODY>
</HTML> v   

PHP 相关文章推荐
用php+javascript实现二级级联菜单的制作
May 06 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
PHP排序算法的复习和总结
Feb 15 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
原生php实现excel文件读写的方法分析
Apr 25 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
laravel通用化的CURD的实现
Dec 13 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 PHP
网络资源
Oct 09 #PHP
PHP中的正规表达式(一)
Oct 09 #PHP
PHP中的正规表达式(二)
Oct 09 #PHP
smtp邮件发送一例
Oct 09 #PHP
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 #PHP
PHP+javascript液晶时钟
Oct 09 #PHP
一个分页的论坛
Oct 09 #PHP
You might like
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
JScript的条件编译
2007/05/29 Javascript
ext 代码生成器
2009/08/07 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
教师个人剖析材料
2014/02/05 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
导游词之张家口
2019/12/13 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android