我是用PHP做的网站后台发布程序

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
张蓓宽

网站  2026-10-29 12:48:02   277

我是用PHP做的网站后台发布程序

我的网站后台发布程序是用PHP写的,从第一行代码到现在跑了快两年,每天处理几十篇稿件的发布和修改,没出过大毛病。当初选PHP没别的原因,就是服务器上本来就有环境,虚拟主机一年几百块钱,MySQL数据库随便建,不用额外折腾。后台发布程序说白了就是让编辑能登录、写稿、传图、选分类、定时发布、撤稿改稿,这些功能用PHP实现起来直接,不用绕弯子。

整个程序没上框架,原生PHP加PDO连数据库,文件结构就四个目录:admin放后台入口和模板,includes放数据库连接和公共函数,uploads存附件,cron放定时任务脚本。核心文件加起来不到三千行,其中发布逻辑和表单验证占了将近一半。数据库建了五张表:文章主表、分类表、标签关联表、附件表和操作日志表。文章主表字段控制在二十个以内,正文用mediumtext,摘要用varchar(255),状态字段用tinyint区分草稿、待审、已发布、已下架,发布时间用int存时间戳,查询时比datetime省事。

发布表单提交后先过一遍服务端验证:标题长度限制在5到80个字符,正文不能为空但允许粘贴带HTML的内容,图片上传单独走一个接口。上传这块踩过坑,一开始直接拿$_FILES判断,结果编辑传了张5MB的图,PHP默认上传上限2M,页面直接报错。后来在入口文件里用ini_set把upload_max_filesize调到8M,post_max_size调到10M,前端再加一层文件大小检测,超过6M就提示压缩。图片存到uploads目录下按年月分文件夹,文件名用md5(时间戳+随机数)加原扩展名,数据库里只存相对路径,这样以后换域名或者迁目录不用改数据。

正文编辑用的是自己拼的简易富文本,没引第三方编辑器,就一个textarea加几个按钮:加粗、斜体、插入链接、上传图片。点击上传图片时用FormData异步传到upload.php,返回JSON里的路径再插到光标位置。这个方案比直接嵌UEditor轻量得多,编辑们用惯了也没抱怨。发布按钮点下去走的是ajax提交,后端收到数据后先开事务,往文章表插一条记录,再把标签关联批量插进去,最后写一条操作日志。事务里任何一步失败就回滚,前端提示具体错误。发布成功的文章如果设了定时,就在cron目录下写个php脚本,每分钟跑一次,扫status=2且publish_time小于当前时间的记录,批量更新成已发布。服务器上加了crontab,命令就一行:* * * * * /usr/bin/php /home/site/cron/publish.php,跑了一年多没漏过。

撤稿和改稿逻辑简单,但有个细节值得说:编辑改已发布的文章时,程序不会直接覆盖原记录,而是先复制一份到历史表,再把主表更新。这样万一改错了还能从历史表里找回上一版。历史表只存文章id、标题、正文和修改时间,不存附件,省空间。操作日志表记录谁在什么时间做了什么操作,字段就五个:user_id、action、target_id、detail、created_at。日志只保留最近90天,每天凌晨脚本删一次旧记录,表一直维持在几万行,查询不卡。

性能上没做太复杂的东西。文章列表页用的是分页查询,每页20条,count(*)单独查一次缓存到文件里,五分钟过期。后台首页的统计数字(今日发布数、待审数、总文章数)用memcached缓存十分钟,编辑刷新页面不会频繁压数据库。实际测过,后台列表页在两千篇文章量级下响应时间在120毫秒左右,发布单篇文章平均耗时80毫秒,图片多的时候会到200毫秒,主要花在文件写入上。服务器是1核2G的云主机,PHP7.4加OPcache,MySQL没做特殊调优,就改了个innodb_buffer_pool_size到256M。

安全方面做了几件事:所有数据库操作走PDO预处理,防注入;后台登录密码用password_hash存,登录失败五次锁IP半小时;每个表单带csrf token,token存在session里;上传目录下放了个.htaccess禁止执行php文件。还有个小细节,后台入口文件不叫admin.php,改成了随机字符串加.php,编辑收藏夹里存着,外人猜不到路径。虽然不算多安全,但对付脚本小子够了。

这套程序没用什么高深技术,就是老老实实把每个功能写清楚,出错有提示,操作有日志,数据有备份。每周日半夜自动mysqldump到另一个目录,保留最近四周的压缩包。编辑们用了两年,提的需求基本都是加字段、改文案、调排序,没动过核心逻辑。有时候觉得PHP做这种中小型后台确实顺手,改起来快,部署也简单,传上去就能跑。