IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> phpmvc框架开发入门-代码审计基础学习 -> 正文阅读

[PHP知识库]phpmvc框架开发入门-代码审计基础学习

day14

日志函数的编写与理解
在Core文件夹下建立Log.class.php

<?php
/**
 * Created by PhpStorm.
 * User: jing
 * Date: 2021-10-26
 * Time: 20:38
 */

class Log{
    //$msg错误日志信息,$level等级,$type文件保存3,$dest目标
    static public function write($msg,$level='ERROR',$type=3,$dest=NULL){
        if (!C('SAVE_LOG')) return; //如果没有开启不走下面
        if (is_null($dest)){//路径为空的话,定义常量,在框架下建立临时目录/temp/log
                $dest = LOG_PATH . '/' . date('Y_m_d'). ".log";
        }

        if (is_dir(LOG_PATH)) error_log("[TIME]:" .date('Y-m-d H:i:s')."{$level}:{msg}\r\n",$type,$dest);
    }
}
?>

配置Config.php文件加入日志开启的参数

'SAVE_LOG'   => true,

1.定义路径
临时目录存放

//临时目录
define('TEMP_PATH',ROOT_PATH . '/Temp');
//日志目录
define('LOG_PATH',TEMP_PATH.'/Log');

2.创建目录数组中添加他们

    private  static  function _create_dir(){
        $arr = array(
            APP_PATH,
            APP_CONFIG_PATH,
            APP_CONTROLLER_PATH,
            APP_TPL_PATH,
            APP_PUBLIC_PATH,
            TEMP_PATH,
            LOG_PATH
    );

3.error_log函数写入报错信息
如果在目录下存在log文件,那么写入日志报错信息\r\n。

4.最后载入类文件

    private  static function _import_file(){
        $fileArr = array(
            CORE_PATH . '/Log.class.php',
            FUNCTION_PATH . '/function.php',
            CORE_PATH . '/Controller.class.php',
            CORE_PATH . '/Application.class.php'

        );

第一阶段

定义核心类
在这里插入图片描述

在这里插入图片描述
定义单入口,创建所需要的文件夹。
在KUAIXUEPHP下创建index.php
里面载入单入口

<?php
require "./KUAIXUEAPP/KUAIXUEAPP.php";

?>

定义核心类KUAIXUEPHP.php
1.设置常量
2.创建目录
3.载入必须的文件
4.执行应用类

<?php
final class KUAIXUEPHP{
//核心run方法
	public static function run(){
	1.设置常量			self::_set_const();  //定义框架与用户的路径方便以后使用
	2.创建目录   		self::_create_dir();    //自动创建所需目录
	3.载入必须的文件		self::_import_file();   //载入框架所需函数文件和类文件
	4.执行应用类			Application::run();
	}
	
    private static function _set_const(){
        //\WWW\KUAIXUEAPP\KUAIXUEAPP\KUAIXUEAPP.php
        #var_dump(__FILE__);
        $path = str_replace('\\','/',__FILE__);
        define('KUAIXUEPHP_PATH',dirname($path));
        define('CONFIG_PATH',KUAIXUEPHP_PATH. '/Config');
        define('DATA_PATH',KUAIXUEPHP_PATH. '/Data');
        define('TPL_PATH',DATA_PATH.'/Tpl');
        define('LIB_PATH',KUAIXUEPHP_PATH. '/Lib');
        define('CORE_PATH',LIB_PATH. '/Core');
        define('FUNCTION_PATH',LIB_PATH. '/Function');

        define('ROOT_PATH',dirname(KUAIXUEPHP_PATH));
        //ROOT_PATH; D:/phpStudy/PHPTutorial/WWW/KUAIXUEAPP

        //临时目录
        define('TEMP_PATH',ROOT_PATH . '/Temp');
        //日志目录
        define('LOG_PATH',TEMP_PATH.'/Log');


        define('APP_PATH',ROOT_PATH. '/'. APP_NAME);
        define('APP_CONFIG_PATH',APP_PATH.'/Config');
        define('APP_CONTROLLER_PATH',APP_PATH.'/Controller');
        define('APP_TPL_PATH',APP_PATH.'/Tpl');
        define('APP_PUBLIC_PATH',APP_TPL_PATH.'/Public');

        define('KUAIXUEPHP_VERSION','1.0');

    }
        private  static  function _create_dir(){
        //创建一个数组,数组是之前定义的目录路径
        $arr = array(
            APP_PATH,
            APP_CONFIG_PATH,
            APP_CONTROLLER_PATH,
            APP_TPL_PATH,
            APP_PUBLIC_PATH,
            TEMP_PATH,
            LOG_PATH
    );
				//循环数组,判断文件夹是否存在,如果不存在就创建文件夹
        foreach ($arr as $v){
            is_dir($v) || mkdir($v,0777,true);
        }


    private  static function _import_file(){
        $fileArr = array(
            CORE_PATH . '/Log.class.php',
            FUNCTION_PATH . '/function.php',    //调用function函数
            CORE_PATH . '/Controller.class.php',
            CORE_PATH . '/Application.class.php'

        );
        foreach ($fileArr  as $v){
        require_once $v;   //包含文件,require去调用函数文件和类文件

		}
  	}
}
KUAIXUEPHP::run(); //入口处
?>

设置index.php和admin.php两个不同的模式,用户和管理员

admin.php

<?php


define('APP_NAME','Admin');
require "./KUAIXUEAPP/KUAIXUEAPP.php";

index.php

define('APP_NAME','Index');
require "./KUAIXUEAPP/KUAIXUEAPP.php";

APP_NAME分别对应不同的路径,当访问前台时会自动创建。

4.执行应用类

在/Lib/Core目录下创建Application.class.php
在Function目录下创建function.php

final class Application{//Application.class.php
    public static function  run(){
    	p(1);
    }
}
<?php  //function.php
function p($arr){
echo ' <pre>';
print_r($arr);
echo '</pre>';

通过加载文件来执行函数,利用框架的扩展性。

初始化框架准备之C函数

建立框架的Config.php,返回数组

<?php
return array(
    'CODE_LEN' => 4,

    'DEFAULT_TIME_ZONE' => 'PRC',
    'SESSION_AUTO_START' => true,
    'VAR_CONTROLLER'  => 'c',
    'VAR_ACTION'  =>    'a',
    'SAVE_LOG'   => true,
    //错误跳转的地址
    'ERROR_URL'   =>'',
    //错误提示的信息
    'ERROR_MSG' => '网站出错了请稍后再试'
);

建立用户Config,自动建。
核心函数c函数
1.加载配置项Config
2.读取配置项
3.临时动态改变配置项
4.读取所有配置项。

function C($var = NULL , $value = NULL){
    static $config = array();
    //数组的形式进入
    if (is_array($var)){
        $config = array_merge($config,array_change_key_case($var,CASE_UPPER)
        );
        return; //不走下面
    }


    if (is_string($var)){
        $var = strtoupper($var);
        //传递两个参数
        if(!is_null($value)){
            $config[$var] = $value;
            return;
        }


        return isset($config[$var])? $config[$var]:NULL;
    }

    if (is_null($var) && is_null($value)){
        return $config;
    }
}

初始化框架之加载配置项与时区
重新改写Application.class.php

final class Application{//Application.class.php
    public static function  run(){
    	self::_init();  //初始化框架加载配置项与时区
    	self::_set_url();  //设置外部路径
		spl_autoload_register(array(__CLASS__,'_autoload'));		//当有方法实例化时会自动调用					//自动载入
		self::_create_demo();  //创建用户所需文件
		self::_app_run();    //通过get参数实例化应用类
		}
    private static function _init(){
        //加载配置项
        C(include CONFIG_PATH . '/config.php');

        $userPath = CONFIG_INDEX_PATH . '/config.php';   //创建用户所需config文件.

        $userConfig = <<<str
<?php
return array(
    //配置项 => 配置值
);
?>
str;
        is_file($userPath) || file_put_contents($userPath, $userConfig); //判断用户是否有配置项,有就不覆盖,没有就创建。
        //加载用户配置项
        C(include $userPath);

        //设置默认时区
        date_default_timezone_set(C('DEFAULT_TIME_ZONE'));
        //开启session
        C('SESSSION_AUTO_START') && session_start();

    }
    private static function  _set_url(){  //设置外部路径,用来当css,js的变量引用。
        $path = 'http://' . $_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
        $path = str_replace('\\','/',$path);
        define('__APP__',$path);
        define('__ROOT__',dirname(__APP__));

        define('__TPL__',__ROOT__ . '/' . APP_NAME . '/Tpl');
        define('__PUBLIC__',__TPL__.'/Public');

    }


	    private static function _create_demo(){
        $path = APP_CONTROLLER_PATH . '/IndexController.class.php';
        $str = <<<str
<?php 
class IndexController extends Controller{
    public function index(){
    header('Content-type:text/html;charset=utf-8');
    echo '欢迎使用凌云框架(:';
    }
}

str;
        is_file($path) || file_put_contents($path,$str);
    }

    private static function _app_run(){
        $c = isset($_GET[C('VAR_CONTROLLER')])? $_GET[C('VAR_CONTROLLER')] : 'Index';
        $a = isset($_GET[C('VAR_ACTION')])? $_GET[C('VAR_ACTION')] : 'index';
        $c .='Controller';
        $obj = new $c();
        $obj->$a();
    }

}




day10 通过get参数来实现控制类

self::_app_run();
    private static function _app_run(){
        $c = isset($_GET[C('VAR_CONTROLLER')])? $_GET[C('VAR_CONTROLLER')] : 'Index';
        $a = isset($_GET[C('VAR_ACTION')])? $_GET[C('VAR_ACTION')] : 'index';
        $c .='Controller';
        $obj = new $c();
        $obj->$a();
    }

相当于调用不同的控制器,比如说我传入参数c=Arc
在这里插入图片描述
在这里插入图片描述

事实上我们通过控制器来操作不同的类。思想很简单.
在config.php中添加变量c和a
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:23:01  更:2021-10-30 12:23:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:42:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码