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个区域 代码区:存放函数体的二进制代码,由操作系统 ...
随机推荐
- [转]Visual Studio 2010单元测试(1)--运行和定义普通单元测试
Visual Studio 2010 运行和定义单元测试 在VS2010中,单元测试的功能很强大,使得建立单元测试和编写单元测试代码,以及管理和运行单元测试都变得简单起来,通过私有访问器可以对私有方法 ...
- Java基础——List集合整理(脑图,源码,面试题)
常在知乎牛客网关注Java的一些面试,了解过校招社招常面哪些内容.Java集合不仅使用频率高而且在初面中也常常被问到,何止是常常,关于ArrayList的扩容,HashMap的一些底层等等都被问到烂了 ...
- tmux连接时多个显示器分别显示不同的窗口大小
如果两个电脑连接同一个tmux,但是他们各自的显示器大小不同,那么就会在一个显示器部分会显示灰色区.在tmux里面有个设置可以更改,在tmux里面输入命令 tmux set-window-opti ...
- windows下docker 启动jenkins成功,浏览器无法访问,拒绝了我们的连接
[问题现象] 在Windows下使用docker启动了一个jenkins,翻越了无数的坑,最后的启动命令为 docker run --name jenkins -u root -p 8000:8000 ...
- 科普 | 编译 V8 源码
2017-02-13 justjavac 象尘说 对于JavaScript程序员来说,可以瞧一瞧justjavac给大家写的科普类读物,V8引擎的分析,“也许你不懂C++”,但是你可以了解一下,总是好 ...
- Python学习 备注
python 3.x中urllib库和urilib2库合并成了urllib库..其中urllib2.urlopen()变成了urllib.request.urlopen() urllib2.Reque ...
- 2018-11-19-windows-应用程序在关机时的退出代号
title author date CreateTime categories windows 应用程序在关机时的退出代号 lindexi 2018-11-19 14:31:38 +0800 2018 ...
- POJ 3122 Pie (贪心+二分)
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...
- (codeforces 853A)Planning 贪心
Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...
- js的剪贴板事件
定义 剪贴板操作包括剪切(cut).复制(copy)和粘贴(paste)这三个操作,快捷键分别是ctrl+x.ctrl+c.ctrl+v.当然也可以使用鼠标右键菜单进行操作 关于这3个操作共对应下列6 ...