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个区域 代码区:存放函数体的二进制代码,由操作系统 ...
随机推荐
- JZOJ5895【NOIP2018模拟10.5】旅游
题目 Description
- HZOI20190820模拟27题解
A. 小奇挖矿2 显然的O(m)dp:$f[i]=max(f[i-4],f[i-7])+a[i]$,当然你要保证i,i-4,i-7都能到达 #include<iostream> #incl ...
- HZOI2019 A. 那一天我们许下约定 dp
题目大意:https://www.cnblogs.com/Juve/articles/11219089.html 读这道题的题目让我想起了... woc我到底在想什么?好好写题解,现在不是干那个的时候 ...
- c++容器的操作方法总结
一.map 1.创建 typedef map<int,string> descrbe_map_; descrbe_map_ devMap; 或者 map<string,string& ...
- Ionic 微信支付
1.安装插件 ionic plugin add https://github.com/mrwutong/cordova-qdc-wxpay.git 2.代码 controller.js angular ...
- 2019-2-19-win10-uwp-客户端如何发送类到-asp-dotnet-core-作为参数
title author date CreateTime categories win10 uwp 客户端如何发送类到 asp dotnet core 作为参数 lindexi 2019-2-19 9 ...
- YUM配置文件
创建容器,位置在/etc/yum.repos.d,扩展名必须是.repo #cd /etc/yum.repos.d #vim yum.repo 新建一个仓库文件,名字可以随便定义,在 ...
- Leetcode415Add Strings字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包 ...
- Effective Modern C++ 条款3:理解decltype
说起decltype,这是个古灵精怪的东西.对于给定的名字或表达式,decltype能告诉你该名字或表达式的型别.一般来说,它告诉你的结果和你预测的是一样的.不过,偶尔它也会给出某个结果,让你抓耳挠腮 ...
- UI2Code智能生成Flutter代码--整体设计篇
摘要: UI2CODE项目是闲鱼技术团队研发的一款通过机器视觉理解+AI人工智能将UI视觉图片转化为端侧代码的工具. 背景: 随着移动互联网时代的到来,人类的科学技术突飞猛进.然而软件工程师们依旧需要 ...