0xx_PHP núcleo _ carga de archivos

Hoy 1.1 goles

  1. Entendido mejor envasado de características similares;
  2. Entender el código de acuerdo con la clasificación de las funciones de gestión de pensamiento y de negocios;
  3. Comprender el papel del controlador común, un controlador maestro común de paquete;
  4. Dominar las aplicaciones principales herencia PHP orientado a objetos;
  5. Comprender la específica escenarios de aplicación plug-in;
  6. La comprensión de los conceptos de la tecnología de plantillas;
  7. Entender la tecnología plantilla de principios;

Subir 1.2 archivo

1.2.1 paquete de la clase de carga de archivos

1. Crear Upload.class.php en el directorio lib

<?php
namespace Lib;
class Upload{
    private $path;  //上传的路径
    private $size;  //上传的大小
    private $type;  //允许上传的类型
    private $error; //保存错误信息
    
    public function __construct($path,$size,$type) {
        $this->path=$path;
        $this->size=$size;
        $this->type=$type;
    }
    //返回错误信息
    public function getError(){
        return $this->error;
    }
    /*
     * 文件上传
     * @param $files array $_FILES[]
     * @return bool|string 成功返回文件路径,失败返回false
     */
    public function uploadOne($files){
        if($this->checkError($files)){  //没有错误就上传
            $foldername=date('Y-m-d');		//文件夹名称
            $folderpath= $this->path.$foldername;	//文件夹路径
            if(!is_dir($folderpath))
                mkdir($folderpath);
            $filename=uniqid('',true).strrchr($files['name'],'.');//文件名
            $filepath="$folderpath/$filename";	//文件路径
            if(move_uploaded_file($files['tmp_name'],$filepath))
                return "{$foldername}/{$filename}";
            else{
                $this->error='上传失败<br>';
                return false;
            }
        }
        return false;
    }
    //验证上传是否有误
    private function checkError($files){
        //1、验证错误号
        if($files['error']!=0){
            switch($files['error']) {
                case 1:
                    $this->error='文件大小超过了php.ini中允许的最大值,最大值是:'.ini_get('upload_max_filesize');
                    return false;
                case 2:
                    $this->error='文件大小超过了表单允许的最大值';
                    return false;
                case 3:
                    $this->error='只有部分文件上传';
                    return false;
                case 4:
                    $this->error='没有文件上传';
                    return false;
                case 6:
                    $this->error='找不到临时文件';
                    return false;
                case 7:
                   $this->error='文件写入失败';
                    return false;
                default:
                   $this->error= '未知错误';
                    return false;
            }
        }
        //2、验证格式
	$info=finfo_open(FILEINFO_MIME_TYPE);
	$mime=finfo_file($info,$files['tmp_name']);
	if(!in_array($mime, $this->type)){
            $this->error='只能上传'.implode(',', $this->type).'格式';
            return false;
	}
	//3、验证大小
	if($files['size']> $this->size){
            $this->error='文件大小不能超过'.number_format($this->size/1024,1).'K';
            return false;
	}
	//4、验证是否是http上传
	if(!is_uploaded_file($files['tmp_name'])){
            $this->error='文件不是HTTP POST上传的<br>';
            return false;
        }
        return true;
    }
}

1.2.2 miniatura paquete de Clase

La creación de Image.class.php en el directorio lib

<?php
namespace Lib;
class Image{
    /*
     * 制作缩略图
     * @param $src_path 源图的路径
     */
    public function thumb($src_path,$prefix='small_',$w=200,$h=200){
        $dst_img=imagecreatetruecolor($w,$h);   //目标图
        $src_img=imagecreatefromjpeg($src_path);    //源图
        $src_w=imagesx($src_img);
        $src_h=imagesy($src_img);
        imagecopyresampled($dst_img,$src_img,0,0,0,0,$w,$h,$src_w,$src_h);
        $filename=basename($src_path);  //文件名
        $foldername=substr(dirname($src_path),-10); //目录名
        $save_path= dirname($src_path).'/'.$prefix.$filename;
        imagejpeg($dst_img,$save_path);
        return "{$foldername}/{$prefix}{$filename}";
    }
}

1.2.3 Cargar archivos

1, register.html

 <form action="" method="post" enctype="multipart/form-data">
     ...

2, cambiar el controlador de registro

public function registerAction(){
    //第二步:执行注册逻辑
    if(!empty($_POST)){
        //文件上传
        $path=$GLOBALS['config']['app']['path'];
        $size=$GLOBALS['config']['app']['size'];
        $type=$GLOBALS['config']['app']['type'];
        $upload=new \Lib\Upload($path, $size, $type);
        if($filepath=$upload->uploadOne($_FILES['face'])){
            //生成缩略图
            $image=new \Lib\Image();
            $data['user_face']=$image->thumb($path.$filepath,'s1_');
        }else{
            $this->error('index.php?p=Admin&c=Login&a=register', $upload->getError());
        }
        //文件上传结束
        ...

3, el archivo de configuración

 'app'       =>array(
        'path'  =>  './Public/Uploads/',
        'size'  =>  1234567,
        'type'  =>  ['image/png','image/jpeg','image/gif'],

Iniciar sesión Módulo 1.3

1.3.1 Recordar contraseña

Después de un inicio de sesión correcto, si es necesario registrar un nombre de usuario y contraseña, el nombre de usuario y contraseña en una cookie

1561951991167

Abra la página de inicio de sesión cuando el valor de adquisición de la cookie

información de la cookie se muestra en la página de vista (login.html) página

<input type="text" class="input" name="username" placeholder="登录账号" value="<?=$name?>"  />
...
<input type="password" class="input" name="password" placeholder="登录密码" value="<?=$pwd?>" />

Los resultados operativos

1.3.2 Seguridad Salir

Salir: Salir cuando no se destruye token de
seguridad de salida: salida de fichas cuando se destruye

top.html

<a class="button button-little bg-yellow" href="index.php?p=Admin&c=Login&a=logout" target="_top">安全退出</a>

_top:表示在最顶端的窗口中打开

Controller (LoginController)

public function logoutAction(){
    session_destroy();
    header('location:index.php?p=Admin&c=Login&a=login');
}

1.4 Perfil de Smarty

La introducción 1.4.1 Smarty

1, para una división del trabajo, la página de la plantilla es mejor no aparecer el código PHP.

2, necesidad de ser separados de presentación y el contenido

Introducción 1.2.2 Smarty

1.5 Smarty personalizada

1.3.1 Evolución de un: (Smarty generar el archivo mixta)

PHP delimitador no puede aparecer en la plantilla, la formulación estándar de la siguiente manera:

1, los códigos html

<body>
{$title}
</body>

2, Código PHP

<?php
	$title='锄禾';
	require './1-demo.html';

Los resultados operativos

La razón no se resuelve: PHP y no reconoce {}

solución:

Las llaves sustituyen delimitador PHP

la implementación del código

<?php
$title='锄禾';
$str=file_get_contents('./index.html');
$str=str_replace('{','<?php echo ',$str);	//替换左大括号
$str=str_replace('}',';?>',$str);			//替换右大括号
file_put_contents('./index.html.php', $str);	//写入混编文件
require './index.html.php';	//包含混编文件

corrida

1.3.2 Evolución dos: (paquete smarty)

Dado que cada delimitador de la página debe ser reemplazado, es necesario sustituir el código delimitador encapsulado

Dado que la encapsulación en la clase, el método requiere el acceso a todo el acceso por el enfoque orientado a objetos

1. Crear Smarty.class.php

<?php
class Smarty{
	private $tpl_var=array();
	//赋值
	public function assign($k,$v){
		$this->tpl_var[$k]=$v;
	}
	/*
	*作用:编译模板
	*@param $tpl string 模板的路径
	*/
	public function compile($tpl){
		$com_file=$tpl.'.php';		//混编文件地址
		$str=file_get_contents($tpl);
		$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);	//替换左大括号
		$str=str_replace('}','\'];?>',$str);			//替换右大括号
		file_put_contents($com_file, $str);	//写入混编文件
		require $com_file;	//包含混编文件
	}
}

2, en index.php

<?php
require './Smarty.class.php';
$smarty=new Smarty();
$smarty->assign('title','锄禾');
$smarty->compile('./index.html');

resumen:

1, las variables externas necesita ser asignado al interior del objeto

2. Para acceder al modo orientado a objetos

1.3.3 Evolución de tres :( condicional generar el archivo mixta)

existe el archivo mezclado y es hasta la fecha contiene directamente, o para regenerar

hora de modificación de archivo de plantilla <hora de modificación del archivo mixta => archivo mixta es hasta la fecha

código de clase Smarty código compilado de la siguiente

<?php
class Smarty{
	private $tpl_var=array();
	//赋值
	public function assign($k,$v){
		$this->tpl_var[$k]=$v;
	}
	/*
	*作用:编译模板
	*@param $tpl string 模板的路径
	*/
	public function compile($tpl){
		$com_file=$tpl.'.php';		//混编文件地址
		//文件存在,并且模板文件修改时间<混编文件修改时间
		if(file_exists($com_file) && filemtime($tpl)<filemtime($com_file))
			require $com_file;
		else{
			$str=file_get_contents($tpl);
			$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);	//替换左大括号
			$str=str_replace('}','\'];?>',$str);			//替换右大括号
			file_put_contents($com_file, $str);	//写入混编文件
			require $com_file;	//包含混编文件
		}
	}
}

resumen:

Los archivos generados condiciones mixtas

1, no hay mezclado

2, modificar la plantilla, el tiempo de modificación del archivo de plantilla> hora de modificación del archivo mixta, descripción de la plantilla modificada.

1.3.4 Evolución de cuatro: el almacenamiento de clasificación de documentos

  1. Los archivos de plantilla: Vista

  2. archivo mixta: viewC

  3. Smarty Archivos: Smarty.class.php

Smarty.class.php código es el siguiente:

<?php
class Smarty{
   public $template_dir='./templates/';	//默认模板目录
   public $templatec_dir='./templates_c/';	//默认混编目录

   private $tpl_var=array();
   //赋值
   public function assign($k,$v){
   	$this->tpl_var[$k]=$v;
   }
   /*
   *作用:编译模板
   *@param $tpl string 模板的名字
   */
   public function compile($tpl){
   	$tpl_file=$this->template_dir.$tpl;	//拼接模板地址
   	$com_file=$this->templatec_dir.$tpl.'.php';		//混编文件地址
   	//文件存在,并且模板文件修改时间<混编文件修改时间
   	if(file_exists($com_file) && filemtime($tpl_file)<filemtime($com_file))
   		require $com_file;
   	else{
   		$str=file_get_contents($tpl_file);
   		$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);	//替换左大括号
   		$str=str_replace('}','\'];?>',$str);			//替换右大括号
   		file_put_contents($com_file, $str);	//写入混编文件
   		require $com_file;	//包含混编文件
   	}
   }
}

código index.php es el siguiente

<?php
require './Smarty/Smarty.class.php';
$smarty=new Smarty();
$smarty->template_dir='./view/';	//更改模板目录
$smarty->templatec_dir='./viewc/';	//更改混编目录
$smarty->assign('title','锄禾');
$smarty->compile('index.html');

1.3.5 Evolución Cinco: método de compilación del paquete

método compilado es un núcleo método smarty, el método núcleo generalmente no se llama directamente, la necesidad de embalaje secundario

Smarty.class.php

<?php
class Smarty{
	...
	public function display($tpl){
		require $this->compile($tpl);
	}
	/*
	*作用:编译模板
	*@param $tpl string 模板的名字
	*/
	private function compile($tpl){
		..
		//文件存在,并且模板文件修改时间<混编文件修改时间
		if(file_exists($com_file) && filemtime($tpl_file)<filemtime($com_file))
			return $com_file;    //返回混编地址
		else{
			$str=file_get_contents($tpl_file);
			$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);	//替换左大括号
			$str=str_replace('}','\'];?>',$str);			//替换右大括号
			file_put_contents($com_file, $str);	//写入混编文件
			return $com_file;	//返回混编地址
		}
	}
}

index.php

<?php
...
$smarty->assign('title','锄禾');
$smarty->display('index.html');	//传递文件名

1.6 Introducción oficial de Smarty

1.6.1 estructura de directorios de Smarty

Para www.smarty.netdescargar la última versión de Smarty

descompresión

libs estructura de directorios

Smarty necesidad de conocer las propiedades y métodos

public $left_delimiter = "{";		//左界定
public $right_delimiter = "}";		//右界定
protected $template_dir = array('./templates/');	//默认模板目录
protected $compile_dir = './templates_c/';			//默认混编目录
protected $config_dir = array('./configs/');		//默认配置目录
protected $cache_dir = './cache/';					//默认缓存目录


public function setTemplateDir(){}					//设置模板文件夹
public function setConfigDir(){}					//设置配置文件夹
public function setCompileDir(){}					//设置混编文件夹
public function setCacheDir(){}						//设置缓存文件夹

Ejercicio:

以下关于Smarty配置描述正确的是(ABCD)
	A: 使用left_delimiter属性可以修改Smarty左定界符;	 
	B: 使用right_delimiter属性可以修改Smarty右定界符;	 
	C: 使用setTemplateDir()方法可以重新指定默认模板工作目录;	 
	D: 使用setCompileDir()方法可以重新指定默认编译文件工作目录。	 

simple operación 1.6.2 Smarty

1, el directorio de bibliotecas se copian en el sitio, sabelotodo cambiado el nombre

2. Cree un directorio de plantillas plantillas

3, crea templates_c directorio de hash

4, crear un 1-demo.php en el sitio

<?php
require './Smarty/Smarty.class.php';
$smarty=new Smarty();
$smarty->assign('title','锄禾');
$smarty->left_delimiter='{{';		//更改左界定
$smarty->right_delimiter='}}';		//更改右界定
$smarty->setTemplateDir('./view/');	//设置模板目录
$smarty->setCompileDir('./viewc/');	//设置混编目录
$smarty->display('1-demo.html');

En las plantillas creadas demo1.html

<body>
	{{$title}}
</body>

1.6.3 Notas

Sintaxis: * *} {

Nota: Smarty comentario no puede ver en el código fuente.

Pensamientos: delimitadores conocidos son sabelotodo {* y *}, toma nota de lo que es?

A: {} **

Supongo que te gusta

Origin www.cnblogs.com/xeclass/p/12657525.html
Recomendado
Clasificación