php文件上传表单摘自drupal的代码


Posted in PHP onFebruary 15, 2011

drupal文件上传表单的例子

function upload_form() { 
$form = array(); 
// If this #attribute is not present, upload will fail on submit 
$form['#attributes']['enctype'] = 'multipart/form-data'; 
$form['file_upload'] = array( 
'#title' => t('Upload file'), 
'#type' => 'file', 
); 
$form['submit_upload'] = array( 
'#type' => 'submit', 
'#value' => 'Submit' 
); 
return $form; 
} 
function upload_submit($form, &$form_state) { 
$validators = array(); 
$dest = file_directory_path(); 
$file = file_save_upload('file_upload', $validators, $dest); 
//$file will be 0 if the upload doesn't exist, or the $dest directory 
//isn't writable 
if ($file != 0) { 
$file->filepath; // 文件相对路径 
} 
else { 
form_set_error('myform', t("Failed to save the file.")); 
} 
}

PHP文件上传功能代码实例教程
在PHP网站开发中,PHP程序如何实现文件上传功能,一直是新手的课题。而且文件上传功能一般都用得着,比如图片上传。今天就结合具体代码实例和详细注解和大家分享如何编写PHP文件上传代码,适合php初学者学习。

PHP代码实例主要讲述的是图片上传,看懂程序后你可以修改相关文件类型就可以实现其他文件的上传功能。
编程环境

PHP5.2.4,基本上PHP4.3以上版本,此代码都可以使用
准备工作

检查upload_tmp_dir项

如果PHP的开发环境是自行搭建的,你需要在编写文件上传程序前编辑php.ini文件,找到并编辑upload_tmp_dir选项,此项用来设定文件上传至服务器时的临时文件夹,比如upload_tmp_dir = E:/phpos/uploads,然后再重启Apache。如果PHP的开发环境使用的是傻瓜式一键安装包,一般upload_tmp_dir都是设定好了的,你也可以用phpinfo()函数查看下配置。

编写一个upload文件,设定文件上传表单

<form enctype="multipart/form-data" action="upload.php" method="post"> 
<input type="hidden" name="max_file_size" value="100000"> 
<input name="userfile" type="file"> 
<input type="submit" value="上传文件"> 
</form>

注意

1、表单中enctype=”multipart/form-data”必须指定,以便让服务器知道文件带有常规的表单信息。

2、必须有一个可以设置上传文件最大长度的表单区域,即允许上传文件的最大值(按字节计算),它是隐藏值域,即max_file_size,通过设置其Value(值)可以限制上传文件的大小,避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。但是一般别人可以绕过这个值,所以安全起见,最好是在php.ini文件中配置upload_max_filesize选项,设定文件上传的大小,默认是2M。
文件上传程序

function uploadfile($type,$name,$ext,$size,$error,$tmp_name,$targetname,$upload_dir) 
{ 
$MAX_SIZE = 2000000; 
$FILE_MIMES = array('image/pjpeg','image/jpeg','image/jpg','image/gif','image/png'); 
$FILE_EXTS = array('.jpg','.gif','.png','.JPG','.GIF','.PNG'); 
$file_path = $upload_dir.$targetname; 
if(!is_dir($upload_dir)) 
{ 
if(!mkdir($upload_dir)) 
die("文件上传目录不存在并且无法创建文件上传目录"); 
if(!chmod($upload_dir,0755)) 
die("文件上传目录的权限无法设定为可读可写"); 
} 
if($size>$MAX_SIZE) 
die("上传的文件大小超过了规定大小"); 
if($size == 0) 
die("请选择上传的文件"); 
if(!in_array($type,$FILE_MIMES) || !in_array($ext,$FILE_EXTS)) 
die("请上传符合要求的文件类型"); 
if(!move_uploaded_file($tmp_name, $file_path)) 
die("复制文件失败,请重新上传"); 
switch($error) 
{ 
case 0: 
return ; 
case 1: 
die("上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"); 
case 2: 
die("上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"); 
case 3: 
die("文件只有部分被上传"); 
case 4: 
die("没有文件被上传"); 
} 
}

参数说明
$type,$name,$size,$error,$tmp_name对应全局变量$_FILES中的相关变量,即:
$_FILES['userfile']['type']:文件的MIME类型,需要浏览器提供该信息的支持,例如图片类型“image/gif”。
$_FILES['userfile']['name']:客户端文件的原名称。
$_FILES['userfile']['size']:已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']:文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']:和该文件上传相关的错误代码,即
值:0:没有错误发生,文件上传成功。
值:1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
值:2:上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
值:3:文件只有部分被上传。
值:4:没有文件被上传。
$ext:上传文件扩展名
$targetname:文件上传后的最终文件名
$upload_dir:上传至哪个目录下,采用的是相对路径
注释:
第3行~第6行:设定图片文件上传的大小,以及文件的MIME类型以及扩展名,由于此代码为图片文件上传程序,所以两个数组中罗列了所有的图片类型,比如PNG,GIF,JEPG等。
第17行~第24行:如果文件是空的,size等于0;如果图片文件的扩展名或者类型不符,则跳出。
第26行:move_uploaded_file函数的功能是将upload_tmp_dir设定的服务端临时目录中的文件移至由$file_path指定的文件,注意如果目标文件已存在则覆盖目标文件
如何上传多个文件?比如同时上传3个文件
只需将
<input name="userfile" type="file">

改成
<input name="userfile[]" type="file"> 
<input name="userfile[]" type="file"> 
<input name="userfile[]" type="file">

对应的在调用此函数时,$_FILES['userfile']['name'][0],代表第一个文件的相关文件信息,依此类推,其他也一样。
总结

此函数是PHP文件上传中最简单的核心代码,图片上传只是其中一种,只需要修改或者扩充$FILE_MIMES和$FILE_EXTS数组的相关信息,即可实现其他类型的文件上传功能。在函数的外围,根据自己的需要编写相关的其他代码即可实现其他功能,比如和数据库的关联等。

PHP 相关文章推荐
详细介绍PHP应用提速面面观
Oct 09 PHP
wordpress之wp-settings.php
Aug 17 PHP
php 禁止页面缓存输出
Jan 07 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
php微信公众号开发之快递查询
Oct 20 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
php 连接mysql连接被重置的解决方法
Feb 15 #PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 #PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 #PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 #PHP
PHP开发中常用的字符串操作函数
Feb 08 #PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 #PHP
php 数组的指针操作实现代码
Feb 08 #PHP
You might like
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
详解jQuery事件
2017/01/13 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python求质数列表的例子
2019/11/24 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python持续监听文件变化代码实例
2020/07/22 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
2014年教师节演讲稿范文
2014/09/10 职场文书
初一数学教学反思
2016/02/17 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby