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开发中的错误收集,不定期更新。
Feb 03 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
php实现的Cookies操作类实例
Sep 24 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
功能强大的php分页函数
Jul 20 PHP
PHP实现的贪婪算法实例
Oct 17 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 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写入数据库类代码分享
2011/07/26 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
CSS常用网站布局实例
2008/04/03 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
JS实现瀑布流布局
2017/10/21 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
Python基础中所出现的异常报错总结
2016/11/19 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
优秀党员主要事迹
2014/01/19 职场文书
个人对照检查材料
2014/02/12 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
中等生评语大全
2014/05/04 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
期末考试复习计划
2015/01/19 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS