今天搞个实战复盘,聊聊建PHP网站那些坑。上个月接了个活儿,客户要弄个小商城,本来想着PHP熟门熟路快得很,结果差点被几个老问题折腾秃头。
开局就卡脖子的数据库连接
吭哧吭哧搭好环境,代码都码了百来行,信心满满一刷新,嚯!空荡荡一片,数据库毛都连不上。心里咯噔一下,赶紧开浏览器开发者工具瞄一眼,好家伙,500错误码扎心得很。
我猜八成是数据库账号密码不对:
- 先冲进文件,把用户名密码来回核对了三遍,没毛病;
- 又去敲MySQL命令行,直接拿账号登,进去了!说明密码没错;
- 急得抓耳挠腮,突然瞥见主机地址写的是"localhost",灵光一闪!服务器是Docker起的MySQL,"localhost"这玩意儿它不认,得改成Docker内部域名或者IP;
- 麻溜改成数据库容器名,再一刷新,商品列表噌地蹦出来了!这破事儿耗了我半个钟。
中文乱码逼疯强迫症
刚松口气,又傻了。商品详情页里"牛仔裤"仨字变成"è¥è…éμè§",活像外星文。心里直骂娘,这乱码真是PHP祖传坑。
火速启动排雷:
- 打开HTML脑袋,meta charset="UTF-8"写得明明白白;
- 数据库也留了心眼,建表直接CHARSET=utf8mb4安排上;
- 可为啥还是乱?咬着后槽牙点进数据库客户端,发现存进去的数据早就面目全非了...
猛地想起关键步骤漏了!连接数据库后光顾着查询,忘了执行一句mysqli_set_charset($conn, "utf8mb4")。补上这句再测试,中文终于不闹幺蛾子了——这教训值一顿火锅钱。
文件上传暗藏杀机
客户非要加个商品图片上传功能。写完上传脚本,顺手传了个,页面乖巧显示缩略图,正得意,隔壁测试同事贱兮兮一笑,反手甩了个文件上来!浏览器地址栏直接显示文件路径,冷汗唰地下来了——这要是被传木马脚本服务器就裸奔了。
当场黑着脸打补丁:
- 卡死文件类型,只准jpg/png传进来;
- 文件名暴力重命名,date("YmdHis")时间戳保平安;
- 文件存到/public/upload还嫌不够,再加层.htaccess锁死PHP执行权限。
改完抓着测试同事咆哮:"再传脚本试试!"结果页面淡定显示乱码文件名图片,根本运行不了,这才踏实。
事后烟(排雷总结)
这趟活儿整下来,深刻体会儿时奶奶说的"螺丝要拧三遍":
- 数据库别信"localhost":容器化环境里它就是薛定谔的主机,动手前先ping一把;
- 中文编码四重奏:HTML、PHP、数据库、连接四兄弟必须都叫UTF-8,少一个就演川剧变脸;
- 文件上传当防贼:类型检查+重命名+隔离存储三件套,比请保安便宜多了。
叨叨一句:昨晚修BUG到两点,楼下便利店关门前抢到一瓶红牛,救了大命。下次搞PHP项目,高低得先屯半箱在工位——这玩意儿比什么架构设计都实在!





