虽然大多数人认为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上传文件示例的更多相关文章

  1. C#使用HttpWebRequest和HttpWebResponse上传文件示例

    C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System;using System.Colle ...

  2. python网络编程--FTP上传文件示例

    1.基础版(供学习了解原理使用,low) server服务端 import socket import struct import json server = socket.socket() ip_p ...

  3. Python--day67--CBV和FBV、Request对象及上传文件示例

    1,CBV版添加新的出版社 views.py文件 urls.py文件 2,Request对象: request对象 当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpReques ...

  4. php 上传文件 示例

    <?php header("content-type:text/html;charset=utf-8"); error_reporting(E_ALL); //session ...

  5. MVC上传文件示例

    [HttpPost] public void SaveFile(FormCollection form) { var c = Request.Files.Count; ]; } @using (Htm ...

  6. 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

    [源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  7. PHP上传文件详解 错误提示

    首先在php.ini里配置上载文件.有以下几个重要的配置单: 选项 默认值 说明 post_max_size 8M 控制以后的POST请求的最大规模.必须大于upload_max_filesize选项 ...

  8. MVC3+jquery Uploadify 上传文件

    最近做项目用到了上传图片的功能,以前也写过这类代码,不过都是用传统的file标签,今天整理一个好用的插件Uploadify..都做了一些注释,一看便知. 可以去官网下载最新的:Uploadify下载地 ...

  9. 【转】JSP使用上传文件,并生产高清缩略图示例

    原文地址:http://blog.csdn.net/yakson/article/details/9875731 前言 刚开始本来只想来测试一下Thumbnails生成缩略图的效果的,顺便来学一下js ...

随机推荐

  1. mysql数据库表结构导出

    mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...

  2. 关于c++类的内存分配

    参考:这里 虽然有些地方错了,但是也可以一看,大概能加深对c++类相关的内存分配的了解 然后这还不算十分深入,更深入的可以看这里. 这本书是时候读一下了:<深度探索C++对象模型> (待续 ...

  3. RecyclerView的使用(二)

    上篇博客讲了如何导入RecyclerView . 本章将告诉小伙伴们怎么使用RecyclerView : 第一步:在布局中使用RecyclerView并且绑定控件: 第二步:自定义Adapter:(继 ...

  4. Ubuntu 14 設定 遠端連線,讓別台電腦可以連線進來

    Ubuntu 14 需 disable 加密,方可 遠端連線 此台電腦 xxx@xxx-ThinkPad-T460p:~$ gsettings set org.gnome.Vino require-e ...

  5. classpath: VS classpath*:

    同名资源存在时,classpath: 只从第一个符合条件的classpath中加载资源,而classpath*: 会从所有的classpath中加载符合条件的资源 classpath*:需要遍历所有的 ...

  6. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  7. UVa 11987 Almost Union-Find(支持删除操作的并查集)

    传送门 Description I hope you know the beautiful Union-Find structure. In this problem, you’re to imple ...

  8. Architectural Model - SNMP Tutorial

    30.3 Architectural Model Despite the potential disadvantages, having TCP/IP management software oper ...

  9. 介绍对称加密的另一个算法——PBE

    除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法 ...

  10. C++变参数模板和...操作符

    https://en.wikipedia.org/wiki/Variadic_template https://msdn.microsoft.com/en-us/library/dn439779.as ...