学习php制作网站系统php怎么实现访问网站文章页面

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站系统
logo
萧馨唯

网站系统  2026-09-14 11:00:04   180

学习php制作网站系统php怎么实现访问网站文章页面

做PHP网站系统,文章页面是绕不开的一环。用户点开一篇文章,浏览器发出请求,服务器找到对应内容,再拼成HTML返回。这个过程听起来简单,但里面涉及路由、数据库查询、模板渲染和安全处理,每一步都得接上。

先看最基础的访问方式。假设文章存在MySQL里,表叫articles,字段有id、title、slug、content、category_id、created_at、views。访问地址可以写成article.php?id=123。PHP里用$_GET[''id'']拿到编号,然后查库。注意别直接把参数拼进SQL,用PDO预处理:

$id = filter_input(INPUT_GET, ''id'', FILTER_VALIDATE_INT);
  if (!$id) { http_response_code(404); exit(''文章不存在''); }
  $pdo = new PDO(''mysql:host=localhost;dbname=test;charset=utf8mb4'', ''root'', ''password'');
  $stmt = $pdo->prepare(''SELECT id,title,content,created_at,views FROM articles WHERE id = ? AND status = 1'');
  $stmt->execute([$id]);
  $article = $stmt->fetch(PDO::FETCH_ASSOC);
  if (!$article) { http_response_code(404); exit(''文章不存在''); }

这样能挡住大部分非法id。查出来之后,更新浏览量可以顺手做:UPDATE articles SET views = views + 1 WHERE id = ?。不过高并发下每次都写库会累,可以用Redis缓存计数,或者延迟更新。小站直接写没问题。

接下来是页面输出。PHP本身可以混写HTML,但文章内容多,最好把模板单独放。比如建一个templates/article.php,在里面用输出标题,正文如果允许HTML,要经过白名单过滤,别直接echo数据库里的content,否则容易吃XSS。普通做法是存Markdown,输出时用Parsedown转成HTML,再过滤。

访问地址如果一直是article.php?id=123,对SEO不友好。现在常见的是/article/123.html或者/article/php-url-rewrite。实现方式有两种。Apache开mod_rewrite,在.htaccess里写:

RewriteEngine On
  RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L,QSA]

Nginx则在server段里写:

location / {
   try_files $uri $uri/ /index.php?$query_string;
  }
  location ~ ^/article/([0-9]+)\.html$ {
   rewrite ^/article/([0-9]+)\.html$ /article.php?id=$1 last;
  }

这样用户看到的是静态地址,实际还是PHP在跑。如果文章用slug,比如/article/php-article-access.html,就把正则里的数字换成([a-zA-Z0-9_-]+),查询时用slug字段。slug要唯一,建表时加UNIQUE索引。

一个完整的文章页面,除了正文,通常还要取分类、标签、上一篇下一篇。分类可以JOIN查,标签用中间表。上一篇下一篇按id或发布时间排:

SELECT id,title FROM articles WHERE id < ? AND status=1 ORDER BY id DESC LIMIT 1;
  SELECT id,title FROM articles WHERE id > ? AND status=1 ORDER BY id ASC LIMIT 1;

这些查询不复杂,但别在循环里查,能一次查完就一次查完。页面底部相关文章可以用分类id加LIMIT 5,随机或按浏览量都行。

模板渲染时,把公共部分拆开,比如header.php、footer.php,用include引入。文章页的title标签写成“文章标题 - 网站名”,meta description取正文前120个字,去掉HTML标签。这些细节对搜索收录有帮助。URL最好用canonical指向规范地址,避免带参数的重复页面。

还有一点容易忽略:文章状态。草稿、待审核、已删除的文章不能通过id直接访问。查询条件里加status=1,或者用权限判断。如果是后台预览,要校验登录态和权限,不能只靠一个secret参数。

缓存能明显降低数据库压力。单篇文章可以缓存成HTML文件,比如cache/article_123.html,存在且未过期就直接readfile。更新文章时删掉对应缓存。小站用文件缓存足够,大站上Redis或Memcached。但缓存要考虑登录用户和评论动态,别把用户相关的内容也缓存进去。

调试访问问题时,先确认rewrite规则有没有生效,再看PHP有没有收到id,接着看SQL有没有结果,最后看模板有没有输出。浏览器按F12看Network,服务器看access.log和error.log,基本能定位。PHP做文章页面不难,难的是把安全、性能和SEO一起顾上。把参数校验、预处理查询、模板转义、伪静态这几步做扎实,访问文章页面这条链路就通了。