PHP上传文件示例
虽然大多数人认为Web只包含网页,但HTTP协议实际上可以传输任何文件,如office文档、PDF、可执行文件、AVI、压缩文件及各种其他文件类型。虽然FTP在历史上一直是向服务器上传文件的标准方式,但通过网页上传文件也逐渐流行起来。
一.PHP上传配置
一般在上传文件之前需要配置php.ini文件,默认可以上传,也可以自己修改
有一些配置指令可用于精细地调节PHP的文件上传功能。这些指令用来确定是否启用PHP的文件上传、可允许的最大上传文件大小、可允许的最大脚本内存分配和其他各种重要的资源。
1.file_uploads=on|off : 确定服务器上的PHP脚本是否可以接受文件上传。
2.max_execution_time=integer :PHP脚本在注册一个致命错误之前可以执行的最长时间,以秒为单位。
3.memory_limit=integer : 设置脚本可以分配到的最大内存,以MB为单位。这可以防止失控的脚本独占服务器内存。
4.upload_max_filesize=integer :设置上传文件最大大小,以MB为单位。此指令必须小于post_max_size。
5.upload_tmp_dir=string :设置上传文件在处理之前必须存放在服务器的临时一个位置,直到文件移动到最终目的地为止。
6.post_max_size=integer :确定通过POST方法可以接受的信息的最大大小,以MB为单位。
二.$_FILES数组
上传表单的HTML
<form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> 上传文件: <input type="file" name="userfile" /> <input type="submit" value="上传" /> </form>
ENCTYPE="multipart/form-data",这里是固定写法,否则文件上传失败
ACTION="upload.php“,定义要处理上传的程序文件路径
METHOD="post",定义传输方式为POST,一般情况下Form提交数据都设置为POST
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">,这是一个隐藏域,定义了上传文件的大小上限,超过这个值时,上传失败。它必须定义在文件上传域的前面.而且这里定义的值不 能超过在php.ini 文件中upload_max_filesize设置的值,否则没有意义了.(注意:MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP.ini设置中的上传文件最大值,是不会 失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。)
<input type="file" name="userfile" />,这是文件上传域,Type属性必须设置为file,但Name属性可以自定义,这个值会在代码文件中使用.
$_FILES超级全局变量,它储存各种与上传有关的信息,这些信息对于通过PHP脚本上传到服务器的文件至关重要。
1.存储在$_FILES["userfile"]["tmp_name"]变量中的值就是文件在Web服务器中临时存储的位置。
2.存储在$_FILES["userfile"]["name"]变量中的值就是用户系统中的文件名称。
3.存储在$_FILES["userfile"]["size"]变量中的值就是文件的字节大小。
4.存储在$_FILES["userfile"]["type"]变量中的值就是文件的MIME类型,例如:text/plain或image/gif。
5.存储在$_FILES["userfile"]["error"]变量中的值将是任何与文件上载相关的错误代码。这是在PHP4.2.0中增加的新特性。error分别提供了一些数组常量:0:表示没有发生错误,1:表示上载文件的大小超出了约定值。文件大小的最大值是PHP配置文件中指定的,该指令是upload_max_filesize。2:表示上载文件大小超出了HTML表单的MAX_FILE_SIZE元素所指定的最大值。3:表示文件只被部分上载。4:表示没有上载任何文件。
<?php print_r($_FILES); ?>
三.PHP上传函数
PHP的文件系统库中提供了大量文件处理函数,除此之外,PHP还提供了两个专门用于文件上传过程的函数:is_uploaded_file()和move_uploaded_file()。
1.确定是否上传文件:is_uploaded_file()
if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
echo '已经上传到临时文件夹';
} else {
echo '失败';
}
2.移动上传文件:move_uploaded_file()
if (!move_uploaded_file($_FILES["userfile"]["tmp_name"],$_FILES["userfile"]["name"])) {
echo '移动失败';
exit;
}
上传文件较完整实例:
demo1.php
<!-- ENCTYPE="multipart/form-data",这里是固定写法,否则文件上传失败 --> <form enctype="multipart/form-data" action="demo2.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
<input type="file" name="userfile" />
<br />
<input type="submit" value="上传" />
</form>
demo2.php
<?php
//接受文件
print_r($_FILES);
//创建一个常量
define('MAX_SIZE', 2000000);
$fileMimes = array('image/jpeg','image/pjpeg','image/gif','image/png','image/x-png');
define('URL',dirname(__FILE__).'\uploads'); //上传目录写成常量,dirname();把魔法常量的目录部分取出 //只能接受jpg gif png文件
// switch ($_FILES['userfile']['type']){
// case 'image/jpeg':
// break;
// case 'image/pjpeg':
// break;
// case 'image/gif':
// break;
// case 'image/png':
// break;
// case 'image/x-png':
// break;
// default:echo "<script>alert('本站只支持指定类型的图片');history.back();</script>";
// exit;
// }
//改进:看起来专业的写法,检查类型是否是数组中的一种
if(is_array($fileMimes)){ //如果数组存在
if (!in_array($_FILES['userfile']['type'], $fileMimes)){ //看在不在这个数组里
echo "<script>alert('本站只支持指定类型的图片');history.back();</script>";
exit;
}
} //如果上传错误怎么办
if($_FILES['userfile']['error']>0){
switch ($_FILES['userfile']['error']){
case 1:echo "<script>alert('上传文件超过约定值1');history.back();</script>";
break;
case 2:echo "<script>alert('上传文件超过约定值2');history.back();</script>";
break;
case 3:echo "<script>alert('部分上传');history.back();</script>";
break;
case 4:echo "<script>alert('没有任何文件上传');history.back();</script>";
break;
}
exit;
} //文件不能太大
if($_FILES['userfile']['size']>MAX_SIZE){
echo "<script>alert('上传文件不能超过两兆');history.back();</script>";
exit;
} /*上传函数 */
//判读文件是否通过HTTP POST上传的
//通过HTTP POST上传后,文件会存放在临时文件夹下
if (!is_dir(URL)){ //判断目录是否存在
mkdir(URL,0777); //最大权限0777,如果没有这个目录,那么就创建
}
if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
//第一个参数,写上文件地址
//第二个参数,要移动到的文件地址
if (!move_uploaded_file($_FILES['userfile']['tmp_name'],URL.'/'.$_FILES['userfile']['name'])){
echo "<script>alert('移动失败');history.back();</script>";
exit;
}
} else {
echo "<script>alert('临时文件夹找不到上传文件');history.back();</script>";
exit;
}
//全部通过就上传成功
echo "<script>alert('文件上传成功');location.href='demo3.php?url=".$_FILES['userfile']['name']."';</script>"
?>
demo3.php:显示出上传图片在demo3.php中
<?php
$url = $_GET['url'];
echo '<img src="uploads/'.$url.'" />';
?>
PHP上传文件示例的更多相关文章
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System;using System.Colle ...
- python网络编程--FTP上传文件示例
1.基础版(供学习了解原理使用,low) server服务端 import socket import struct import json server = socket.socket() ip_p ...
- Python--day67--CBV和FBV、Request对象及上传文件示例
1,CBV版添加新的出版社 views.py文件 urls.py文件 2,Request对象: request对象 当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpReques ...
- php 上传文件 示例
<?php header("content-type:text/html;charset=utf-8"); error_reporting(E_ALL); //session ...
- MVC上传文件示例
[HttpPost] public void SaveFile(FormCollection form) { var c = Request.Files.Count; ]; } @using (Htm ...
- 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件
[源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...
- PHP上传文件详解 错误提示
首先在php.ini里配置上载文件.有以下几个重要的配置单: 选项 默认值 说明 post_max_size 8M 控制以后的POST请求的最大规模.必须大于upload_max_filesize选项 ...
- MVC3+jquery Uploadify 上传文件
最近做项目用到了上传图片的功能,以前也写过这类代码,不过都是用传统的file标签,今天整理一个好用的插件Uploadify..都做了一些注释,一看便知. 可以去官网下载最新的:Uploadify下载地 ...
- 【转】JSP使用上传文件,并生产高清缩略图示例
原文地址:http://blog.csdn.net/yakson/article/details/9875731 前言 刚开始本来只想来测试一下Thumbnails生成缩略图的效果的,顺便来学一下js ...
随机推荐
- 软件工程(FZU2015)赛季得分榜,第三回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- cocopod 中添加第三方框架,包含静态库文件,使用svn添加上传
step one: 进入静态库文件的目录 cd 路径: step two:使用命令添加 svn add 静态库名字; 然后更新一下代码就OK
- CSS3幻灯片制作心得
大神勿喷,这是小弟自己学习的痕迹. CSS3动画效果核心代码 @keyframes slideLeft { 0% { left: -500px; } 100% { ; } } @keyframes s ...
- a版本冲刺第七天
队名:Aruba 队员: 黄辉昌 李陈辉 林炳锋 鄢继仁 张秀锋 章 鼎 学号 昨天完成的任务 今天做的任务 明天要做的任务 困难点 体会 408 学习活动的消息传递和日志分析 因为大家都在赶进 ...
- C#安全性记录
安全性一直是开发中,重中之重的问题.不过平时用的不算特别多,基本上用个MD5,SSL也就到这了.再次记录一下,以免忘记. MD5多次加密 MD5算法是不可逆算法.应用于密码验证,完整性验证这种特征.这 ...
- Linux下C高手成长过程
建议学习路径: 首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了. 然后看看<C程序设计语言>K&R, ...
- HTML5学习笔记(持续更新中....)
平时的工作中,不知不觉我们应用了很多HTML5,但当正儿八经问起来你对HTML5了解多少,很多时候都有点懵. 做个简单的HTML5总结.包括简介.要学的知识点.凌乱的知识点 HMTL5简介 定义:ht ...
- 在.net中使用GAC
转自:http://blog.log4d.com/2011/01/gac/ GAC GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的dll的 ...
- PhpStorm 8.x/9.x 快捷键设置/个性化设置,如何多项目共存?如何更换主题?
1."自定义"常用快捷键(设置成跟Eclipse差不多) 按照路径:File -> Settings -> Appearance & Behavior -> ...
- Chrome 及其 插件“个性化设置”备份
Chrome版本发布时间表 2016.10.13 v54.0.2840.59 主题颜色由 蓝色 变为 灰色 2016.11.17 重新使用 Chrome 浏览器(v54.0.2840.99),并设置 ...