目錄
整理框架" >整理框架
" >#  清理測試頁面
提交傳送代碼
##    1) layui外掛程式: 建立後台程序,準備使用layui前端框架,這個框架個人認為做後台介面還是不錯的。它還包含一些比較使用模組。 " >##    1) layui外掛程式: 建立後台程序,準備使用layui前端框架,這個框架個人認為做後台介面還是不錯的。它還包含一些比較使用模組。 
配置文件类
  需求分析:" >  需求分析:
  思路:" >  思路:
  代码实现" >  代码实现
错误日志记录
  测试" >  测试
提出问题:
首頁 後端開發 php教程 php源碼建庫建表-設定檔-錯誤日誌的方法

php源碼建庫建表-設定檔-錯誤日誌的方法

Jul 07, 2018 am 11:37 AM
php源碼

這篇文章主要介紹了關於php建庫建表-設定檔-錯誤日誌的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

#。

  1. 整理框架

  2. 建置庫建表

  3. ##設定檔類別

#錯誤日誌記錄

--------------本篇后文件结构:--------------------------------------
blog
├─App
│  ├─Model 模型目录
│  ├─View 视图目录
│  │  ├─Admin后台目录
│  │  └─Home前台目录
│  ├─Common 配置目录
│  │  └─config.php  配置文件
│  ├─Log 日志目录
│  │  └─log.txt  日志文件
│  ├─Controller 控制器
│  │  ├─Admin后台
│  │  │  └─DemoController.class.php 测试控制器
│  │  └─Home前台
├─Public   静态公共文件(js,css,images)
│  ├─Plugins 插件
│  ├─Back后台
│  └─Home前台
├─Frame 公共使用的类
│   ├─BaseModel.class.php 数据库连接类
│   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│   ├─FactoryModel.class.php  模型工厂类
│   ├─Log.class.php  日志厂类
│   ├─Config.class.php  配置文件读取类
│   ├─Init.class.php  初始化应用类
│   └─MySQLDB.class.php 数据库操作工具类
└─index.php  入口文件
-----------------------------------------------------------------------------------------------------
登入後複製

利用上篇中建構好的mvc框架結構,正式開始開發部落格專案。先建立資料表,然後開始建立後台,資料前台展示,完成部落格主要模組展示。

下載查看該專案原始碼

:https://gitee.com/NewbiesYang/young_blog

整理框架


#  清理測試頁面

    1)前面建立框架結構,使用了使用者登入測試頁面以及後台首頁頁面。在此全部去掉,從新開始建立前台和後台頁面。類似於我們下載了一個ThinkPHP或Laravel或其他的框架。現在開始在這個微型框架上來建立我們的專案

    2)實際開發,會用前端人員做好的靜態頁面來進行開發。所以也可以在 【模板之家】或其他網站 下載 後台模板和前台博客靜態頁面。然後專注於後端開發,可以加快速度。本計畫供學習研究使用,也就不那麼急了。

     原本是准备全部利用别人写好的前端页面(包括前端显示和后台页面),专注于后端逻辑的开发。而且已经把分类页面列表都做好了。还提交传送了。

     此刻,仔细想想,要是这样玩,那我直接用框架更好了。既然做后端开发,自己写个后端页面+程序处理,没什么问题吧..., 置于前端显示页面,那再用前辈写的前端页面倒是可以的

    于是乎,卷起柚子,说干就干,先来整理框架,开始搭建博客。。。。。
登入後複製

  框架結構:

--------------清理后MVC框架文件结构:--------------------------------------
blog
├─App
│  ├─Model 模型目录
│  ├─View 视图目录
│  │  ├─Back后台
│  │  └─Home前台
│  ├─Controller 控制器目录
│  │  ├─Back后台
│  │  └─Home前台
├─Public   静态公共文件(js,css,images)
│  ├─Plugins 插件
│  ├─Back后台
│  └─Home前台 
├─Frame 公共使用的类
│   ├─BaseModel.class.php 数据库连接类
│   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│   ├─FactoryModel.class.php  模型工厂类
│   ├─Init.class.php  初始化应用类
│   └─MySQLDB.class.php 数据库操作工具类
└─index.php  入口文件
-----------------------------------------------------------------
登入後複製

  後續的開發只需要複製該目錄結構文件, 就可以在此基礎上進行開發了。

提交傳送代碼

git add -A
git commit -m "清理MVC结构"git push origin master
登入後複製

  外掛程式準備

##    1) layui外掛程式: 建立後台程序,準備使用layui前端框架,這個框架個人認為做後台介面還是不錯的。它還包含一些比較使用模組。 

        用bootstrap也可以,我更傾向於用它來做前台頁面。

      下載網址: http://www.layui.com/

    2) jQuery庫:  更方便操作 DOM,尤其是經常使用ajax請求。

    3) 其他外掛程式: 如Ueditor編輯器等 需要使用時再下載。一般外掛都會有demo範例, 依照範例和手冊,懂web開發基本能使用。

    上述插件暫時不熟悉沒有關係,官網上有手冊,需要什麼模組,便查手冊便使用,就像搭積木,如果要做得更好,當然要花更多的時間多練習。我本著後台給程式管理員使用,不一定要非常漂亮,實用就好。

建庫建表

  準備: 建立分支

$ git checkout master
$ git checkout -b "start-admin-module"
登入後複製
  建表思維:

#    根據部落格模板,從首頁開始分析,  分析哪些需要動態數據,以便建立對應數據表。

      用戶: 登錄, 註冊, 修改, 刪除

      文章: 分類管理,  評論管理##       #      選單管理: 不同權限人員,對應選單列也有差異

    建表工具可以任意選擇。初期手寫建表語句,熟悉後直接使用工具。本專案中使用Navicat 建立資料庫與表格

   資料庫,表格

##    1) 建立資料庫:php_blog

create database php_blog charset utf8
登入後複製

   1) 建立資料庫:php_blog

CREATE TABLE `y_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户主键',
  `username` varchar(20) NOT NULL COMMENT '用户名',
  `password` char(32) NOT NULL COMMENT '密码',
  `email` varchar(50) NOT NULL DEFAULT '' COMMENT '注册邮箱',
  `token_email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱验证',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态, 0-正常,1-禁用',
  `gid` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '角色id,1-管理员,2-普通用户,0-无效',
  `login_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后登录的ip地址',
  `login_times` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数',
  `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '注册时间',
  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登录时间',  PRIMARY KEY (`id`),  UNIQUE KEY `username` (`username`),  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';
登入後複製
   1) 建立資料庫:php_blog
CREATE TABLE `y_user_group` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
  `auths` varchar(255) NOT NULL DEFAULT '' COMMENT '角色权限',  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
登入後複製

   us 2) 使用者表格: _
CREATE TABLE `y_menus` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单id',
  `title` varchar(20) DEFAULT '' COMMENT '菜单名称',
  `controller` varchar(30) DEFAULT '' COMMENT '控制器名称',
  `action` varchar(30) DEFAULT '' COMMENT '操作名称',
  `status` tinyint(1) unsigned DEFAULT '1' COMMENT '状态,1-正常,0-禁用',
  `is_hidden` tinyint(1) unsigned DEFAULT '0' COMMENT '是否隐藏,0-正常显示,1-隐藏',
  `sort` int(10) unsigned DEFAULT '0' COMMENT '排序',
  `pid` int(10) unsigned DEFAULT '0' COMMENT '上一级菜单',  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';
登入後複製
# ##
CREATE TABLE `y_article` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id',
  `title` varchar(60) NOT NULL DEFAULT '' COMMENT '标题',
  `description` varchar(200) NOT NULL DEFAULT '' COMMENT '文章简介',
  `content` text NOT NULL COMMENT '内容',
  `cid` int(10) unsigned NOT NULL COMMENT '文章类别',
  `pic` varchar(150) NOT NULL DEFAULT '' COMMENT '文章封面图',
  `pic_watermark` varchar(150) NOT NULL DEFAULT '' COMMENT '水印图',
  `pic_thumb` varchar(150) NOT NULL DEFAULT '' COMMENT '缩略图',
  `uid` int(10) unsigned NOT NULL COMMENT '作者',
  `clicks` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '阅读数(点击数)',
  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
  `created_at` int(11) NOT NULL DEFAULT '0' COMMENT '发布时间',  PRIMARY KEY (`id`),  KEY `title` (`title`),  KEY `uid` (`uid`),  KEY `clicks` (`clicks`),  KEY `cid` (`cid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='文章表';
登入後複製

使用者表SQL

    3)角色表: y_user_group

CREATE TABLE `y_category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类id',
  `catename` varchar(15) NOT NULL COMMENT '分类名',
  `description` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='文章类别表';
登入後複製

#角色表SQL

    4

角色表

    42 ) 選單表: y_menus

CREATE TABLE `y_comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论id',
  `uid` int(10) unsigned NOT NULL COMMENT '评论者',
  `created_at` int(11) DEFAULT NULL COMMENT '评论时间',
  `content` varchar(255) NOT NULL DEFAULT '' COMMENT '评论内容',
  `aid` int(10) unsigned NOT NULL COMMENT '被评论的文章',  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='评论(回复)表';
登入後複製

#選單表SQL

    5) 文章表y_article

CREATE TABLE `y_session` (
  `sess_id` varchar(50) NOT NULL DEFAULT '' COMMENT 'session id',
  `data` text NOT NULL COMMENT 'session数据',
  `created_at` int(11) NOT NULL COMMENT 'session创建时间',  PRIMARY KEY (`sess_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='session数据表';
登入後複製
##SQL#文章表#SQL

    6) 文章類別表y_category

 1 class BaseModel { 
 2     。。。 
 3     。。。 
 4     。。。 
 5     function __construct(array $config=null) 
 6     { 
 7         $conf = array( 
 8             'host'=>'localhost', 
 9             'user'=>'root',
 10             'pwd'=>'root',
 11             'port'=>'3306',
 12             'charset'=>'utf8',
 13             'dbname'=>'php_blog',
 14         );
 15         $conf = empty($config)? $conf : array_merge($conf,$config);
 16         $this->db = Db::getDb($conf);
 17     }
 18 }
登入後複製
登入後複製
文章類別表SQL

    7) 評論(回覆)表格#評論(回覆)表格SQL#########    8) session資料表y_session  (其實可以不用這個,目的是為了操作"將session寫入資料庫" )###
step 1:  创建文件  App/Common/config.php  并将数据库连接信息写入该配置文件

step 2:  在Frame/目录下创建读取配置文件类 Config.class.php

step 3: 设置自动加载 读取配置类

step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类

step 5:  调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取

step 6: 测试连接数据结果,验证获取配置
登入後複製
登入後複製
####### session資料表SQL#########    為了避免弄的太複雜, 暫時建立這些資料表,欄位後續可以進行調整。如果需要加入模組功能,可以相應增加對應資料表。 #########  連接資料庫#########    在badeModel中修改資料連接的陣列資訊【Frame/BaseModel.class.php】  (如果使用設定檔類,此處就可以省略了)###
 1 class BaseModel { 
 2     。。。 
 3     。。。 
 4     。。。 
 5     function __construct(array $config=null) 
 6     { 
 7         $conf = array( 
 8             'host'=>'localhost', 
 9             'user'=>'root',
 10             'pwd'=>'root',
 11             'port'=>'3306',
 12             'charset'=>'utf8',
 13             'dbname'=>'php_blog',
 14         );
 15         $conf = empty($config)? $conf : array_merge($conf,$config);
 16         $this->db = Db::getDb($conf);
 17     }
 18 }
登入後複製
登入後複製

设置连接数据库信息

配置文件类

  需求分析:

    为了框架便于数据库连接以及方便读取配置文件。如 希望在 App/Common/config.php 做一些配置项,要求能读取这些配置并应用到项目

  思路:

step 1:  创建文件  App/Common/config.php  并将数据库连接信息写入该配置文件

step 2:  在Frame/目录下创建读取配置文件类 Config.class.php

step 3: 设置自动加载 读取配置类

step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类

step 5:  调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取

step 6: 测试连接数据结果,验证获取配置
登入後複製
登入後複製


实现连接数据库-读取数据库配置信息思路

  代码实现

    1) 创建配置文件config.php 【App/Common/Config.php】

<?php/**
 * 配置文件
 * User: young */return [    //数据库连接配置
    &#39;host&#39;=>&#39;localhost&#39;,
    &#39;user&#39;=>&#39;root&#39;,
    &#39;pwd&#39;=>&#39;root&#39;,
    &#39;port&#39;=>&#39;3306&#39;,
    &#39;charset&#39;=>&#39;utf8&#39;,
    &#39;dbname&#39;=>&#39;php_blog&#39;,];
登入後複製

配置文件-数据库配置信息

    2) 创建读取配置文件类 【Frame/Config.class.php】

 1 <?php 
 2 /** 
 3  * 配置文件读取类 
 4  * User: young 
 5  */
 6  
 7 class Config 
 8 { 
 9     protected static $ins = null;  //本类实例
 10     protected $cfg = array(); //存储配置项
 11 
 12     /**
 13      *  获取本类实例
 14      * @access public
 15      * @return  object     本类的单例对象
 16      */
 17     public static function getIns() {
 18         if(false === (self::$ins instanceof self)){
 19             self::$ins = new self();
 20         }
 21         return self::$ins;
 22     }
 23 
 24     /**
 25      *  构造方法: 读取配置项
 26      * @access public
 27      * @return  void
 28      */
 29     final protected function __construct() {
 30         require APP.&#39;Common&#39;.DS.&#39;config.php&#39;; //读取配置项
 31         $this->cfg = $cfg;
 32     }
 33 
 34     /**
 35      * 根据指定的配置项,返回该配置项的值
 36      * @param string $k  配置项
 37      * @return mixed|null 返回配置项的数据
 38      */
 39     public function __get($k) {
 40         if(!isset($this->cfg[$k])) {
 41             return null;
 42         }
 43         return $this->cfg[$k];
 44     }
 45 
 46 
 47     /**
 48      * 根据指定的配置项,返回配置项的值
 49      * @param  string $k 配置项名称
 50      * @param string $v 配置项对应的值
 51      */
 52     public function __set($k,$v) {
 53         $this->cfg[$k] = $v;
 54     }
 55 }
登入後複製

    3) 自动加载配置类

      需要自动加载该类, 该类在Frame目录下, 所以可以写入到 Init.class.php 类中的属性数组中 【Frame/Init.class.php】

<?php
/**
 * 初始化应用类
 * User: young
 */
class Init
{
    protected static $frame = array(&#39;BaseController&#39;,&#39;BaseModel&#39;,&#39;Db&#39;,&#39;FactoryModel&#39;,&#39;Config&#39;);
。。。
。。。
。。。
自动加载配置类
登入後複製

    4)基础模型类实例化配置类【Frame/BaseModel.class.php】

<?php
/**
 * BaseModel.class.php 基础模型类
 *     连接数据库
 *  @author young
 */
class BaseModel
{
    protected $db = null;
    /**
     * 构造方法: 实例化数据库类
     * @access public
     */
    function __construct()
    {
       $conf =  Config::getIns(); //读取配置项实例
        $this->db = Db::getDb($conf);
    }
}
登入後複製

    5)数据库读取配置项信息 【Frame/Db.class.php】     

<?php
/**
 * Db.class.php 数据库操作工具类
 * @author young
 */
class Db {
。。。
。。。
。。。
    /**
     * 构造方法: 保存数据库连接信息,连接数据库
     * @access private
     * @param array $conf 数据库连接信息
     */
    private function __construct($conf)
    {
        $this->host = $conf->host;
        $this->user = $conf->user;
        $this->pwd = $conf->pwd;
        $this->port = $conf->port;
        $this->charset = $conf->charset;
        $this->dbname = $conf->dbname;
        $this->connect();
    }
。。。
。。。
。。。
}
数据库工具类获取配置信息
登入後複製
登入後複製

    6) 测试 在App/Controller/Home/DemoController.class.php 用于测试数据库连接情况

<?php
/**
 * 测试控制器类
 * User: young
 */

class DemoController extends BaseController
{
    public function test()
    {
        $db = new BaseModel();
        $data = $db->db->getAllRows("select * from y_user");
        var_dump($data);
    }
}
登入後複製

测试控制器类测试连接数据库

  注: 前提,需要将BaseModel.class.php中的$db属性先临时修改为public公开,才能测试成功 (原因:在Demo控制器中实例化的基础模型类,数据库操作实例是放在类的属性db中,外部不能访问protected属性), 本节所有测试,可以临时将db设置为公开的。

还可以使用配置如: 上传目录,网站配置信息等,根据需求自定义配置需求,再通过读取配置类读取配置的数据

提交代码

git add -A
git commit -m "完成读取配置文件类"
登入後複製

错误日志记录

  除了开发阶段调试错误, 项目上线一般会将错误信息写入指定文件中。安全性更好。

  需求分析:

    将错误写入日志文件中,这里暂时主要记录数据库操作的错误。 如:默认将错误记录在App/log/logError.txt。 如果在配置文件中进行了配置,则将日志信息写入到配置项log指定的目录中

  思路:

step 1: 制作日志类Frame/Log.class.php, 用于将错误信息写入到指定文件中。  (设置日志文件位置,正好可以利用上面写的配置项,通过读取配置来实现)

step 2: 在基础模型类BaseModel中,读取配置项后, 可以将日志目录路径写入常量。 使用try..catch 捕捉异常,将错误写入日志

step 3: 实现日志类自动加载。Log类在Frame目录中,所以只要在初始化应用类Init中的属性$frame数组中加入 “Log”

step 4: 记录错误。 数据库连接可能失败, sql语句可能执行失败

step 5: 测试错误日志记录功
登入後複製

实现错误日志记录过程思路

  代码实现

  1) 制作错误日志类 【Frame/Log.class.php】

<?php
/**
 * Db.class.php 数据库操作工具类
 * @author young
 */
class Db {
。。。
。。。
。。。
    /**
     * 构造方法: 保存数据库连接信息,连接数据库
     * @access private
     * @param array $conf 数据库连接信息
     */
    private function __construct($conf)
    {
        $this->host = $conf->host;
        $this->user = $conf->user;
        $this->pwd = $conf->pwd;
        $this->port = $conf->port;
        $this->charset = $conf->charset;
        $this->dbname = $conf->dbname;
        $this->connect();
    }
。。。
。。。
。。。
}
数据库工具类获取配置信息
登入後複製
登入後複製

  2) 读取日志位置,捕捉错误 【Frame/BaseModel.class.php】

    发生错误记录后,这里只是简单使用exit(..)退出, 可以自定error错误页面会更好

<?php
/**
 * BaseModel.class.php 基础模型类
 *     连接数据库,捕捉记录错误
 *  @author young
 */
class BaseModel
{
    Public $db = null;
    /**
     * 构造方法: 实例化数据库类
     * @access public
     */
    function __construct()
    {
        $conf =  Config::getIns(); //读取配置项实例
        //读取日志配置项目 并写成常量
        $logPath = $conf->log;
        $logPath = !isset($logPath) ? APP."log".DS  : $logPath;
        define(&#39;LOG&#39;,$logPath);
        //监控数据库操作
        try {
            $this->db = Db::getDb($conf);
        }catch(Exception $e) {
            $err = &#39;&#39;;
            $err .= &#39;错误代码:&#39; . $e->getCode() . "\r\n";
            $err .= &#39;错误信息:&#39; . $e->getMessage() . "\r\n";
            $err .=  &#39;文件:&#39; . $e->getFile() . "\r\n";
            $err .=  &#39;行号:&#39; . $e->getLine() . "\r\n\r\n";
            Log::write($err);
            exit("<h2>客官!页面暂时无法响应,请稍后访问</h2>");
        }
    }
}
点击查看【基础模型类中监测并记录错误】
登入後複製

  3)自动加载日志记录类 【Frame/Init.class.php】

<?php
/**
 * 初始化应用类
 * User: young
 */
class Init
{
    protected static $frame = array(&#39;BaseController&#39;,&#39;BaseModel&#39;,&#39;Db&#39;,&#39;FactoryModel&#39;,&#39;Config&#39;,&#39;Log&#39;);
。。。
。。。
。。。
点击查看【自动加载日志类】
登入後複製

  4) 记录错误 【Frame/Db.class.php】

数据库连接可能发生错误处理

class Db
{
。。。
。。。
。。。
    /**
     * 连接数据库,设置编码,选库
     * @access private
     */
    private function connect()
    {
        $this->link = @ mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd") ;
        if(!$this -> link) {
            $error = new Exception("数据库连接不上",10000);
            throw $error;
        }
        $this->setCharset($this->charset);
        $this->useDb($this->dbname);
    }
。。。
。。。
。。。
点击查看【数据库连接错误抛出】
登入後複製

sql语句发生错误处理

class Db 
{
。。。
。。。
。。。
    /**
     * 执行sql语句
     * @param  string $sql sql语句
     * @return mixed
     */
    private function query($sql)
    {
        $result = mysql_query($sql, $this->link);
//        if(false === $result) {
//            echo "<p>sql执行失败!<br>";
//            echo "<br>失败语句:".$sql;
//            echo "<br>错误代号".mysql_errno();
//            echo "<br>错误提示: ".mysql_error()."</p>";
//            exit();
//        }
        if(false === $result) {
            $err = "sql执行失败!\r\n失败语句:".$sql."\r\n错误代号:".mysql_errno()."\r\n错误提示:".mysql_error()."\r\n\r\n";
            Log::write($err);
            exit("<h2>查询出错,请稍后访问</h2>");
        }
        return $result;
    }
。。。
。。。
。。。
点击查看【执行SQL错误处理】
登入後複製

  测试

  可以在【App/Common/config.php】中配置日志文件目录。 如果不进行配置, 默认记录在App/log/目录中

<?php
/**
 * 配置文件
 * User: young
 */
return [
    //数据库连接配置
    。。。
、 。。。
    。。。
    //日志文件位置配置
    &#39;log&#39; => APP,
];
点击查看【日志文件配置】
登入後複製

  以下测试可以 开启配置项中的配置log 和关闭后分别测试。 注意: 如果没有做配置log, 则要首先在App目录下建立一个log目录

   1. 在配置文件中故意写错数据库连接信息,如密码写错

   2. 执行sql错误

最后说明: 配置目录,日志目录都是不希望浏览器直接访问的,所以需要将.htaccess文件放入目录中 (由于App目录中已经存在,故也可以省略)

提交传送代码

git add -A
git commit -m "完成日志类"git checkout master
git merge start-admin-module
git push origin master
登入後複製

 小结: 本篇主要实现了 框架清理,博客数据库表搭建,创建配置读取类,日志记录类。

    实际上,到此仍然只是更加完善了一下框架结构,增加了2个功能。正如前篇所提,还有很多是可以改进的。这里就暂时不再继续增加功能了。

提出问题:

  1. 如何使用该自制框架搭建项目 ==> 用户操作+mvc实现

  2. 如何着手使用ajax实现后台登录功能  ==> ajax应用

  3. 如何著手實現分類模組功能,它有哪些操作 ==> 增刪改查

下一步: 後台模板視圖製作,後台登錄,文章分類模組功能。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

php源碼之實作MVC結構微型框架

PHP7.2 Data Structures的使用

以上是php源碼建庫建表-設定檔-錯誤日誌的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

See all articles