网站源码里换图片,听起来就是找到旧图、传上新图的事,但真动手的人都知道,坑不少。有人换完前台没变化,有人图片裂了,还有人把网站搞崩。其实核心就两点:找对位置,清掉缓存。
先搞清楚你要换的图片属于哪种。一种是静态文件,比如logo、背景图、图标,它们直接存在服务器目录里,路径通常是/images/、/static/、/uploads/这些。另一种是动态调用的,比如CMS里的文章封面、产品图,图片地址存在数据库,或者模板里用变量输出。这两种处理方式不一样。
找静态图片最直接的办法是打开网页,右键点那张图,选“检查”或者“查看元素”,看img标签的src。比如src="/templets/default/images/logo.png",那你就去服务器根目录下找templets/default/images/这个文件夹。如果图片是CSS背景,那就看background-image的URL,可能藏在css文件里。用FTP或者宝塔面板的文件管理器进去,把新图改成和旧图一模一样的文件名,直接覆盖。注意扩展名也要一致,原来png就png,别改成jpg,否则路径对不上。
这里有个细节:Linux服务器区分大小写。Logo.png和logo.png是两个文件。我见过有人传了Logo.png,结果源码里写的是logo.png,前台死活不显示。所以文件名最好全小写,或者严格对照。
如果是CMS建的站,比如WordPress,换图片更简单。后台媒体库直接上传新图,然后替换文章或页面里的旧图。但有些主题的设置选项里,logo和favicon是单独上传的,那就去外观-自定义里改。织梦、帝国这些老CMS,图片可能放在uploads/allimg/日期目录下,后台有附件管理,但替换后要更新缓存。有些模板会把图片路径写死在模板文件里,那就得改模板。

数据库里的图片替换稍微麻烦点。比如文章内容里插入了图片,图片地址是绝对路径。你换了域名或者图片目录,就得进数据库批量替换。用phpMyAdmin执行SQL:UPDATE wp_posts SET post_content = REPLACE(post_content, ''旧地址'', ''新地址''); 但操作前一定备份数据库。我吃过亏,替换错了一个字符,整个文章图片全挂。
换完图片看不到,十有八九是缓存。浏览器缓存、CDN缓存、服务器OPcache、CMS缓存,一层一层查。浏览器按Ctrl+F5强制刷新,或者开无痕窗口。CDN比如Cloudflare,要在后台清缓存。宝塔面板有清理缓存按钮。WordPress装了缓存插件,也要清。有时候图片换了,但缩略图没换,因为CMS会生成不同尺寸的缩略图,你得重新生成。
图片本身也有讲究。尺寸别差太多,原来200x200,你传个800x800,虽然能显示,但浪费带宽,页面变慢。根据HTTP Archive的数据,图片平均占网页总字节的40%以上,移动端更明显。所以替换时顺便压缩一下,WebP格式比JPEG小25%到35%,现在主流浏览器都支持。但要注意,如果源码里写死了.jpg,你传.webp可能不识别,得改后缀或者用picture标签。
权限问题也常见。上传覆盖时提示“权限不足”,说明文件所属用户不对。Linux下用chown改所有者,或者chmod 755给权限。但别乱给777,不安全。
如果源码被加密或者混淆了,找图片会头疼。可以试试全局搜索图片文件名,用Notepad++或者VS Code的“在文件中查找”。有时候图片路径是拼接的,比如{dede:global.cfg_templets_skin/}/images/bg.jpg,那就得找模板标签。
最后说个真实案例。上个月帮朋友换一个企业站的banner,图片在模板里,我直接覆盖了文件,前台没变。查了半天,发现他用了CDN,缓存没过期。去CDN后台刷新,立马好了。所以换图不是技术活,是细心活。
总结一下:定位图片用浏览器开发者工具,替换时保持文件名和路径一致,CMS优先用后台,数据库操作先备份,换完清缓存。做到这几步,基本不会出问题。