V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiamuguizhi
V2EX  ›  分享发现

自己思路写简单博客程序

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

    前言

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

    思路

    我发现 $_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($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
        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   ·   实用小工具   ·   5324 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:01 · PVG 15:01 · LAX 23:01 · JFK 02:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.