上传2025_04_29备份作为记录
This commit is contained in:
100
public/blog/post/index.php
Normal file
100
public/blog/post/index.php
Normal file
@@ -0,0 +1,100 @@
|
||||
<head>
|
||||
<link rel="icon" type="image/x-icon" href="https://ww3.tw/blog/icon/original.ico">
|
||||
<title>文章列表</title> <!-- 标题 -->
|
||||
</head>
|
||||
<body id=wallpaper>
|
||||
<!-- 背景 -->
|
||||
<div id="div_1">
|
||||
<?php
|
||||
// 设定数据库路径
|
||||
$db_path = '/var/www/owp/open-ww3-project-ww3-tw/databases/sqlite/owp.db';
|
||||
|
||||
try {
|
||||
// 连接数据库
|
||||
$db = new SQLite3($db_path);
|
||||
// 连接成功输出连接成功
|
||||
echo "<!--数据库连接成功-->";
|
||||
// 如果连接成功,但是内部状态有问题
|
||||
if ($db->lastErrorCode() !==0) {
|
||||
// 依旧显示为连接失败
|
||||
die("数据库连接失败");
|
||||
}
|
||||
|
||||
// 内容区
|
||||
// 执行sql命令 查询表单
|
||||
$select_id_date_title_from_posts_btos /*查询posts表单中的id date title id从大到小排列*/ = $db->query('SELECT id, date, title FROM posts ORDER BY id DESC'); // 执行查询posts表单中的id date title id从大到小排列的命令
|
||||
// 循环 写入
|
||||
|
||||
echo "<a href='https://ww3.tw' style='background-color: rgba(147, 185, 255, 0.644);position: absolute;'>返回首页</a>";
|
||||
echo "<center><b><h2>全部文章</h2></b></center>";
|
||||
echo "<br>";
|
||||
echo "文章如下↓";
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
|
||||
echo "<div id='content'>"; # 内容排版
|
||||
|
||||
while ($row = $select_id_date_title_from_posts_btos->fetchArray(SQLITE3_ASSOC)) {
|
||||
|
||||
echo "文章id: " . $row['id'] . "<br>";
|
||||
echo $row['date'] . " " . "文章标题: " . $row['title'] . "<br>";
|
||||
echo "<a href='https://ww3.tw/blog/post/s/?id=" . $row['id'] . "'>页面跳转</a><br><br>";
|
||||
}
|
||||
|
||||
echo "</div>"; # 内容排版
|
||||
|
||||
|
||||
|
||||
// 关闭数据库连接
|
||||
$db->close();
|
||||
|
||||
// 捕获php报错
|
||||
} catch (Exception $e) {
|
||||
// 依旧显示为连接失败
|
||||
die("数据库连接失败");
|
||||
// 关闭数据库连接
|
||||
$db->close();
|
||||
}
|
||||
|
||||
// 随机变换图床api
|
||||
|
||||
$wallpaper_apis = ['https://www.loliapi.com/acg/pc/', 'https://api.sretna.cn/api/pc.php', 'https://www.api.plus/API/dongman/', 'https://moe.jitsu.top/img/?sort=pc', 'https://www.dmoe.cc/random.php', 'https://api.r10086.com/樱道随机图片api接口.php?图片系列=猫娘1', 'https://api.mtyqx.cn/tapi/random.php', 'https://api.ww3.tw/touhou'];
|
||||
$suiji_wallpaper = rand(0, count($wallpaper_apis) - 1);
|
||||
$wallpaper = $wallpaper_apis[$suiji_wallpaper];
|
||||
// 显示图床url在页面
|
||||
echo "<div id='wallpaper_url'>图片来源: " . $wallpaper . "</div>";
|
||||
?>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<style>
|
||||
#wallpaper {
|
||||
background-image: url(<?php
|
||||
echo $wallpaper;
|
||||
?>); /*图片地址*/ /* https://api.sretna.cn/api/pc.php */
|
||||
background-repeat: no-repeat; /*禁止平铺*/
|
||||
background-size: 100% 100%; /*图片占满100%*/
|
||||
margin: 0; /* 外边框为0 */
|
||||
/*padding: 0;*/
|
||||
|
||||
}
|
||||
|
||||
#div_1 {
|
||||
height: 100%;
|
||||
color: rgb(0, 0, 0);
|
||||
font-size: 19px;
|
||||
background-color: rgba(169, 169, 169, 0.48);
|
||||
}
|
||||
|
||||
#content {
|
||||
/* up、right、down、left */
|
||||
margin: 0px 0px 0px 100px;
|
||||
}
|
||||
|
||||
#wallpaper_url {
|
||||
color: rgba(255, 0, 0, 0.354);
|
||||
/* up、right、down、left */
|
||||
margin: 20% 0px 0px 75%;
|
||||
}
|
||||
</style>
|
||||
100
public/blog/post/s/index.php
Normal file
100
public/blog/post/s/index.php
Normal file
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
// 设置最大接受id
|
||||
const MAX_ARTICLE_ID = 100000;
|
||||
|
||||
// 获取搜索栏url的id
|
||||
$post_id = $_GET['id'] ?? null;
|
||||
|
||||
// 设定数据库路径
|
||||
$db_path = '/var/www/owp/open-ww3-project-ww3-tw/databases/sqlite/owp.db';
|
||||
|
||||
|
||||
/**
|
||||
* 2. 严格的输入验证 (健壮性检查)
|
||||
* 拦截所有非数字、无效范围或为空的输入
|
||||
*/
|
||||
if (
|
||||
empty($post_id) ||
|
||||
!is_numeric($post_id) ||
|
||||
(int)$post_id <= 0 ||
|
||||
(int)$post_id > MAX_ARTICLE_ID
|
||||
) {
|
||||
http_response_code(400); // HTTP 400 Bad Request
|
||||
|
||||
$error_msg = "错误:文章 ID 格式不正确。ID 必须是 1 到 " . MAX_ARTICLE_ID . " 之间的整数。";
|
||||
die($error_msg);
|
||||
}
|
||||
|
||||
// 通过检查后,将 ID 强制转换为整数
|
||||
$post_id = (int)$post_id;
|
||||
|
||||
try {
|
||||
/**
|
||||
* 3. 连接 SQLite 数据库
|
||||
* 注意:如果 PHP 运行用户没有读取此路径文件的权限,这里会失败。
|
||||
*/
|
||||
$db = new SQLite3($db_path);
|
||||
|
||||
/**
|
||||
* 4. 准备 SQL 查询语句 (核心安全防线:预处理语句)
|
||||
* 使用占位符 :id 代替用户输入。
|
||||
*/
|
||||
$sql = 'SELECT title, content FROM posts WHERE id = :id';
|
||||
|
||||
// 准备语句
|
||||
$stmt = $db->prepare($sql);
|
||||
|
||||
// 绑定参数:将 :id 替换为 $post_id 的值,并明确指定它是一个整数类型
|
||||
$stmt->bindValue(':id', $post_id, SQLITE3_INTEGER);
|
||||
|
||||
/**
|
||||
* 5. 执行查询并获取结果
|
||||
*/
|
||||
$result = $stmt->execute();
|
||||
|
||||
// 从结果集中获取一行数据
|
||||
$row = $result->fetchArray(SQLITE3_ASSOC);
|
||||
|
||||
/**
|
||||
* 6. 显示内容或 404 错误
|
||||
*/
|
||||
if ($row) {
|
||||
// 使用 htmlspecialchars() 函数防止 XSS 攻击
|
||||
$title = $row['title'];
|
||||
$content = $row['content'];
|
||||
|
||||
// --- 页面输出开始 ---
|
||||
echo "<!DOCTYPE html>";
|
||||
echo "<html lang='zh-CN'>";
|
||||
echo "<head><meta charset='UTF-8'><title>{$title}</title></head>";
|
||||
echo "<body>";
|
||||
echo "<a href='https://ww3.tw'>返回主页</a>";
|
||||
echo "<h1>{$title}</h1>";
|
||||
|
||||
// nl2br 用于将换行符转换成 <br>
|
||||
echo "<article>" . nl2br($content) . "</article>";
|
||||
|
||||
echo "</body>";
|
||||
echo "</html>";
|
||||
// --- 页面输出结束 ---
|
||||
|
||||
} else {
|
||||
// 文章未找到
|
||||
http_response_code(404); // 404 Not Found
|
||||
echo "<h1>404 Not Found</h1>";
|
||||
echo "<p>抱歉,ID 为 {$post_id} 的文章不存在。</p>";
|
||||
}
|
||||
|
||||
/**
|
||||
* 7. 清理资源
|
||||
*/
|
||||
$db->close();
|
||||
//$stmt->close();
|
||||
|
||||
} catch (Exception $e) {
|
||||
// 处理异常
|
||||
http_response_code(500); // 500 Internal Server Error
|
||||
error_log("SQLite 错误: " . $e->getMessage());
|
||||
die("系统错误,请稍后重试。");
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user