自己思路写简单博客程序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiamuguizhi
V2EX    分享发现

自己思路写简单博客程序

  •  
  •   xiamuguizhi 2021-12-04 15:56:52 +08:00 2446 次点击
    这是一个创建于 1407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    之前博友

    思路

    我发现 $_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

    13 条回复    2023-12-10 15:06:38 +08:00
    6IbA2bj5ip3tK49j
        1
    6IbA2bj5ip3tK49j  
       2021-12-04 16:47:11 +08:00   1
    赶紧部署了把地址给贴上来
    xiaomimei
        2
    xiaomimei  
       2021-12-04 17:23:12 +08:00 via Android
    Path Traversal 。。。
    xiamuguizhi
        3
    xiamuguizhi  
    OP
       2021-12-04 17:36:25 +08:00
    @xiaomimei 对的 需要限制
    ```php
    if (isset($_GET["p"])) {
    if (!is_numeric($_GET["p"])) {
    echo("Invalid post");
    die();
    }
    }
    ```
    xiamuguizhi
        4
    xiamuguizhi  
    OP
       2021-12-04 17:36:56 +08:00
    @xgfan 不敢 本地测试一下就行。

    问题 很多 有漏洞 容易被搞。
    eason1874
        5
    eason1874  
       2021-12-04 19:32:12 +08:00
    $filesnames = scandir($hstdir); // 扫描目录下的文件路径存到 $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
        6
    kaiki  
       2021-12-04 22:39:30 +08:00
    如果提交的文件名不存在呢,如果文件名带#号呢?
    auh
        7
    auh  
       2021-12-05 17:11:31 +08:00
    硬核。我感觉,其他复杂的功能不要再尝试了。因为要从审美情趣上才能战胜对方。如果走别人的路,自己将无路可走。
    xiamuguizhi
        8
    xiamuguizhi  
    OP
       2021-12-05 19:23:02 +08:00
    @eason1874 感谢 大佬 我想多几天 换种办法 我谷歌到了 好的代码了 等我来 demo 后在艾特你 哈哈。
    xiamuguizhi
        9
    xiamuguizhi  
    OP
       2021-12-05 19:23:38 +08:00
    @auh 我目前用的这个程序 100 行代码的博客 https://github.com/petabyt/tinyblog
    xiamuguizhi
        10
    xiamuguizhi  
    OP
       2021-12-05 19:24:28 +08:00
    @kaiki 不存在就输出 404 我估计也分离一下 到时候 用 txt 存储 一些信息和标题 后台处理 .md 存储文章 转 html 输出。
    xiamuguizhi
        11
    xiamuguizhi  
    OP
       2023-12-10 15:06:02 +08:00
    @auh 忘记回复了。已经成品一年多了。DEMOl:https://qq.md/
    xiamuguizhi
        12
    xiamuguizhi  
    OP
       2023-12-10 15:06:12 +08:00
    @eason1874 忘记回复了。已经成品一年多了。DEMOl:https://qq.md/
    xiamuguizhi
        13
    xiamuguizhi  
    OP
       2023-12-10 15:06:38 +08:00
    @xgfan 忘记回复了。已经成品一年多了。DEMOl:https://qq.md/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2503 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:54 PVG 09:54 LAX 18:54 JFK 21:54
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86