PHP核心编程--文件上传(包含多文件上传)
一.单文件上传
图片上传界面:
<!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核心编程--文件上传(包含多文件上传)的更多相关文章
- Windows核心编程 第十七章 -内存映射文件(上)
第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...
- PHP核心编程--目录操作(包含文件操作)
一.目录操作 1. 创建目录 创建目录mkdir(目录名称) //返回值为布尔 一次性创建主目录及其子目录 判断是不是一个目录is_dir //返回true,false 判断目录或文件是否存 ...
- Windows核心编程 第十七章 -内存映射文件(下)
17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...
- 《windows核心编程》 17章 内存映射文件
内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...
- 【Windows核心编程】一个使用内存映射文件进行进程间通信的例子
进程间通信的方式有很多种,其底层原理使用的都是内存映射文件. 本文实现了Windows核心编程第五版475页上的demo,即使用内存映射文件来在进程间通信. 进程1 按钮[Create mappin ...
- Makefile总述②文件命名、包含其他文件makefile、变量、重建重载、解析
Makefile的内容 在一个完整的 Makefile 中,包含了 5 个东西:显式规则.隐含规则.变量定义.指示符和注释. 显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件( Ma ...
- C/C++不同文件夹下包含头文件的方法及#include的使用
转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...
- Linux系统下curl命令上传文件,文件名包含逗号无法上传
使用curl命令,将备份好的图片全部重新导入到seaweedfs,图片全部以存储在seaweedfs中的fid命令, fid中间有一个逗号,使用curl命令时报错: curl: (26) couldn ...
- Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容
fs.readdir(path[, options], callback) 例: "use strict"; const fs = require("fs"); ...
- C++核心编程
C++核心编程 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓. 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统 ...
随机推荐
- 工控安全入门(六)——逆向角度看Vxworks
上一篇文章中我们对于固件进行了简单的分析,这一篇我们将会补充一些Vxworks的知识,同时继续升入研究固件内容. 由于涉及到操作系统的内容,建议大家在阅读本篇前有一定操作系统知识的基础,或者是阅读我的 ...
- SAS信用评分之逻辑回归的变量选择
SAS信用评分之逻辑回归的变量选择 关于woe的转化,这一部在之前的这篇文章:sas批量输出变量woe值中已经写了,woe也只是简单的公式转化而已,所以在这系列中就不细究了哈.这次的文章我想来讲逻辑回 ...
- vue 路由(二级)配置及详细步骤
1.安装插件(可以选择在初始化项目的时候安装) cnpm install vue-router --save-dev 2.将插件全局引入到项目中(main.js) import VueRouter f ...
- c#日期时间截取
时间格式化CodeDateTime dt = DateTime.Now;Label11.Text = dt.ToString();2005-11-5 13:21:25Label12.Text = dt ...
- Leetcode102. Binary Tree Level Order Traversal二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其 ...
- Leetcode459.Repeated Substring Pattern重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...
- 有趣的纯CSS实现动态晴阴雨雪
我们先来看看实现的效果吧 非常的美腻,对吧.这个是纯css,且单标签实现的哦~ 先贴完整代码,我们再来看看这个里面究竟有什么可以借鉴的知识点 <!DOCTYPE html> <htm ...
- Liferay 7:Liferay内部博客地址
想要了解Liferay最新功能和特性,可以看一看. 非常实用,都是Liferay开发者写的: https://web.liferay.com/zh/community/blogs/all
- DevCloud会员权益升级!日常领码豆,轻松换好礼!
为了回馈每一位用户的使用和支持, 华为云DevCloud上线了会员中心, 大家在会员中心可以通过完成任务赚取码豆, 并在兑换商城兑换精美礼品. 如何通过任务获得码豆? 我们为大家准备了各种日常任务, ...
- CSS作业问题 内容回顾
CSS作业问题 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...