diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
index bca57cb..57a5462
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
databases/*
src/*
public/message/static/src/video/*
+public/blog/md/post/*
+public/blog/md/image/*
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/public/about/index.html b/public/blog/about/index.html
similarity index 100%
rename from public/about/index.html
rename to public/blog/about/index.html
diff --git a/public/blog/index.php b/public/blog/index.php
index 51865f1..b65c873 100755
--- a/public/blog/index.php
+++ b/public/blog/index.php
@@ -12,7 +12,8 @@
首页
- 关于
+ 关于
+ 文章
弹幕留言
短链生成
gitea
@@ -30,14 +31,43 @@
+
+ 2025.07.30
+ 新增post、模块,这是第一篇文章
+
+
+
+
+ 这不是本来就应该有的吗
+
+
+
+ 最后感谢提供php的md插件的开源制作者
+
+
+
+ 点击跳转
+
+
+
+
+
2025.07.26
新增wiki 页面
+
+
+
+
2025.07.20
新增gitea 、docker-registry 页面
+
+
+
+
2025.07.09
建立页面
diff --git a/public/blog/md/114514.md b/public/blog/md/114514.md
new file mode 100644
index 0000000..95fc038
--- /dev/null
+++ b/public/blog/md/114514.md
@@ -0,0 +1 @@
+## 123
\ No newline at end of file
diff --git a/public/blog/md/MD.php b/public/blog/md/MD.php
new file mode 100644
index 0000000..e53eaa5
--- /dev/null
+++ b/public/blog/md/MD.php
@@ -0,0 +1,479 @@
+
+
+
+
+file = $filename; //设置当前文件
+ $this->mdGen = $this->content($filename); //获取生成器
+ $this->flag = 'idel'; //闲置
+ $this->lines = array(); //所有行状态
+ $this->line_count = 0; //行数归0
+ }
+
+ private function content($file){ //获取生成器
+ if(file_exists($file)){
+ $fh = fopen($file,"r");
+ while(!feof($fh)){
+ yield fgets($fh);
+ }
+ fclose($fh);
+ }else{
+ return null;
+ }
+ }
+
+ //遍历每一个字符
+ private function every($str){
+ $l = strlen($str);
+ for($i=0;$i<$l;$i++)
+ if(ord($str[$i])<0x80)
+ yield $str[$i];
+ else{
+ yield $str[$i].$str[$i+1].$str[$i+2]; //三个字节
+ $i+=2;
+ }
+ }
+
+ //解析
+ private function parse(){
+ $ctnt = $this->mdGen; //生成器
+ $ret=array();
+ if($ctnt != null){
+ $ret = array();
+ foreach($ctnt as $line){
+ if($this->flag != 'code')
+ $line=ltrim($line); //删除左边
+ if(strlen($line)){
+ $ch = $line[0]; //判断第一个字符
+ $type=ctype_punct($ch);//标点符号
+ if($this->flag !== 'code') $line=preg_replace('/\s{2,}$/',' ',$line); //非代码模式
+ $ret[] = $this->parseLine($line,$type); //解析行
+ }else{ //空行
+ switch($this->flag){
+ case 'ul':
+ case 'ol':
+ $ret[]="$this->flag>";
+ $this->flag_pre = $this->flag;
+ $this->flag = 'idel';
+ break;
+ case 'table':
+ $this->flag = 'idel';
+ $ret[]='
';
+ break;
+ default:
+ if($this->flag != 'el') $ret[] = ' ';
+ $this->flag = 'el'; //空行
+ }
+ }
+ }
+ }
+ $this->lines = $ret;
+ return $ret;
+ }
+
+ //生成blockquote
+ private function genQuote($level,$content){
+ if($level<=0) return "";
+ return str_repeat('',$level).$content.str_repeat(' ',$level);
+ }
+
+ //检查是否处于某个状态,默认检查是否处于代码状态
+ private function check($value='code'){
+ return ($this->flag == $value);
+ }
+
+ /**
+ * 生成一行新的表格列
+ * $data:需要输入的数据
+ * $type:生成类型
+ * $wrap:最快层包裹
+ * $sep:分隔符
+ */
+ private function genRow($data,$type='td',$wrap='tr',$sep='|'){
+ $ret='';
+ $mat = explode($sep,$data);
+ foreach($mat as $elem)
+ $ret.="<$type>".$elem."$type>";
+ return "<$wrap>".$ret."$wrap>";
+ }
+
+ /**
+ * 解析行内元素
+ * bold,italic,code,link,pic
+ */
+ private function parseInner($str){
+ $str=preg_replace('/\*\*\*([^\*\n\r]+)\*\*\*/','\1 ',$str); //加粗并加斜字体
+ $str=preg_replace('/\*\*([^\*\n\r]+)\*\*/','\1 ',$str); //加粗字体
+ $str=preg_replace('/\*([^\*\n\r]+)\*/','\1 ',$str); //斜体
+ $str=preg_replace('/```([^`\n\r]+)```/','\1',$str); //代码
+ $str=preg_replace('/`([^`\n\r]+)`/','\1',$str); //代码
+ $str=preg_replace('/!\[([^\]\r\n]+)\]\(([^\)\r\n]+)\)/',' ',$str); //图片
+ $str=preg_replace('/\[([^\]\r\n]+)\]\(([^\)\r\n]+)\)/','\1 ',$str); //图片
+ return $str;
+ }
+
+ /**
+ * 按照给定规则解析字符串:
+ * type:
+ * true 符号
+ * false 文字
+ * 返回:
+ * array('type'=>类型,'parts'=>array(...))
+ */
+ private function parseLine($str,$type){
+ if(strlen($str) == 0){
+ return array('type'=>'p','parts'=>[]); //返回空段
+ }
+
+ $valid_str = rtrim($str); //去除右边的空格
+
+ $str = $valid_str;
+ $output = ''; //需要输出的字符串
+
+ if($type == true){ //标点
+ $type_str = ''; //类型字符串
+ $data_str = '';
+ $flag = 0;
+
+ foreach($this->every($str) as $ch){
+ if(!ctype_punct($ch)){
+ $flag = 1;
+ }
+ if($flag == 0)
+ $type_str .= $ch;
+ else
+ $data_str .= $ch;
+ }
+
+ switch($type_str){
+ case '#':
+ $wrap = 'h1';
+ $this->flag_like = 'h1';
+ break;
+ case '##':
+ $wrap = 'h2';
+ $this->flag_like = 'h2';
+ break;
+ case '###':
+ $wrap = 'h3';
+ $this->flag_like = 'h3';
+ break;
+ case '####':
+ $wrap = 'h4';
+ $this->flag_like = 'h4';
+ break;
+ case '#####':
+ $wrap = 'h5';
+ $this->flag_like = 'h5';
+ break;
+ case '######':
+ $wrap = 'h6';
+ $this->flag_like = 'h6';
+ break;
+ case '+':
+ case '-':
+ $wrap = 'li';
+ $this->flag_like = 'ul';
+ if($this->flag != 'code'){
+ if($this->flag != 'ul'){
+ $this->flag_pre = $this->flag;
+ $this->flag = 'ul';
+ $output.='';
+ }
+ }
+ break;
+ case '```': //代码模式,不进行干扰
+ if($this->flag != 'code'){ //不为code,判断是否为单行代码
+ $output.=' ';
+ if(preg_match('/^\s*```([^`]+)```([^\s]+)\s*$/',$str,$mat)){ //单行代码
+ $output.="$mat[1] $mat[2]";
+ $str = '';
+ $data_str = '';
+ }else{
+ $this->flag_pre = $this->flag;
+ $this->flag = 'code'; //代码
+ }
+ }else{
+ $output.='';
+ $this->flag_pre = $this->flag;
+ $this->flag = 'idel'; //闲置
+ }
+ break;
+ case '[':
+ if(preg_match('/^\[\s\]\s*(.+)$/',$str,$mat)){ //选择
+ $output.=" $mat[1] ";
+ $this->flag_like = 'check';
+ }else if(preg_match('/^\[([^\]]+)\]\(([^\)]+)\)([^\s]+)\s*$/',$str,$mat)){ //未选择
+ $output.="$mat[1] ".$this->parseInner($mat[3]);
+ $this->flag_like = 'a'; //网址
+ }else if(preg_match('/^\s*(\[\d+\]\:)\s+([^\s]+)\s+([^\r\n]+)\s*$/',$str,$mat)){ //外部资料
+ $output.="$mat[1] $mat[3] ";
+ }else{
+ $output.=$str;
+ }
+ break;
+ case '[-]':
+ $output.=" $data_str ";
+ $this->flag_like = 'check';
+ break;
+ case '![':
+ if(preg_match('/^!\[([^\]]+)\]\(([^\)]+)\)([^\s]+)\s*$/',$str,$mat)){
+ $output.=" ".$this->parseInner($mat[3]);
+ $this->flag_like = 'img';
+ }else{
+ $this->flag_like = 'p'; //没有模式
+ $output.="$str";
+ }
+ break;
+ case '*': //斜体
+ if(preg_match('/^\*(.*)\*([^\s]+)\s*$/',$str,$mat)){
+ $output.=$this->parseInner($str);
+ $this->flag_like = 'i';
+ }else if(preg_match('/^\s*\*\s+(.+)\s*$/',$str,$mat)){
+ $str=$mat[1];
+ $wrap = 'li';
+ $this->flag_like = 'ul';
+ if($this->flag != 'code'){
+ if($this->flag != 'ul'){
+ $this->flag_pre = $this->flag;
+ $this->flag = 'ul';
+ $output.='';
+ }
+ }
+ }
+ break;
+ case '**': //粗体
+ if(preg_match('/^\*\*(.*)\*\*/',$str,$mat)){
+ $output.=$this->parseInner($str);
+ $this->flag_like = 'b';
+ }
+ break;
+ case '<':
+ $output.=$str;
+ $this->flag_like = 'html';
+ break;
+ default:
+ if(!$this->check()){ //非代码模式
+ if(preg_match('/^>+$/',$type_str)){ //引用
+ $level = strlen($type_str);
+ $this->flag_like = 'quote';
+ $output.=$this->genQuote($level,$data_str); //引用
+ }else if(preg_match('/^([^\|\n\r]+)(?:\|[^\|\n\r]+)+$/',$str)){ //表格确定格式---|---|....
+ if($this->flag == 'table'){
+ $this->flag_like = 'table';
+ $output.=''.$this->genRow($this->buf,'th').' ';
+ }else{ //非表格格式,上一行没有标题
+ $this->flag_like = 'p'; //没有格式
+ $output.=$this->buf;
+ $this->buf = '';
+ }
+ }else if(preg_match('/^\s*(\-{3,})|(\={3,})$/',$type_str)){ //hr
+ $output.=' ';
+ $this->flag_like = 'hr';
+ break;
+ }else{
+ $this->flag_like = 'p';
+ $output.=$str.' ';
+ }
+ }
+ }
+ $br = '';
+ preg_match('/^(.*)( )?$/',$data_str,$mat);
+ $data_str = htmlspecialchars($mat[1]);
+ if(!$this->check()){ //代码
+ if(!empty($wrap)) $output.="<$wrap>$mat[1]$wrap>".(isset($mat[2])?' ':'');
+ }else if($type_str!='```'){
+ $output.=htmlspecialchars($str).' ';
+ }
+ }else{ //首个非空字符不为符号
+ if($this->flag == 'code'){ //代码,直接输出
+ $str=str_replace("\t",' ',$str);
+ $output.=htmlspecialchars($str).' ';
+ }else if(is_numeric($str[0])){ //可能为有序列表,也可能是表格
+ if(preg_match('/^\s*\d+\.\s+([^\r\n]+)\s*$/',$str)){ //有序列表
+ $this->flag_like = 'ol';
+ $output.=$str;
+ }else{
+ $this->flag_like = 'idel';
+ foreach($this->every($str) as $ch){
+ $output.=$ch;
+ }
+ }
+ $output.=' ';
+ }else if(preg_match('/^([^\|\n\r]+)(?:\|[^\|\n\r]+)+$/',$str)){ //表格
+ $mat = explode('|',$str);
+
+ if($this->flag!='table'){ //进入表格
+ $this->buf = $str;
+ $this->flag_like = 'table';
+ $wrap = '';
+ }else{
+ $output.=$this->genRow($str);
+ }
+ //echo $mat[0].' ';
+ //var_dump($mat);
+ }else{ //其他
+ $this->flag = 'p';
+ $output.=$str;
+ }
+ }
+
+ if(!$this->check()){ //不为代码,设置flag
+ $this->flag_pre = $this->flag;
+ $this->flag = $this->flag_like;
+ if($this->flag_pre == 'table' && $this->flag != 'table')
+ $output='
'.$output;
+ else if($this->flag_pre == 'ul' && $this->flag != 'ul'){
+ $output=' '.$output;
+ }
+ }
+
+ return $this->parseInner($output); //输出需要输出的内容
+ }
+
+ //获取输出内容
+ public function output(){
+ $this->parse();
+ echo implode('',$this->lines);
+ }
+}
diff --git a/public/blog/md/index.php b/public/blog/md/index.php
new file mode 100644
index 0000000..ef1f0e7
--- /dev/null
+++ b/public/blog/md/index.php
@@ -0,0 +1,5 @@
+output();
diff --git a/public/blog/md/src/php-markdown/MD.php b/public/blog/md/src/php-markdown/MD.php
new file mode 100644
index 0000000..e53eaa5
--- /dev/null
+++ b/public/blog/md/src/php-markdown/MD.php
@@ -0,0 +1,479 @@
+
+
+
+
+file = $filename; //设置当前文件
+ $this->mdGen = $this->content($filename); //获取生成器
+ $this->flag = 'idel'; //闲置
+ $this->lines = array(); //所有行状态
+ $this->line_count = 0; //行数归0
+ }
+
+ private function content($file){ //获取生成器
+ if(file_exists($file)){
+ $fh = fopen($file,"r");
+ while(!feof($fh)){
+ yield fgets($fh);
+ }
+ fclose($fh);
+ }else{
+ return null;
+ }
+ }
+
+ //遍历每一个字符
+ private function every($str){
+ $l = strlen($str);
+ for($i=0;$i<$l;$i++)
+ if(ord($str[$i])<0x80)
+ yield $str[$i];
+ else{
+ yield $str[$i].$str[$i+1].$str[$i+2]; //三个字节
+ $i+=2;
+ }
+ }
+
+ //解析
+ private function parse(){
+ $ctnt = $this->mdGen; //生成器
+ $ret=array();
+ if($ctnt != null){
+ $ret = array();
+ foreach($ctnt as $line){
+ if($this->flag != 'code')
+ $line=ltrim($line); //删除左边
+ if(strlen($line)){
+ $ch = $line[0]; //判断第一个字符
+ $type=ctype_punct($ch);//标点符号
+ if($this->flag !== 'code') $line=preg_replace('/\s{2,}$/',' ',$line); //非代码模式
+ $ret[] = $this->parseLine($line,$type); //解析行
+ }else{ //空行
+ switch($this->flag){
+ case 'ul':
+ case 'ol':
+ $ret[]="$this->flag>";
+ $this->flag_pre = $this->flag;
+ $this->flag = 'idel';
+ break;
+ case 'table':
+ $this->flag = 'idel';
+ $ret[]='';
+ break;
+ default:
+ if($this->flag != 'el') $ret[] = ' ';
+ $this->flag = 'el'; //空行
+ }
+ }
+ }
+ }
+ $this->lines = $ret;
+ return $ret;
+ }
+
+ //生成blockquote
+ private function genQuote($level,$content){
+ if($level<=0) return "";
+ return str_repeat('',$level).$content.str_repeat(' ',$level);
+ }
+
+ //检查是否处于某个状态,默认检查是否处于代码状态
+ private function check($value='code'){
+ return ($this->flag == $value);
+ }
+
+ /**
+ * 生成一行新的表格列
+ * $data:需要输入的数据
+ * $type:生成类型
+ * $wrap:最快层包裹
+ * $sep:分隔符
+ */
+ private function genRow($data,$type='td',$wrap='tr',$sep='|'){
+ $ret='';
+ $mat = explode($sep,$data);
+ foreach($mat as $elem)
+ $ret.="<$type>".$elem."$type>";
+ return "<$wrap>".$ret."$wrap>";
+ }
+
+ /**
+ * 解析行内元素
+ * bold,italic,code,link,pic
+ */
+ private function parseInner($str){
+ $str=preg_replace('/\*\*\*([^\*\n\r]+)\*\*\*/','\1 ',$str); //加粗并加斜字体
+ $str=preg_replace('/\*\*([^\*\n\r]+)\*\*/','\1 ',$str); //加粗字体
+ $str=preg_replace('/\*([^\*\n\r]+)\*/','\1 ',$str); //斜体
+ $str=preg_replace('/```([^`\n\r]+)```/','\1',$str); //代码
+ $str=preg_replace('/`([^`\n\r]+)`/','\1',$str); //代码
+ $str=preg_replace('/!\[([^\]\r\n]+)\]\(([^\)\r\n]+)\)/',' ',$str); //图片
+ $str=preg_replace('/\[([^\]\r\n]+)\]\(([^\)\r\n]+)\)/','\1 ',$str); //图片
+ return $str;
+ }
+
+ /**
+ * 按照给定规则解析字符串:
+ * type:
+ * true 符号
+ * false 文字
+ * 返回:
+ * array('type'=>类型,'parts'=>array(...))
+ */
+ private function parseLine($str,$type){
+ if(strlen($str) == 0){
+ return array('type'=>'p','parts'=>[]); //返回空段
+ }
+
+ $valid_str = rtrim($str); //去除右边的空格
+
+ $str = $valid_str;
+ $output = ''; //需要输出的字符串
+
+ if($type == true){ //标点
+ $type_str = ''; //类型字符串
+ $data_str = '';
+ $flag = 0;
+
+ foreach($this->every($str) as $ch){
+ if(!ctype_punct($ch)){
+ $flag = 1;
+ }
+ if($flag == 0)
+ $type_str .= $ch;
+ else
+ $data_str .= $ch;
+ }
+
+ switch($type_str){
+ case '#':
+ $wrap = 'h1';
+ $this->flag_like = 'h1';
+ break;
+ case '##':
+ $wrap = 'h2';
+ $this->flag_like = 'h2';
+ break;
+ case '###':
+ $wrap = 'h3';
+ $this->flag_like = 'h3';
+ break;
+ case '####':
+ $wrap = 'h4';
+ $this->flag_like = 'h4';
+ break;
+ case '#####':
+ $wrap = 'h5';
+ $this->flag_like = 'h5';
+ break;
+ case '######':
+ $wrap = 'h6';
+ $this->flag_like = 'h6';
+ break;
+ case '+':
+ case '-':
+ $wrap = 'li';
+ $this->flag_like = 'ul';
+ if($this->flag != 'code'){
+ if($this->flag != 'ul'){
+ $this->flag_pre = $this->flag;
+ $this->flag = 'ul';
+ $output.='';
+ }
+ }
+ break;
+ case '```': //代码模式,不进行干扰
+ if($this->flag != 'code'){ //不为code,判断是否为单行代码
+ $output.=' ';
+ if(preg_match('/^\s*```([^`]+)```([^\s]+)\s*$/',$str,$mat)){ //单行代码
+ $output.="$mat[1] $mat[2]";
+ $str = '';
+ $data_str = '';
+ }else{
+ $this->flag_pre = $this->flag;
+ $this->flag = 'code'; //代码
+ }
+ }else{
+ $output.='';
+ $this->flag_pre = $this->flag;
+ $this->flag = 'idel'; //闲置
+ }
+ break;
+ case '[':
+ if(preg_match('/^\[\s\]\s*(.+)$/',$str,$mat)){ //选择
+ $output.=" $mat[1] ";
+ $this->flag_like = 'check';
+ }else if(preg_match('/^\[([^\]]+)\]\(([^\)]+)\)([^\s]+)\s*$/',$str,$mat)){ //未选择
+ $output.="$mat[1] ".$this->parseInner($mat[3]);
+ $this->flag_like = 'a'; //网址
+ }else if(preg_match('/^\s*(\[\d+\]\:)\s+([^\s]+)\s+([^\r\n]+)\s*$/',$str,$mat)){ //外部资料
+ $output.="$mat[1] $mat[3] ";
+ }else{
+ $output.=$str;
+ }
+ break;
+ case '[-]':
+ $output.=" $data_str ";
+ $this->flag_like = 'check';
+ break;
+ case '![':
+ if(preg_match('/^!\[([^\]]+)\]\(([^\)]+)\)([^\s]+)\s*$/',$str,$mat)){
+ $output.=" ".$this->parseInner($mat[3]);
+ $this->flag_like = 'img';
+ }else{
+ $this->flag_like = 'p'; //没有模式
+ $output.="$str";
+ }
+ break;
+ case '*': //斜体
+ if(preg_match('/^\*(.*)\*([^\s]+)\s*$/',$str,$mat)){
+ $output.=$this->parseInner($str);
+ $this->flag_like = 'i';
+ }else if(preg_match('/^\s*\*\s+(.+)\s*$/',$str,$mat)){
+ $str=$mat[1];
+ $wrap = 'li';
+ $this->flag_like = 'ul';
+ if($this->flag != 'code'){
+ if($this->flag != 'ul'){
+ $this->flag_pre = $this->flag;
+ $this->flag = 'ul';
+ $output.='';
+ }
+ }
+ }
+ break;
+ case '**': //粗体
+ if(preg_match('/^\*\*(.*)\*\*/',$str,$mat)){
+ $output.=$this->parseInner($str);
+ $this->flag_like = 'b';
+ }
+ break;
+ case '<':
+ $output.=$str;
+ $this->flag_like = 'html';
+ break;
+ default:
+ if(!$this->check()){ //非代码模式
+ if(preg_match('/^>+$/',$type_str)){ //引用
+ $level = strlen($type_str);
+ $this->flag_like = 'quote';
+ $output.=$this->genQuote($level,$data_str); //引用
+ }else if(preg_match('/^([^\|\n\r]+)(?:\|[^\|\n\r]+)+$/',$str)){ //表格确定格式---|---|....
+ if($this->flag == 'table'){
+ $this->flag_like = 'table';
+ $output.=''.$this->genRow($this->buf,'th').' ';
+ }else{ //非表格格式,上一行没有标题
+ $this->flag_like = 'p'; //没有格式
+ $output.=$this->buf;
+ $this->buf = '';
+ }
+ }else if(preg_match('/^\s*(\-{3,})|(\={3,})$/',$type_str)){ //hr
+ $output.=' ';
+ $this->flag_like = 'hr';
+ break;
+ }else{
+ $this->flag_like = 'p';
+ $output.=$str.' ';
+ }
+ }
+ }
+ $br = '';
+ preg_match('/^(.*)( )?$/',$data_str,$mat);
+ $data_str = htmlspecialchars($mat[1]);
+ if(!$this->check()){ //代码
+ if(!empty($wrap)) $output.="<$wrap>$mat[1]$wrap>".(isset($mat[2])?' ':'');
+ }else if($type_str!='```'){
+ $output.=htmlspecialchars($str).' ';
+ }
+ }else{ //首个非空字符不为符号
+ if($this->flag == 'code'){ //代码,直接输出
+ $str=str_replace("\t",' ',$str);
+ $output.=htmlspecialchars($str).' ';
+ }else if(is_numeric($str[0])){ //可能为有序列表,也可能是表格
+ if(preg_match('/^\s*\d+\.\s+([^\r\n]+)\s*$/',$str)){ //有序列表
+ $this->flag_like = 'ol';
+ $output.=$str;
+ }else{
+ $this->flag_like = 'idel';
+ foreach($this->every($str) as $ch){
+ $output.=$ch;
+ }
+ }
+ $output.=' ';
+ }else if(preg_match('/^([^\|\n\r]+)(?:\|[^\|\n\r]+)+$/',$str)){ //表格
+ $mat = explode('|',$str);
+
+ if($this->flag!='table'){ //进入表格
+ $this->buf = $str;
+ $this->flag_like = 'table';
+ $wrap = '';
+ }else{
+ $output.=$this->genRow($str);
+ }
+ //echo $mat[0].' ';
+ //var_dump($mat);
+ }else{ //其他
+ $this->flag = 'p';
+ $output.=$str;
+ }
+ }
+
+ if(!$this->check()){ //不为代码,设置flag
+ $this->flag_pre = $this->flag;
+ $this->flag = $this->flag_like;
+ if($this->flag_pre == 'table' && $this->flag != 'table')
+ $output='
'.$output;
+ else if($this->flag_pre == 'ul' && $this->flag != 'ul'){
+ $output=' '.$output;
+ }
+ }
+
+ return $this->parseInner($output); //输出需要输出的内容
+ }
+
+ //获取输出内容
+ public function output(){
+ $this->parse();
+ echo implode('',$this->lines);
+ }
+}
diff --git a/public/blog/md/src/php-markdown/demo/index.php b/public/blog/md/src/php-markdown/demo/index.php
new file mode 100644
index 0000000..12da55a
--- /dev/null
+++ b/public/blog/md/src/php-markdown/demo/index.php
@@ -0,0 +1,5 @@
+output();
diff --git a/public/blog/md/src/php-markdown/demo/test.md b/public/blog/md/src/php-markdown/demo/test.md
new file mode 100644
index 0000000..bb7eb43
--- /dev/null
+++ b/public/blog/md/src/php-markdown/demo/test.md
@@ -0,0 +1,81 @@
+# 一级标题
+## 二级标题
+### 三级标题
+#### 四级标题
+##### 五级标题
+###### 六级标题
+*斜体*
+**粗体**
+- 项目1
+- 项目2
+- 项目3
+- 项目4
++ 项目5
++ 项目6
++ 项目7
+
+1. apple
+2. boy
+3. cat
+
+[ ] 选择1
+[-] 选择2
+[-] 选择3
+[ ] 选择4
+
+---
+
+```c
+#include
+
+void test();
+
+int main(){
+ printf("Hello,World!\n");
+ return 0;
+}
+
+void test(){
+ printf("Hello,World!");
+}
+```
+
+[百度](https://www.baidu.com)
+
+
+**blockquote使用方法**
+>引言,这是一句引言
+>Hello,World!
+>>二级引言
+>>>三级引言
+
+apple|boy|cat
+---|---|---
+a|b|c
+d|e|f
+
+
+
+ Apple
+ Boy
+ Cat
+
+
+
+
+ a
+ b
+ c
+
+
+ d
+ e
+ f
+
+
+
+
+> I o u
+> This is just a test...
+>> Hello
+> World
\ No newline at end of file
diff --git a/public/blog/md/src/php-markdown/index.html b/public/blog/md/src/php-markdown/index.html
new file mode 100644
index 0000000..cd48cd3
--- /dev/null
+++ b/public/blog/md/src/php-markdown/index.html
@@ -0,0 +1 @@
+
diff --git a/public/message/static/txt/测试.txt b/public/message/static/txt/测试.txt
old mode 100644
new mode 100755
diff --git a/public/static/html/black-block.html b/public/static/html/black-block.html
old mode 100644
new mode 100755