>백엔드 개발 >PHP 튜토리얼 >PHP 소스코드 데이터베이스 구축 테이블 구성 파일 오류 로그 방식

PHP 소스코드 데이터베이스 구축 테이블 구성 파일 오류 로그 방식

不言
不言원래의
2018-07-07 11:37:452081검색

이 글은 주로 PHP에서 데이터베이스와 테이블을 구축하는 방법 - 구성 파일 - 오류 로그를 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

    조직 프레임워크
  1. 데이터베이스 및 테이블 구축
  2. 구성 파일 클래스
  3. 오류 로깅
  4. --------------本篇后文件结构:--------------------------------------
    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 프론트엔드 프레임워크를 사용할 준비를 합니다. 개인적으로 이 프레임워크는 백그라운드 인터페이스에 좋다고 생각합니다. . 또한 일부 비교 사용 모듈도 포함되어 있습니다.

    부트스트랩을 사용할 수도 있습니다. 저는 첫 페이지에 사용하는 것을 선호합니다.

   다운로드 URL: http://www.layui.com/

  2) jQuery 라이브러리: 특히 ajax 요청을 사용할 때 DOM을 조작하는 것이 더 편리합니다.

  3) 기타 플러그인: Ueditor 에디터 등 필요하실 때 다운받아 사용하세요. 일반적으로 플러그인에는 데모 예제가 포함되어 있습니다. 예제와 매뉴얼을 따라가다 보면 웹 개발을 이해한다면 기본적으로 사용할 수 있습니다.

  위 플러그인에 대해 잘 모르셔도 상관없습니다. 필요한 모듈이 있으면 매뉴얼을 확인하시고, 원하시면 사용하시면 됩니다. 더 잘하려면 당연히 더 많은 시간을 투자하고 더 많이 연습해야 합니다. 프로그램 관리자가 백그라운드에서 사용하도록 의도했는데, 아주 아름다울 필요는 없고 단지 실용적일 뿐입니다.

데이터베이스 구축 및 테이블 구축

준비: 브랜치 생성

$ git checkout master
$ git checkout -b "start-admin-module"

테이블 구축 아이디어:

블로그 템플릿을 기반으로 홈페이지에서 분석을 시작하고 어떤 동적 데이터가 순서대로 필요한지 분석합니다. 해당 데이터 테이블을 구축합니다. ㅋㅋㅋㅋㅋ                                                                     in-ure in , 카테고리 관리 , 블로그 게시물 관리 , 댓글 관리

     관리자, 일반 사용자

     메뉴 관리: 권한이 다른 사람은 해당 메뉴 바가 다릅니다

 테이블 도구는 임의로 선택할 수 있습니다. 초기 단계에서는 테이블 생성 문을 수동으로 작성하고, 익숙해지면 바로 도구를 사용합니다. 이 프로젝트에서는 Navicat을 사용하여 데이터베이스와 테이블을 생성합니다

  데이터베이스, 테이블

  1) 데이터베이스 생성: php_blog

create database php_blog charset utf8

  2) 사용자 테이블: y_users 
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='用户表';

사용자 테이블 SQL

  3) 역할 테이블 : y_ user_group

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='角色表';

문자 테이블 SQL

 4) 메뉴 테이블 : y_menus

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='菜单表';

메뉴 테이블 SQL

  5) 기사 테이블 y_article

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

 6) 기사 카테고리 테이블 y_category

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

 7) 댓글(답글) 테이블 y_comment

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

  8) 세션 데이터 테이블 y_session (실제로는 필요하지 않습니다. 목적은 "데이터베이스에 세션 쓰기" 작업 " )

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

   너무 복잡해지지 않도록 이러한 데이터 테이블을 일시적으로 생성하며 필드는 나중에 조정할 수 있습니다. 모듈 기능을 추가해야 하는 경우 그에 따라 해당 데이터 테이블을 추가할 수 있습니다.

데이터베이스 연결

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 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

MVC 구조 마이크로 프레임워크를 구현하기 위한 PHP 소스 코드

PHP7.2 데이터 구조 사용

위 내용은 PHP 소스코드 데이터베이스 구축 테이블 구성 파일 오류 로그 방식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.