apache 配置rewrite需要apache启用mod_rewrite，在网站根目录下新建.htaccess文件 RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 登录后台配置如下功能
1. 如何再主题下实现导读功能进入后台管理-》外观设置-》全局设置再自定义body处，添加如下代码，保存即可2. 功能设置代码
七牛是目前国内用的还算比较多的一个第三方存储平台，同比阿里云的OSS存储，它的优点就是对于认证后的开发者有10G的免费存储空间，同时每个月都有一定免费额度的流量和api次数，作为白嫖党最好不过了，同时它也可以支持图片的处理，防盗链等需求，如果您的主机空间自带的流量不大，可以考虑使用它做为博客的图片存储，加快你的网站访问速度。原插件作者Githut源码地址：https://github.com/lichaoxilcx/typecho-Plugin-QiniuFile目录索引目录索引一、插件使用第一步：下载插件并安装第二步：插件激活并配置二、 插件使用三、下载链接四、免责声明一、插件使用第一步：下载插件并安装文字末尾处，点击网盘下载插件，并上传至typecho->usr/plugins 目录下，插件目录名QiniuFile第二步：插件激活并配置登录博客后台在控制台->插件页面处将新上传的插件激活，激活成功后点击插件设置按钮，按要求填写七牛服务的配置项。获取配置需要有七牛的账号，并通过实名认证，若果没有账号点击链接去注册， 点击前往七牛官网注册 如何秘钥获取？在七牛云平台个人中心获取秘钥信息。图片域名建议使用自定义域名，如何使用自定义域名可查看控制台相关操作，有其他疑问可在本文内留言。二、 插件使用激活插件后，文章上传附件将使用七牛存储服务，文件将自动上传至七牛，并返回图片链接，跟平时的操作没有什么区别三、下载链接{hide}{cloud title="七牛存储插件下载" type="bd" url="https://pan.baidu.com/s/1EJNjw2X-lRfzKL_n8Px4fg" password="mf10"/}{/hide}四、免责声明本站大部分下载资源收集于网络，只做学习和交流使用，版权归原作者所有，请在下载后24小时之内自觉删除，若作商业用途，请购买正版，由于未及时购买和付费发生的侵权行为，与本站无关。本站发布的内容若侵犯到您的权益，请联系站长删除，我们将及时处理！31639347@qq.com
本文介绍 一款文章目录索引生成插件，该款插件非本人开发，我也是在网上搜到的人家基于原作者做的修改目录索引目录索引一、插件使用效果二、插件使用第一步：下载插件并安装第二步：插件激活三、 插件使用四、下载链接五、免责声明一、插件使用效果下面图片为插件实现效果。点击链接即可调整至目录内容所在位置，十分方便读者阅读二、插件使用第一步：下载插件并安装文字末尾处，点击网盘下载插件，并上传至typecho->usr/plugins 目录下，插件目录名MeunTree第二步：插件激活登录博客后台在控制台->插件页面处将新上传的插件激活。三、 插件使用在编辑文章时，在编辑器内您想插入文字索引目录的地方使用以下代码,程序会自动把这个注释替换成目录树效果四、下载链接{cloud title="MeunTree插件下载" type="bd" url="https://pan.baidu.com/s/1FsMHTh1lsbaf2QHoUO58UA" password="ikls"/}五、免责声明本站大部分下载资源收集于网络，只做学习和交流使用，版权归原作者所有，请在下载后24小时之内自觉删除，若作商业用途，请购买正版，由于未及时购买和付费发生的侵权行为，与本站无关。本站发布的内容若侵犯到您的权益，请联系站长删除，我们将及时处理！31639347@qq.com
Typecho控制台日志打印 实现Typecho系统二次开发log日志打印查看
本文主要讲解如何实现typecho博客系统实现控制台日志打印功能，方便开发者可以查看日志输入，便于开发者定位问题，并解决使用日志需要日志目录有可写权限。一、编写日志文件Logger.php二、 include日志文件1. 配置修改三、日志使用四、查看日志五、 常见问题六、 文件下载一、编写日志文件Logger.php作者已经在网上找了一个人家写好的日志文件类，感觉使用还是不错的，大家复制使用即可，如果喜欢复制的，可以在文章末尾下载本php日志类文件文件放置var/目录下，即var/Logger.php<?php /* * Logger 日志类 * @date 2016/12/21 * @author 300js * 简单快捷debug类 * 优点:少配置或零配置,支持任何格式数据记录,支持数G数据存储.支持在浏览或linux环境查看 * 配置: * 可以在外部更改的常量: * 支持html便捷浏览模式或纯txt查看,值html|txt defined('MINI_DEBUG_TYPE') or define('MINI_DEBUG_TYPE', 'html'); 调试模式,1可写,0不可写 defined('MINI_DEBUG_FLAG') or define('MINI_DEBUG_FLAG', 1); jquery 地址 defined('MINI_DEBUG_JSPAHT') or define('MINI_DEBUG_JSPAHT', 'http://cdn.bootcss.com/jquery/1.8.3/jquery.js'); debug 可写的目录设置,结尾一定要加 保证有可写权限 defined('MINI_DEBUG_PATH') or define('MINI_DEBUG_PATH', __DIR__ . DIRECTORY_SEPARATOR); * * 更改存储目录: define('MINI_DEBUG_PATH', __DIR__ . '/');//必须后面加斜杆 / Logger::log('err', 'myFlag'); * 存储不同的文件名: define('MINI_DEBUG_PATH', __DIR__ . '/'); Logger::setCacheFile(date('Y-m-di'));//无需设置文件后缀 Logger::log('err', 'myFlag'); * 更改存储格式: define('MINI_DEBUG_PATH', __DIR__ . '/'); define('MINI_DEBUG_TYPE', 'txt');//默认为html Logger::log('err', 'myFlag'); * 覆盖文件,相当将之前的数据删除,写入新的数据,可做清空数据用 define('MINI_DEBUG_PATH', __DIR__ . '/'); Logger::log(1, 'myFlag', false); */ class Logger { private static $config = array( 'isSetFixx' => false,//是否已追加后缀标识 'cacheFile' => 'debug',//缓存的文件名,无需设置后缀 ); private static $_cacheFile = ''; /** * 设置日志文件,可文件名,可加相对路径,无需设置后缀名称 * @param string $cacheFile */ final public static function setCacheFile($cacheFile) { self::$config['cacheFile'] = $cacheFile; } /** * 记录日志 * @param mix $data 数据 * @param string $memo 标识 * @param boolean $isPush 是否追加,默认true * @param string $titleStr title * @return boolean 成功与否 */ final public static function log($data, $memo = 'None', $isPush = true, $titleStr = '日志记录') { self::_setBaseParam(); return self::_baseLog($data, $memo, $isPush, $titleStr); } /** * 获取当前的缓存文件 * @return type */ final public static function getCacheFile() { return self::$_cacheFile; } /** * 基础的日志方法 * @param mix $data 内容 * @param string $memo 标识 * @param boolean $isPush 是否追求,默认true * @param string $titleStr Title * @return boolean|int */ private static function _baseLog($data, $memo, $isPush = true, $titleStr = '日志记录') { if(!MINI_DEBUG_FLAG) return false; $cacheFile = MINI_DEBUG_PATH . self::$config['cacheFile']; if(!$isPush) unlink ($cacheFile); switch (strtolower(MINI_DEBUG_TYPE)) { case 'txt': $str = self::_setFormatTxt($data, $memo); break; default: $str = self::_setFormatHtml($data, $memo, $cacheFile, $titleStr); break; } self::$_cacheFile = $cacheFile; try{ if($isPush) file_put_contents($cacheFile, $str, 8); else file_put_contents($cacheFile, $str); } catch (Exception $ex) { } return true; } /** * 设置html格式,可以浏览器上方便查看 * @param type $data 数据 * @param type $memo 标识 * @param type $cacheFile 缓存文件 * @param type $titleStr * @return string */ private static function _setFormatHtml($data, $memo, $cacheFile, $titleStr){ $DebugFilePath = $_SERVER["PHP_SELF"];//当前处理页面 $timespan = microtime(true);//时间戳 $sBlockHTML = "\n\n\n <------orderIndex------->"; /*判断是否存在头信息*/ $baseHtml = ''; if(!is_file($cacheFile)) { $baseHtml = self::_getBaseHtml(MINI_DEBUG_JSPAHT, $titleStr); } $str = ''; $str .= $baseHtml; $str .= $sBlockHTML; $str .= "NO:\n\n"; $str .= " Date:\t".date("Y-m-d H:i:s")."\n"; $str .= " File:\t".$DebugFilePath."\n"; $str .= " Memo:\t".$memo." \n"; // $str .= "Action::\t".$_SERVER['QUERY_STRING']." \n"; $str .= "----------------------------------------展开/收起\n "; ob_start(); if(is_array($data)) print_r($data); elseif(is_string($data)) echo $data; else var_dump($data); $a = ob_get_contents(); ob_end_clean(); $str .= " "; $str .= $a; $str .= " "; $str .= " \n \n\n\n"; return $str; } /** * 设置txt纯文本格式 * @param type $data * @param type $memo * @return type */ private static function _setFormatTxt($data, $memo) { $DebugFilePath = $_SERVER["PHP_SELF"];//当前处理页面 $str = ''; $str .= 'Memo:' . $memo; $str .= ' Time:' . date('Y-m-d H:i:s'); $str .= ' File:' . $DebugFilePath; $str .= PHP_EOL; ob_start(); if(is_array($data)) print_r($data); elseif(is_string($data)) echo $data; else var_dump ($data); $a = ob_get_contents(); ob_end_clean(); $str .= $a; $str .= PHP_EOL; return $str; } /** * 获取处理的js html * @param type $jsPath * @param type $titleStr * @return type */ private static function _getBaseHtml($jsPath, $titleStr) { $baseHtml = <<<___html {$titleStr} ___html; return $baseHtml; } /** * 初使常量及判断 */ private static function _setBaseParam(){ /**支持html便捷浏览模式或纯txt查看,值html|txt*/ defined('MINI_DEBUG_TYPE') or define('MINI_DEBUG_TYPE', 'html'); /**调试模式,1可写,0不可写*/ defined('MINI_DEBUG_FLAG') or define('MINI_DEBUG_FLAG', 1); /**jquery 地址*/ defined('MINI_DEBUG_JSPAHT') or define('MINI_DEBUG_JSPAHT', 'http://cdn.bootcss.com/jquery/1.8.3/jquery.js'); /**debug 可写的目录设置,结尾一定要加 / */ defined('MINI_DEBUG_PATH') or define('MINI_DEBUG_PATH', __DIR__ . DIRECTORY_SEPARATOR); self::_setFileFixx(); } /** * 设置文件后缀 * @param type $cacheFile */ private static function _setFileFixx() { $_default_name = '_log'; if(stripos(self::$config['cacheFile'], 'debug') !== false) { $_default_name = ''; } $baseName = pathinfo(self::$config['cacheFile'], PATHINFO_BASENAME); if(strpos($baseName, '.') !== false && self::$config['isSetFixx'] == true) { return; } switch (strtolower(MINI_DEBUG_TYPE)) { case 'txt': self::$config['cacheFile'] .= $_default_name . '.txt'; self::$config['isSetFixx'] = true; break; default: self::$config['cacheFile'] .= $_default_name . '.html'; self::$config['isSetFixx'] = true; break; } } } 二、 include日志文件因默认框架不会自动加载文件需要在config.inc.php配置文件中加载文件日志，并定义相关配置常量1. 配置修改修改配置文件核心代码// 在24行出添加 // 定义日志文件类型：txt文本，html网页，建议开发使用网页，便于查看 define('MINI_DEBUG_TYPE', 'html'); // 定义日志文件目录 define('MINI_DEBUG_PATH', __TYPECHO_ROOT_DIR__ . '/logs/'); //在35行后添加 require_once 'Logger.php'; 三、日志使用可以在你需要输入日志的地方，使用日志// 参数1：日志内容，参数2：日志业务TAG Logger::log('测试日志','baidu'); //支持数组形式输出 Logger::log(array('url'=>'测试1','name'=>'淘宝'),'taobao'); 四、查看日志在浏览器中访问http://测试域名/logs/debug.html 即可查看日志内容五、 常见问题debug.html文件未生成答：需要检查logs日志目录是否存在需要开发者自己建目录，检查logs目录是否有读写权限六、 文件下载logger类文件下载地址{cloud title="Logger文件下载" type="bd" url="https://pan.baidu.com/s/1kex_meyPkca0dIEyuvBuQQ" password="8qpm"/}