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 Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
php不写闭合标签的好处
Mar 04 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
php + nginx项目中的权限详解
May 23 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 PHP
php传值和传引用的区别点总结
Nov 19 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
试用php中oci8扩展
2015/06/18 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
python 写入csv乱码问题解决方法
2016/10/23 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
制药工程专业毕业生推荐信
2013/12/24 职场文书
公司培训欢迎词
2014/01/10 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
法学个人求职信范文
2014/01/27 职场文书
学生周末长期请假条
2014/02/15 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
考试作弊检讨书
2014/10/21 职场文书
工作自我评价范文
2015/03/05 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
MySQL的索引你了解吗
2022/03/13 MySQL