自己思路写简单博客程序

2021-12-04 15:56:52 +08:00
 xiamuguizhi

前言

之前博友就我让我写一个属于自己的博客程序,我是一直没有忘记掉这件事情,但我小白一个能力有限不会啊就一直耽搁,最近我躺在床上看小说经常有些想法冒出来于是今天终于试了一下搞定了,就百度代码十分钟搞定。

思路

我发现 $_GET["p"] 是个很又简单方便的代码用它就能实现我的想法了。

成品

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <title>叶开楗个人博客</title>
</head>

<body>
    <header>
        <h1>我的个人博客</h1>
        <aside>这是描述.</aside>
    </header>

     <hr>
	
<?php
 if (!isset($_GET["p"])) { // 判断是否为空  空为首页
	 
  $hostdir= "./p"; //获取本文件目录的文件夹地址

  $filesnames = scandir($hostdir); //获取也就是扫描文件夹内的文件及文件夹名存入数组 $filesnames

 //print_r ($filesnames);

foreach ($filesnames as $name) {  // 循环输出? 百度的代码
 
//echo $name; 
$post=substr(strrchr($name, '.'), 1); // 不知道干嘛的 

    if($post=='txt'){ // 判断是否 txt 格式
	
		$name = str_replace(".txt","",$name); // 去掉.txt 
		
        $url="http://localhost/?p=".$name;  // 组合成 url 
         
        $aurl= "<a href=\"".$url."\">".$name."</a>"; // 输出 a 链接 
         
        echo $aurl . "<br/>";
    }
}
	  
	 }else{  // 输出文章页面
		 
	$text = file_get_contents("./p/" .  $_GET["p"] . ".txt");
	echo "<p>" . $text . "</p>";
 }
 ?>
 
     <hr>
     
     <h2>Epilogue</h2>
     <p>@2021  叶开楗所有。</p>
     
 </body>
 </html>

效果图

结尾

目前就是一个尝试,至于其他如时间之类的有思路还没尝试,就是直接获取创建 txt 的时间就好了,目前先这样吧。

博客地址: https://xn--qpru0x.cn/post/286

1945 次点击
所在节点    分享发现
13 条回复
xgfan
2021-12-04 16:47:11 +08:00
赶紧部署了把地址给贴上来🐶
xiaomimei
2021-12-04 17:23:12 +08:00
Path Traversal 。。。
xiamuguizhi
2021-12-04 17:36:25 +08:00
@xiaomimei 对的 需要限制
```php
if (isset($_GET["p"])) {
if (!is_numeric($_GET["p"])) {
echo("Invalid post");
die();
}
}
```
xiamuguizhi
2021-12-04 17:36:56 +08:00
@xgfan 不敢 本地测试一下就行。

问题 很多 有漏洞 容易被搞。
eason1874
2021-12-04 19:32:12 +08:00
$filesnames = scandir($hostdir); // 扫描目录下的文件路径存到 $filesnames
foreach ($filesnames as $name) // 循环文件路径,逐条处理
$post = substr(strrchr($name, '.'), 1); // 截取最后一个 . 号以及后面的字符串,然后去掉第一个字符,也就是去掉 . 号,其实就是获取文件扩展名后缀

第一个 if 里面其实可以这样写,只返回目录下的 *.txt 并且通过 basename 去掉 .txt 后缀就可以了
```
if ( ! isset($_GET["p"]) ) {
$filesnames = glob('./p/*.txt');
foreach ($filesnames as $name) {
$name = basename($name, '.txt');
echo '<a href="http://localhost/?p=' . urlencode($name) . '">' . $name . '</a><br/>';
}
}
```
kaiki
2021-12-04 22:39:30 +08:00
如果提交的文件名不存在呢,如果文件名带#号呢?
auh
2021-12-05 17:11:31 +08:00
硬核。我感觉,其他复杂的功能不要再尝试了。因为要从审美情趣上才能战胜对方。如果走别人的路,自己将无路可走。
xiamuguizhi
2021-12-05 19:23:02 +08:00
@eason1874 感谢 大佬 我想多几天 换种办法 我谷歌到了 好的代码了 等我来 demo 后在艾特你 哈哈。
xiamuguizhi
2021-12-05 19:23:38 +08:00
@auh 我目前用的这个程序 100 行代码的博客 https://github.com/petabyt/tinyblog
xiamuguizhi
2021-12-05 19:24:28 +08:00
@kaiki 不存在就输出 404 我估计也分离一下 到时候 用 txt 存储 一些信息和标题 后台处理 .md 存储文章 转 html 输出。
xiamuguizhi
139 天前
@auh 忘记回复了。已经成品一年多了。DEMOl:https://qq.md/
xiamuguizhi
139 天前
@eason1874 忘记回复了。已经成品一年多了。DEMOl:https://qq.md/
xiamuguizhi
139 天前
@xgfan 忘记回复了。已经成品一年多了。DEMOl:https://qq.md/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX