一.单文件上传

图片上传界面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body> <form name='frm'action="./uploadSave.php" method="post" enctype="multipart/form-data">
<input type="file" name="upfile" ></input>
<input type="submit" name="submit" value="上传图片"></input>
</form> </body>
</html>

上传处理文件:

<?php
header('content-type:text/html;charset=utf-8'); /**
* 上传文件:可以通过输入的参数设置上传的文件类型
* 上传文件的大小限制,和上传的路径
* @param [type] $myupfile [表单文件域name的名称]
* @param [type] $maxsize [允许上传的最大值]
* @param [type] $arr_mime [允许的MIME类型]
* @param [type] $path [上传的路径]
* @author qinxiaoshou
* 2017年9月6日
*/ function uploadfile($myupfile, $maxsize, $arr_mine, $path) {
//判断文件是否是通过 HTTP POST 上传的
// if (isset($_POST['submit'])) {}
if(!is_uploaded_file($myupfile['tmp_name'])) {
//如果有错误则直接停止脚本
echo "上传有错误,请重新上传";
}
//判断是否有错误
if ($myupfile['error']) {
echo "上传有错误,请重新上传";
}
//判断文件大小 -- 不允许上传大于2M的文件
if ($myupfile['size'] > $maxsize) {
echo "上传文件过大,请重新上传";
}
//获取文件扩展名
$filename = $myupfile['name'];
// //方法一
//strrpos 计算指定字符串在目标字符串中最后一次出现的 位置
//strrpos(haystack, needle);
//strrpos(大海, 针);
// $index = strrpos($filename,'.');
// $ext = substr($filename,$index);
// echo "$ext"; //方法二
//strrchr - 查找指定字符在字符串的最后一次出现
$ext = strrchr($filename,'.'); // .jpg
// echo $ext;
//判断文件类型 //面向过程风格
$fs = finfo_open(FILEINFO_MIME_TYPE);
$mine = finfo_file($fs,$myupfile['tmp_name']); //允许上传的文件类型
//$arr_mine = ['image/jpeg','image/png'];
//in_array — 检查数组中是否存在某个值
//in_array(needle, haystack)
if(!in_array($mine,$arr_mine)) {
die('文件的类型不正确,请重新上传');
}
//构建临时文件
$filename = $myupfile['tmp_name'];
//构建目标文件
// $path = './upload';
$destination = $path.'/'.date('YmdHis').$ext; //将上传文件移动到新的位置返回布尔
//move_uploaded_file(filename,destination)
//move_uploaded_file(临时文件,自定义目标文件)
if(!move_uploaded_file($filename,$destination)) {
die('上传失败!');
} }

调用封装方法界面

<?php
header('content-type:text/html;charset=utf-8');
//将上传函数包含
require './config.php';
//判断是否是HTTP POST上传的
if (isset($_POST['submit'])) { $myupfile = $_FILES['upload'];
$maxsize = **;
$arr_mine = ['image/jpeg','image/png'];
$path = './upload';
uploadfile($myupfile,$maxsize,$arr_mine,$path);
}else{
//如果直接访问此页面
echo "<script>alert('非法上传');location.href='index2.php'</script>";
}

二,多文件上传

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form name='frm' method='post' action='upload.php' enctype="multipart/form-data">
<table width="50%" border="2" align="center" rules="all" cellpadding="10">
<tr>
<th colspan="2">
上传文件:<br>
<input type="file" name="upload[]"></input><br><br>
<input type="file" name="upload[]"></input><br><br>
<input type="file" name="upload[]"></input><br><br>
<input type="submit" name="submit" value="上传"></input>
</th>
</tr>
</table>
</form>
</body>
</html>

多文件上传处理:

<?php
header('content-type:text/html;charset=utf-8'); if (isset($_POST['submit'])) {
/*echo "<pre>";
print_r($_FILES);
echo "</pre>";
echo "<hr>";*/ $arr = $_FILES['upload'];
echo "<pre>";
print_r($arr);
echo "</pre>";
echo "<hr>"; foreach ($arr['tmp_name'] as $key => $value) {
/*echo $key,$value,"<br>";
die;*/
//构建临时文件
//$filename = $_FILES['upload']['tmp_name'];
//构建目标文件
if( $arr['size'][$key] >2*1024*1024){
die('no');
}
$path = './upload';
//获取一个带前缀、基于当前时间微秒数的唯一ID。
$destination = $path.'/'.uniqid('itcast').'.jpg';
//将上传的文件移动到新位置,返回布尔
//move_uploaded_file(filename, destination)
//move_uploaded_file(临时文件, 自定义目标文件)
if(!move_uploaded_file($value,$destination)){
die('上传失败!');
}
} } else {
//如果直接访问此页面
echo "<script>alert('非法上传');location.href='index.php'</script>";
} ?>

PHP核心编程--文件上传(包含多文件上传)的更多相关文章

  1. Windows核心编程 第十七章 -内存映射文件(上)

    第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...

  2. PHP核心编程--目录操作(包含文件操作)

    一.目录操作 1.    创建目录 创建目录mkdir(目录名称)  //返回值为布尔 一次性创建主目录及其子目录 判断是不是一个目录is_dir  //返回true,false 判断目录或文件是否存 ...

  3. Windows核心编程 第十七章 -内存映射文件(下)

    17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...

  4. 《windows核心编程》 17章 内存映射文件

    内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...

  5. 【Windows核心编程】一个使用内存映射文件进行进程间通信的例子

    进程间通信的方式有很多种,其底层原理使用的都是内存映射文件. 本文实现了Windows核心编程第五版475页上的demo,即使用内存映射文件来在进程间通信. 进程1 按钮[Create  mappin ...

  6. Makefile总述②文件命名、包含其他文件makefile、变量、重建重载、解析

    Makefile的内容 在一个完整的 Makefile 中,包含了 5 个东西:显式规则.隐含规则.变量定义.指示符和注释. 显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件( Ma ...

  7. C/C++不同文件夹下包含头文件的方法及#include的使用

    转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...

  8. Linux系统下curl命令上传文件,文件名包含逗号无法上传

    使用curl命令,将备份好的图片全部重新导入到seaweedfs,图片全部以存储在seaweedfs中的fid命令, fid中间有一个逗号,使用curl命令时报错: curl: (26) couldn ...

  9. Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容

    fs.readdir(path[, options], callback) 例: "use strict"; const fs = require("fs"); ...

  10. C++核心编程

    C++核心编程 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓. 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统 ...

随机推荐

  1. centos yum 坏掉 db 损坏

    #首先清除掉缓存,之后再重建就可以了 rm -f /var/lib/rpm/__db* rpm --rebuilddb 提示的错误应该是: error: rpmdb: BDB0113 Thread/p ...

  2. Cesium实现背景透明的方法

    前言 今天有人在Cesium实验室QQ群里问如何把地球背景做成透明的,当时我以为Cesium比较复杂的渲染机制可能即使context设置了alpha属性也未必能透明,所以和同学说可能得改Cesium代 ...

  3. Spring-session整合到Redis

    闲来无事,学习一下spring的session管理,作为一个初学者,我了解到了如下内容: 1.为何要用Spring-session 在传统单机web应用中,一般使用tomcat/jetty等web容器 ...

  4. Commons BeanUtils工具包

    简介: BeanUtils工具包是由Apache公司所开发,提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理. 我们知道,一个JavaBean通常包含了大 ...

  5. sort方法

    作用:对列表进行排序 >>> spam=[2,5,3,14,1,-7] >>> spam.sort() >>> spam [-7, 1, 2, 3 ...

  6. Python中函数的定义必须在调用的前面

    # -*- coding:utf-8 -*- Python中函数的定义必须在调用的前面,但是在函数的内部调用一个函数,不用考虑顺序,只要被调用的函数被定义了即可 #标准的先函数定义,后函数调用def ...

  7. 点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?

    点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决? window.open("page1.html","win1"); 这句 ...

  8. body-parser与querystring与multer的区别

    body-parser express中间件 body-parser是用来解析http请求体的,是express默认使用的中间件之一. (只解析post的普通数据请求,无法解析post文件请求) 使用 ...

  9. Ubuntu下安装Libpcap

    Libpcap是 Unix/Linux 平台下的网络数据捕获函数包,百度百科是这么说的,唉,不管什么来头,只要帮我完成作业就行,安装过程记录如下: 还是那个套路,先在网上搜了一把,大概也就那样,被疯狂 ...

  10. SpringBoot集成lombook让代码更简洁

    1)添加lombok依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>l ...