Blogger Information
Blog 29
fans 0
comment 0
visits 27446
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
文件上传和单例模式
LIWEN的博客
Original
869 people have browsed it

一、文件上传功能的实现:

(一)、准备工作,对php.ini文件进行设置
* 1、file_uploads = on 开启文件上传功能
*2、max_file_uploads 大致意思为:一个表单最多只能上传多少个附件
* 3、upload_tmp_dir 设置临时目录
* 4、upload_max_filesize 设置上传文件的最大大小
* (二)、$_FILES函数 和 move_uploaded_file() 函数
* 1、$_FILES函数:当客户端提交后,我们获得了一个$_FILES 数组,
* $_FILES数组内容如下:
* $_FILES['myFile']['name'] 客户端文件的原名称。
* $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
* $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
* $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
* $_FILES['myFile']['error'] 和该文件上传相关的错误代码。
* 2、move_uploaded_file() 函数:将上传的文件移动到新位置,若成功,则返回 true,否则返回 false。
* 语法:move_uploaded_file(file,newloc) :file,必需,规定要移动的文件。newloc,必需,规定文件的新位置。

代码如下:

<?php
/**
 * 文件上传
 */
error_reporting(E_ALL ^ E_NOTICE);  //不显示notice信息
//第一步:上传文件
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
 //检查一下文件是否要上传
 if (isset($_FILES['upload'])) {
 //设置允许上传的文件类型
 $allowed = ['image/jpeg','image/JPG','image/X-PNG','image/PNG','image/x-png','image/gif'];
 //检查要上传的文件,在不在这个列表中
 if (in_array($_FILES['upload']['type'],$allowed)){
 //将文件存入到临时文件夹中,并进行判断
 $tmpFile = $_FILES['upload']['tmp_name'];
 if (move_uploaded_file($tmpFile,__DIR__.'/uploads'.$_FILES['upload']['name'])){
 echo '<h3>上传成功</h3>';
            }else{
 echo '<h3>上传失败</h3>';
            }
        }
    }
}
//第二步:输出错误信息
//检测上传过程中的错误,$_FIFLES['upload']['error'] == 0 ,没有错误,只要大于0则输出错误信息
if ($_FILES['upload']['error'] > 0){
 switch ($_FILES['upload']['error']){
 case 1:
 print '文件超过了php.ini规定的大小';
 break;
 case 2:
 print '文件超过了表单规定的大小';
 break;
 case 3:
 print '文件只上传了一部分';
 break;
 default:
 print '文件只上传了一部分';
 break;
    }
}

//第三步:删除临时文件
if (file_exists($tmpFile) && is_file($tmpFile)){
 unlink($tmpFile);
}
?>
<!--1、form标签必须设置:enctype="multipart/form-data",固定写法。-->
<!--2、input的类型必须是file,并且推荐前面添加隐藏域,设置一下允许上传的文件大小。-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
 content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h3>文件上传</h3>
<form action="" method="post" enctype="multipart/form-data">
<!--    添加一个隐藏域,限制文件大小-->
 <div><input type="hidden" name="MAX_FILE_SIZE" value="100000"></div>
    <div><input type="file" name="upload"></div>
    <div><input type="submit" value="上传"></div>
</form>
</body>
</html>

二、单例模式

单例模式确保某一个类只有一个实例,单例类不能在其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,不能被克隆,而是会向单例类内部存储的实例返回一个引用。

单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个私有的构造函数:private function __construct(){}
2. 它们拥有一个保存类的实例的静态成员变量,如:private static $instance
3. 它们拥有一个访问这个实例的公共的静态方法,如:public static function getInstance(){}

代码如下:

<?php
/**
 * 单例模式:一个类只允许实例化一次
 */
class Demo
{
    private static $instance = null;  //创建一个私有静态属性,用于在创建实例和类外调用
    //把构造方法私有化
    private function __construct()
    {
    }
    //禁止克隆
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }
    //生成当前类的唯一实例
    public static function getInstance()
    {
        //判断当前的$instance 是不是当前类的实例,如果不是,则new一个实例
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        //如果是当前类的实例,则返回当前类的instance实例
        return self::$instance;
    }
}
$obj1 = Demo::getInstance();
$obj2 = Demo::getInstance();
$obj3 = Demo::getInstance();
$obj4 = Demo::getInstance();
$obj5 = Demo::getInstance();
echo '<pre>';
var_dump($obj1,$obj2,$obj3,$obj4,$obj5);

执行结果如下图:

2018-01-15_154451.png

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post