以指代步 - 代码
type: channel
link: http://shirongfeng.com/code
description: 记录一些随手代码以便随时取用
items: typecho 利用bootstrap实现完美自定义分页
items: Typecho调用指定数量的随机文章代码
items: 给网站加上一句名言功能，适用typecho，wordpress等程序
items: PHP批量检测并去除文件BOM头代码实例
items: php单文件二维码生成api
items: PHP简单实现一言 / 随机一句话功能
items: Linux挂载数据盘
items: 欢迎使用 Typecho

typecho 利用bootstrap实现完美自定义分页
type: item
date: 2022-02-08T15:08:57+08:00
description: 目前typecho最完美的解决方案了，因为百度只能看到固定思维的代码。先看看实际生成的html代码截图，干净到让人窒息完全的自定义，包括给li元素加上class，给a元素加上class，给上一页下一页加上class，去除typecho自带用于表示更多的li标签。甚至里面的内容我也能添加一些文字。废话不多说，上源码： <?php ob_start(); $this->pageNav('«','»', 1, '', array('wrapTag' => 'ul', 'wrapClass' => 'pagination pagination-rounded mb-0 justify-content-center', 'itemTag' => 'li', 'textTag' => 'span', 'currentClass' => 'active', 'prevClass' => 'prev', 'nextClass' => 'next')); $content = ob_get_contents(); ob_end_clean(); $content = preg_replace("/ (.*?)<\/span><\/li>/sm", '', $content); $content = preg_replace("/ (.*?)<\/li>/sm", ' $1 ', $content); $content = preg_replace("/ (.*?)<\/li>/sm", ' $1 ', $content); $content = preg_replace("/ (.*?)<\/li>/sm", ' $1 ', $content); $content = preg_replace("/ (.*?)<\/li>/sm", ' $1 ', $content); $content = preg_replace("/(.*?)<\/a>/sm", '$2', $content); echo $content; ?> 主要方式就是利用正则修改，一劳永逸，直接从生成的内容上改变，不用再js一个个的匹配添加调整了，释放你的想象力。这里放一些正则的一些通配符：常用元字符代码 说明. 匹配除换行符以外的任意字符w 匹配字母或数字或下划线s 匹配任意的空白符d 匹配数字b 匹配单词的开始或结束^ 匹配字符串的开始$ 匹配字符串的结束常用限定符代码/语法 说明重复零次或更多次重复一次或更多次? 重复零次或一次{n} 重复n次{n,} 重复n次或更多次{n,m} 重复n到m次常用反义词代码/语法 说明W 匹配任意不是字母，数字，下划线，汉字的字符S 匹配任意不是空白符的字符D 匹配任意非数字的字符B 匹配不是单词开头或结束的位置1 匹配除了x以外的任意字符2 匹配除了aeiou这几个字母以外的任意字符常用模式修正符代码/语法 说明i 表示在进行匹配的时候不区分大小写m 多行识别.即将字符串视为多行,不管是那行都能匹配s 将字符串视为单行,转义回车换行符作为普通字符g 表示全局匹配x 将模式中的空白忽略A 强制从目标字符串开头匹配D 强制尾部无任何内容.若使用$限制结尾字符,则不允许结尾有换行U 禁止贪婪匹配,只匹配最近的一个字符串(不重复匹配)e 配合PHP函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行要想理解为什么，首先你要了解$this->pageNav()这段代码做了什么，具体你可以百度，很多人自定义都是用的这个，这里我放一下自己常用的解释： 基本就ok了，只要领悟能力够应该很容易就从源码中发现怎么自定义了。x ↩aeiou ↩

Typecho调用指定数量的随机文章代码
type: item
date: 2022-01-26T21:24:00+08:00
description: 虽然Typecho随机文章调用有插件可以使用，但都是很久之前的插件部分主题可能不兼容，另外我测试了多个插件很多都有bug，所以还是暴力改代码吧。 操作方法： 1、把下面的代码添加至主题的functions.php文件： function getRandomPosts($limit = 10){ $db = Typecho_Db::get(); $result = $db->fetchAll($db->select()->from('table.contents') ->where('status = ?','publish') ->where('type = ?', 'post') ->where('created <= unix_timestamp(now())', 'post') ->limit($limit) ->order('RAND()') ); if($result){ $i=1; foreach($result as $val){ if($i<=3){ $var = ' class="red"'; }else{ $var = ''; } $val = Typecho_Widget::widget('Widget_Abstract_Contents')->push($val); $post_title = htmlspecialchars($val['title']); $permalink = $val['permalink']; echo ' <i'.$var.'>'.$i.''.$post_title.' '; $i++; } } } 2、在要显示随机文章的地方添加以下调用代码，比如要在侧边栏显示随机文章，一般是添加到主题的sidebar.php文件，当然不同的文章模板可能不一样，请根据自己主题的模板添加。 <?php getRandomPosts('10');?> 代码中的10就是要显示的随机文章数量。

给网站加上一句名言功能，适用typecho，wordpress等程序
type: item
date: 2022-01-19T16:58:00+08:00
description: 在这里，教大家使用一言官方 API 的方法~适用于typecho和wordpress等程序首页在你的主题functions加上以下代码：/** * 主题集成一言（Hitokoto）API 经典语句功能 */ function GetHitokoto(){ $url = 'https://v1.hitokoto.cn/?encode=json'; // 不限定内容类型 // $url = https://v1.hitokoto.cn/?encode=json&c=d'; // 限定内容类型 $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查 SSL 加密算法是否存在 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 6); $response = curl_exec($ch); if($error=curl_error($ch)){ return '欢迎来到B2主题的一言功能~'; // 如果 6s 内，一言 API 调用失败则输出这个默认句子~ } curl_close($ch); $array_data = json_decode($response,true); $Emu_content = $array_data['hitokoto'].'----《'.$array_data['from'].'》'; // 输出格式：经典语句----《语句出处》 return $Emu_content; } 使用方法也非常简单粗暴，在主题文件中想输出句子的地方加入以下输出代码即可，当然，你也可以跟我一样放在文章的评论框哦~<?php echo GetHitokoto(); ?>

PHP批量检测并去除文件BOM头代码实例
type: item
date: 2022-01-19T07:09:54+08:00
description: 清除bom头的php脚本，放到网站根目录执行就可以了。<?php if (isset($_GET['dir'])) { //设置文件目录 $basedir = $_GET['dir']; } else { $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir) { if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..') { if (!is_dir($basedir . "/" . $file)) { echo "filename: $basedir/$file " . checkBOM("$basedir/$file") . " "; } else { $dirname = $basedir . "/" . $file; checkdir($dirname); } } } closedir($dh); } } function checkBOM($filename) { global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { if ($auto == 1) { $rest = substr($contents, 3); rewrite($filename, $rest); return ("BOM found, automatically removed."); } else { return ("BOM found."); } } else return ("BOM Not Found."); } function rewrite($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); } ?>

php单文件二维码生成api
type: item
date: 2022-01-18T16:44:00+08:00
description: 本站测试：http://www.shirongfeng.com/api/?text=http://www.shirongfeng.com/archives/7.html&size=270 text：要生成二维码的文本内容（必须）size：生成二维码大小，单位像素<?php class QRtools { //---------------------------------------------------------------------- public static function binarize($frame) { $len = count($frame); foreach ($frame as &$frameLine) { for($i=0; $i<$len; $i++) { $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; } } return $frame; } //---------------------------------------------------------------------- public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') { $barcode_array = array(); if (!is_array($mode)) $mode = explode(',', $mode); $eccLevel = 'L'; if (count($mode) > 1) { $eccLevel = $mode[1]; } $qrTab = QRcode::text($code, false, $eccLevel); $size = count($qrTab); $barcode_array['num_rows'] = $size; $barcode_array['num_cols'] = $size; $barcode_array['bcode'] = array(); foreach ($qrTab as $line) { $arrAdd = array(); foreach(str_split($line) as $char) $arrAdd[] = ($char=='1')?1:0; $barcode_array['bcode'][] = $arrAdd; } return $barcode_array; } //---------------------------------------------------------------------- public static function clearCache() { self::$frames = array(); } //---------------------------------------------------------------------- public static function buildCache() { QRtools::markTime('before_build_cache'); $mask = new QRmask(); for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { $frame = QRspec::newFrame($a); if (QR_IMAGE) { $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; QRimage::png(self::binarize($frame), $fileName, 1, 0); } $width = count($frame); $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); for ($maskNo=0; $maskNo<8; $maskNo++) $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); } QRtools::markTime('after_build_cache'); } //---------------------------------------------------------------------- public static function log($outfile, $err) { if (QR_LOG_DIR !== false) { if ($err != '') { if ($outfile !== fal…

PHP简单实现一言 / 随机一句话功能
type: item
date: 2019-03-18T20:17:00+08:00
description: 很多网站都喜欢在页面中加个一言，不过一般都是调用的第三方api。其实，使用万能的php能通过短短的几行代码就实现该功能准备工作首先准备一个代码编辑器，然后新建一个 php 文件，命名为 api.php，再新建一个文件，命名为 data.dat（两个文件均需采用 UTF-8 编码，否则会乱码）。打开 data.dat，在里面贴入要随机显示出来的文本，一行一条。如果你暂时想不出什么比较好的句子的话，我这儿准备了几十条古诗名句，可以直接点我下载备用。上代码将下列代码复制并粘贴到 api.php 中保存，你的专属“一言” API 就搭建完成了！超简单是不是<?php // 存储数据的文件 $filename = 'data.dat'; // 指定页面编码 header('Content-type: text/html; charset=utf-8'); if(!file_exists($filename)) { die($filename . ' 数据文件不存在'); } $data = array(); // 打开文档 $fh = fopen($filename, 'r'); // 逐行读取并存入数组中 while (!feof($fh)) { $data[] = fgets($fh); } // 关闭文档 fclose($fh); // 随机获取一行索引 $result = $data[array_rand($data)]; echo $result; 上面的代码是用 fopen + fgets 函数实现的，有些朋友似乎不是特别喜欢，觉得“效率低”。别急，这儿还有个 file_get_contents 函数实现的版本<?php // 存储数据的文件 $filename = 'data.dat'; // 指定页面编码 header('Content-type: text/html; charset=utf-8'); if(!file_exists($filename)) { die($filename . ' 数据文件不存在'); } // 读取整个数据文件 $data = file_get_contents($filename); // 按换行符分割成数组 $data = explode(PHP_EOL, $data); // 随机获取一行索引 $result = $data[array_rand($data)]; // 去除多余的换行符（保险起见） $result = str_replace(array("\r","\n","\r\n"), '', $result); echo $result; 如何在静态页面中引用上面的代码都是直接在页面中就输出了随机的句子。如果想像一言那样在静态的网页中引用这个 api，该如何实现呢？很简单，将最后那一行的 echo $result; 换成echo 'document.write("'.htmlspecialchars($result).'");'; 然后在需要的位置用引入 js 的方式进行调用即可。示例代码：

Linux挂载数据盘
type: item
date: 2016-05-18T15:49:00+08:00
description: 查看到已挂载的磁盘的大小以及挂载位置：df -h查看磁盘总空间、分区情况以及每个分区的大小：fdisk -l查看磁盘分区：lsblk -f格式化磁盘：（ext4为文件系统格式）mkfs.ext4 /dev/vdb挂载分区：mount /dev/vdb /home卸载分区：umount -r /dev/vdb设置开机自动挂载：echo '/dev/vdb /home ext4 defaults 0 0' >> /etc/fstab卸载分区出现target is busy的错误：yum install psmisc fuser -mv /mount-dir kill -9 PID 一键挂载宝塔数据盘代码：yum install wget -y && wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && bash auto_disk.sh

欢迎使用 Typecho
type: item
date: 2015-04-01T15:29:00+08:00
description: 如果您看到这篇文章,表示您的 blog 已经安装成功.