阅读视图

发现新文章,点击刷新页面。

豆包“偷偷”“更新”文生图功能

大概是4月21日的晚上,豆包偷偷更新了。不能说是升级,因为出图效果明显劣化了。

倒是没有劣化成之前2.0那个版本。模型的确是更新了,但是精度大幅度下降了,乱七八糟的东西变多了。当然了,豆包的产品动态里屁内容都没有。

本文讲一下已知的变更。

(文章内容随时间推移而失效)


变更

屁话

首先是出图时增加了一堆屁话。

screenshot_on_b85m_by_flameshot_at_2025-04-24_00-39-46

看着像是把你的文本重新理解后重输出,这样好利于你接下来更改你的错误输入。

实际上放了个屁。

这段重排的文字和文生图的最终关系,从结果来看根本没关联。文字上好像是理解了你的文字输入,但实际上最终图片结果大部分场景下跟这段重排文字没啥关系,该错还是错的,这反而更加显蠢。


不知为何把 Debug Log 打到输出了

screenshot_on_b85m_by_flameshot_at_2025-04-21_23-54-12

周一大半夜更新线上业务本来就很恶心,然后这Bug一直活到现在。

看来其实他们根本不在乎这个业务的死活,就是做着玩的。


敏感词提示

这个算是一个有用的更新。

screenshot_on_b85m_by_flameshot_at_2025-04-22_17-06-20

比上来就生成失败然后把输入都给删了强多了。

等有机会把「领导」这个黑名单词汇出个图。


出图精度大幅下降

这是水下吗?这是游泳吗?这游泳馆为啥有海豚?

screenshot_on_b85m_by_flameshot_at_2025-04-23_23-12-58


画蛇添足问题明显

这狗熊脸哪里来的?

screenshot_on_b85m_by_flameshot_at_2025-04-24_00-14-20

这还不是最麻烦的,最麻烦的是,整体场景多余内容变得特别多。这导致整体输出变得非常的不可控,如果想要做内容的话,很有可能因为不必要输出乱跑导致完全跑题。

比如,这是更改前的输出:

screenshot_on_b85m_by_flameshot_at_2025-04-27_16-12-04

这是更改后的输出:

screenshot_on_b85m_by_flameshot_at_2025-04-27_16-11-53

很明显更改前,输出的内容很干净很稳定,但更改后,就非常过分的自作多情了。

准确度也变得更差了,带着雨帽还能露出双马尾这种错误,在更新之前是没有的。

这玩意就是明显的「画蛇添足」


单个会话出图数量有上限

限流。

每次对话能输出的图片数量被限制到了20。

screenshot_on_b85m_by_flameshot_at_2025-04-23_22-27-29

玩不起了呗。

screenshot_on_b85m_by_flameshot_at_2025-04-24_21-15-39

但并不是精确的20个,触发条件不详。


某些场景下会只生成一张图,而不是之前的四张

screenshot_on_b85m_by_flameshot_at_2025-04-24_20-13-33

虽说是因为带输入中指定了「一个」。

screenshot_on_b85m_by_flameshot_at_2025-04-24_21-17-37

但是输入里如果带数字的话,有可能会被识别成一个。

screenshot_on_b85m_by_flameshot_at_2025-04-26_13-21-01

触发条件的细节不确定。

screenshot_on_b85m_by_flameshot_at_2025-04-24_21-44-17

好歹还是做了个最多一次20个的限制。


结论

线上工具用着就是这么难受。

这反而让我想起了10年前的某个工作内容,项目是在微信上做公众号,比起竞争对手的核心优势就在于不需要在手机上另装APP就可以做推送(说实话当年很难绕过安卓手机上的各种流氓应用互相杀进程,所以自己做APP死路一条),结果做了几年之后,微信大幅度砍了公众号的推送功能,导致整个项目都报废了。或许这辈子能有个机会写一个生涯回忆录写一些相关内容,但估计没有那个机会了。

The post 豆包“偷偷”“更新”文生图功能 first appeared on 石樱灯笼博客.

讲讲目前使用线上AI文字生成图片工具的局限性

我这是捅到人家的天花板了。

本文多图多视频。我研究了一下,bilibili的嵌入代码,在后面接autoplay=0这个参数时也能像youtube嵌入代码一样禁止自动播放……(破站怎么自己就懒得写上参数呢。我估计写前端播放界面的人都不在了吧)

(为了省事,下文中 关于 文字生成图片图片生成AI生成图片 等一系列同义词,均使用 文生图 这个词)


前言

是的这一阵子仍然很无聊的在折腾AI,主要是在瞎搞豆包的文字生成图片功能。

画画一直是我可望而不可及的能力,天生没有拿笔画画的能力,我最高也只能做到画几个简单的几何体素描,这还是小学一年级寒假的时候送到画画班学了一个月才会的东西。

再往上就感觉脑子里有个瘤一样。人类做不到自己想象不到的事情,而我很明确的想象不出来自己拿着笔画画的样子,最多也只是在3DS上玩一下 《Colors! 3D》 或者 《绘心教室》。

jpg-IMG_20150119_123255

jpg-HNI_0088

所以当有一个能出图的工具摆在眼前的时候,肯定是得当作工具好好尝试一下的。

上一篇文章中也说过了,线下AI文生图工具用不起,线上AI文生图工具不可靠。

只不过这次玩得有点多,我算是把 豆包的AI文生图天花板给捅


尝试用豆包文生图功能做漫画

现在我用AI文生图功能基本上只是想做叙事漫画,而之前文章《[原创漫画] 《生命,科技,灵魂,死亡》,以及制作感想》中也讲了,因为这玩意不是人,所以连续出图的连贯性完全没有保证。

第一个思路就是尽量让内容足够简单,这样在内容变化上能尽量保证主体变化不大,不会崩溃。

于是做了这么个玩意。

《[原创漫画] 工作》

只不过叙事结构实在是太过简单了。甚至都抽象不起来。


尝试用豆包 智能编辑 和 区域重绘 功能出图后插帧做动画

我之前想到过,使用智能编辑和区域重绘,一点一点做一个渐变的效果,然后在用 rife 插帧补成动画。

为此还专门撞到了 rife 的 插帧数量 bug 上了。只不过 rife 的原项目早就沉寂了。社区目前或是没人维护,或是一堆不会说人话的莫名其妙脚本小鬼。

这是两个在动画风格下的尝试结果:

《尝试使用「AI智能编辑」+「AI 补帧」制作一个少女变身效果》

《继续 尝试使用「AI智能编辑」+「AI 补帧」制作一个少女变身效果》

只能说效果非常的不好。rife只能根据两帧之间的差别出图,而动画是一个流畅的东西,在 智能编辑 和 区域重绘 这两个功能下根本没有流畅度可言。

我也尝试了用 NLE 的播放速度曲线,结果没啥效果。尤其是速度曲线需要做积分来确定播放时长,而我现在的脑子算个一元一次方程式都卡壳。


捅到豆包文生图2.0模型的天花板

(我猜这玩意叫2.0,因为我不知道这玩意到底叫啥)

我在思考过后,想了个不如干脆不用动漫风格,而是用写实风格,找个特定的明星脸去保证任务的连贯性。

然后就发现了个很有趣的现象: 当关键词足够多的时候,出图风格会回落 ,像是内存被站满了然后把整体模型下降一个级别以减少内存使用的现象。

具体回落顺序是:「人像摄影」>「电影写真」>「3D渲染」>「动漫」

screenshot_on_b85m_by_flameshot_at_2025-03-31_19-36-09

可以看出在一定关键字下,人脸输出还是比较稳定的,图像也比较像真人。

但是当继续增加关键词的时候,出图风格就会往下落。「人像摄影」和「电影写真」都是出真人照片,「3D渲染」就开始出类似建模一样的风格,甚至直接降级到「动漫」这个风格里。

screenshot_on_b85m_by_flameshot_at_2025-03-31_19-36-15

继续增加关键词的话,即使手动设定「3D渲染」也会落到「动漫」风格。

screenshot_on_b85m_by_flameshot_at_2025-03-31_21-35-27

这算是捅到豆包的文生图功能的天花板了。

于是只能继续简化关键词,这也就意味着要简化场景的复杂度。

在这个限制条件下,我做了这个视频

《[原创] Dump》

怎么说呢,场景实在是太过于简洁了。

只能说,在线上工具有如此限制的情况下,创作上限真的是极其有限。

这也是为什么我一直讨厌依赖线上工具的原因之一。


豆包文生图模型升级到3.0

这玩意还能升级我是没想到的,因为我一直不太明确,目前这些大厂搞这些产品的目的是什么。豆包的这个产品,明显在外部宣传上没跑过同类选手,在商业宣传上亏一大截。事实上我个人认为线上这些工具全部都在迷茫期,或许瞎搞才是正常状态。

screenshot_on_b85m_by_flameshot_at_2025-04-12_22-24-27

模型升级后,的确画质提升了非常多,前文中讲的 风格回落 问题基本就不会出现了(或许是服务器升级了内存上限?)。但就像我说的 我一直讨厌依赖线上工具 ,线上工具的变化在用户端是不可控的。

模型升级后网站把不少样例都更新了。说实话旧版模型我觉得有些样例图根本就生成不出来,所以新版出来的时候很多样例肉眼可见的是画质变差了。但由于新模型的确有提升,所以整体上还算是升级。尤其是那个文案超级长的只放在「精选」分类里的例子,看着的确搏人眼球。

screenshot_on_b85m_by_flameshot_at_2025-04-13_16-36-01

screenshot_on_b85m_by_flameshot_at_2025-04-04_19-11-32

模型升级后的优点

(注:内容具有时效性,随时间变化部分内容会失效)

首先是文字内容的命中率高了非常多。

同等文案旧模型与新模型的对比:

生成特定风格图片_realesrgan2x

生成特定风格图片-2555473994924546-20250413162847

旧模型不会画单元楼门,不会画角色与背景的比例,不会画角色与背景的相对角度。新模型虽然在比例上还是歪的,但是至少把意思表达出来了。

输出的最大变长也从 1024 升级到了 2048,绝大多数情况下不用再手动用 realesrgan 放大一遍了后再缩小到 1920×1080 了。

模型升级后的带来的新缺点

原本作为「属性入口」的关键词,现在被当作真实的文字关键词使用。

比如原本用来控制角色身高的关键词,现在成了猎奇玩意。

screenshot_on_b85m_by_flameshot_at_2025-04-07_23-45-58

screenshot_on_b85m_by_flameshot_at_2025-04-07_23-49-34

screenshot_on_b85m_by_flameshot_at_2025-04-07_23-52-43

总之目前模型下已经没法控制输出角色的身高了。

screenshot_on_b85m_by_flameshot_at_2025-04-11_22-06-26

然后是输出的角色现在都不能闭嘴不露齿笑,全部都只能张嘴傻笑了。

screenshot_on_b85m_by_flameshot_at_2025-04-07_00-10-03

悲伤必然流眼泪,伤心难过不哭不行。

screenshot_on_b85m_by_flameshot_at_2025-04-14_00-55-16

screenshot_on_b85m_by_flameshot_at_2025-04-14_00-57-24

然后不知道为什么,发箍 这个字段总被当作 光环

screenshot_on_b85m_by_flameshot_at_2025-04-13_19-41-01

screenshot_on_b85m_by_flameshot_at_2025-04-13_19-51-43

(莫不是模型是用 蔚蓝档案 跑出来的?)

模型升级前后依旧存在的缺点

和前一篇文章提到的问题一样,只要元素个体超过两个,相互关系就会崩。

  • 车是依旧不会开的。

screenshot_on_b85m_by_flameshot_at_2025-04-07_20-32-35

  • 马是不会骑的。

screenshot_on_b85m_by_flameshot_at_2025-04-12_15-31-16

  • 部分关键词的理解还是错的。

screenshot_on_b85m_by_flameshot_at_2025-04-07_13-57-29

  • 疑问表情的时候问号是画出来的。

生成动漫风格厨房图片-2994986069843458-20250414012836

  • 关键字屏蔽还是在的

screenshot_on_b85m_by_flameshot_at_2025-04-06_16-07-05

  • 多个对象场景下比例还是很容易崩的。

生成动漫风格图片-2988978288407810-20250413231900

  • 多个对象场景下,对象间关系很容易出错。

比如,我想让这个紫色少女站在橙色少女前面,站着的时候就没问题。

screenshot_on_b85m_by_flameshot_at_2025-04-11_20-38-23

但只要橙色少女坐下,就没戏。

screenshot_on_b85m_by_flameshot_at_2025-04-11_20-38-29

screenshot_on_b85m_by_flameshot_at_2025-04-11_20-39-30

更别说总能渲染出离奇玩意出来。

生成动漫风格图片-2860612677803010-20250411191734

地上那个大屁股是谁掉的?


参考图、智能编辑、区域重绘、擦除

讲了出图,也得讲一下改图。

擦除

擦除应该是最有用的功能,只不过豆包的这个擦除,抹啥糊啥。

原图:

生成动漫风格图片-2996429080838914-20250413233527

豆包擦除:

生成动漫风格图片-2996429080838914-20250413233211

百度擦除:

jpg-e1d68564eccf784c743295bb2fbbd76c

(百度出的结果是jpg的而且分辨率会被缩,基本上是一坨屎)

GIMP 克隆工具:

生成动漫风格图片-2996429080838914-20250413233209

而且很诡异的是,豆包的擦除会破坏原图非目标区域。

screenshot_on_b85m_by_flameshot_at_2025-04-13_23-41-49

百度就不用讨论了,输出的是JPG肯定毁得一塌糊涂。

screenshot_on_b85m_by_flameshot_at_2025-04-13_23-42-06

所以有擦除需要的时候能用传统工具还是用传统工具最好。

screenshot_on_b85m_by_flameshot_at_2025-04-13_23-43-23

参考图、智能编辑、区域重绘

参考图、智能编辑、区域重绘,这三个我就一起说了。

原本2.0模型的时候,这仨功能就不怎么好使。最大的感觉就像是,这三个玩意用的是一个比2.0劣质一点的模型,但还没有到达不可接受的差距。

尤其是2.0的时候,文生图的输出最大边长是1024,而 智能编辑 的最大边长却是 1312,对应16:9比例的话输出结果是 1312×736 这么个分辨率,直接放大到 1920×1080 的话是 1920×1077 或 1925×1080 。也太奇葩了。

用了智能编辑后不仅分辨率坏掉了,图像的精细度也会降一大截。

生成特定风格图片-1961225555338754-20250316194924

生成特定风格图片-1961225555338754-20250316195003

如果运气好的话,新图的角色可能会比旧图角色小一点,那样的花就用rembg把旧图角色抠出来,然后自己编辑,再贴到新图上。

动画模型还好一点,真实场景模型几乎烂到恐怖。尤其是现在模型是3.0的情况下,精细度差别能大到吓人。

这是3.0的文生图:

生成特定风格图片-2715236277751298-20250407223427

这是区域重绘,尝试在椅子上放一瓶可乐:

生成特定风格图片-2715236277751298-20250413154949

这是 参考图/智能编辑 想在空椅子上加个人:

生成特定风格图片-2715236277751298-20250413155332

纯正 伪人-模拟恐怖

事实上即使是抛开画质不谈,智能编辑本身就会严重丢失原图的信息量。

换杯饮料立刻不哭:

生成动漫风格图片-3001337865737730-20250414010459-1

换个地毯立刻开心:

生成动漫风格图片-2991379788847618-20250414010930-1

白天黑夜表情就变了:

图片风格设定-3043733434981378-20250414231405-1

甚至连东西都不会拿了。

图片风格与内容描述-3006221925573122-20250414013744-1

我文章开头说过想用智能编辑区域重绘做动画,如果用真实场景的话大概就是这么个效果:

尝试使用「AI智能编辑」+「AI 补帧」制作一个少女变身效果(三)

这里还有一个动漫效果的,所有元素的变形都太严重,根本没法看。

尝试使用「AI智能编辑」+「AI 补帧」制作一个少女变身效果(四)

文中最开头也说了,本身这玩意流畅度就够呛,再加上 智能编辑和区域重绘 的模型,就烂得非常的变型了。真实场景的伪人问题特别严重。

可以说在文生图是3.0的场景下, 智能编辑区域重绘 基本是没法用的。

扩图

这功能本来也没啥太大用,就是在部分不在意内容的场景下填补空白,比如视频封面图啥的。

只不过由于出图分辨率是固定的,所以 扩图 的同时还在 缩图

我曾想着或许可以靠反复扩图的方法,做一个绝命毒师结局的 Baby Blue 场景,结果,豆包的扩图一直往竖屏海报这个方向跑。

screenshot_on_b85m_by_flameshot_at_2025-04-08_22-00-03

想了多种办法调整之后

jpg-screenshot_a4ab1c79e10c4b187093e6fe35a8629c

重点目标被糊成一堆气泡,想要用来重复的边缘图形也糊成了抽象油彩。或许自己拿 GIMP 克隆工具自己图都更靠谱。


豆包应用

说完模型,说下豆包这玩意。

声明:我个人本身是很讨厌头条系的(现在可能叫做字节系?)。但相对于厌恶程度,头条系在我眼中最多只能排第三。

这玩意应该是有一个网页版,一个 Chrome/Edge/Safari 插件,一个 Windows/MacOS 浏览器,一个手机客户端。Chrome插件 和 Windows客户端我都试过了,正经人谁会用这玩意?退一步讲,哪个产品经理想出来专门做一个浏览器只为了跑一个网页?脑残的阿里吗?

手机APP我没有试过。

网页端则只有短音验证码登录、APP扫码登录 和 第三方登录。

但是没有强制登出所有其他已登录对话的功能。

screenshot_on_b85m_by_flameshot_at_2025-04-15_00-42-44

这就意味着假如哪天手机短信验证码泄露了,其他人就可以一直在他的界面上一直监视你的所有操作。

仅是安全性这一块就可以打0分了。


豆包模型背后的火山方舟

这玩意背靠的是头条系字节跳动旗下的 火山引擎

火山引擎这玩意想要登录进去可以说特别困难,页面的稳定性烂得出奇,大部分情况下都是后端API超时,跨域请求出错,前端条件判定出错,然后报错一大堆。可以说这玩意至少在商业场景下就是一坨屎。

screenshot_on_b85m_by_flameshot_at_2025-04-12_22-39-34

进去之后看到的就是一个山寨 阿里云/腾讯云 一样的界面。云服务供应商虽然都长得差不多,但是至少阿里腾讯的业务至少控制台每次都能正常登录。

说实话我一直以为豆包这娱乐性的APP大概是为了向公众展示技术实力的一个窗口,而其背后应该有更多的能提供更强更稳定的商业服务。

至少 稳定 这一块是没了。

而作为 更强 这一块呢?

文生图的付费接口仍然是旧版的2.0模型。

screenshot_on_b85m_by_flameshot_at_2025-04-12_22-38-10

付费服务比免费服务还烂,是超出我的想象的。

screenshot_on_b85m_by_flameshot_at_2025-04-11_22-06-44

这个输入接口甚至比百度AI的公开服务还烂,而出图质量甚至都没有上一个版本的豆包高,只有百度AI的水平。

而且和豆包以及其他国内平台一样,文生图功能都只有一个文字输入接口,非常的落后。(现在的文生图平台基本是以「正面」和「负面」两个文字输入接口存在的,「负面」输入可以保证输出结果中不存在你完全不想要的内容)

(有一种不愧是头条系的感觉,除了搞出致瘾性算法之外什么都搞得稀烂的样子)

至于其他产品,图文生视频这玩意目前就是搞笑的,屁用没有。你可以看我在B站做的这个视频合集:合集·用AI生成的视频也太离谱了,这玩意最多只能用来做搞笑段子。

screenshot_Shotcut_00_02_29_833

语音模型,开放业务只有声音复刻和同声传译。

文本模型,这玩意真的有人想要花钱 这玩意吗?用途会是啥啊?自己搞个假的 DeepSeek 搞分销?


结尾

反正目前这个AI水平,放在个人手中,仍然只是个玩具。线上服务基本上都是不靠谱不稳定随时跑偏做得稀烂还想捞钱;线下个人用户很难将业务稳定的部署,硬件软件都是坎。

尤其是我目前的确有几个AI编程的需求,就是根据已有的html文本,直接生成带锚链接的目录。这个需求我在 豆包 百度 copilot 下同时试了 bash node php python 三个语言,基本全部都是语法错误,基本都是瞎写的,正则语法都是错误的。狗屎一堆。

上一篇文章《是时候在我这里聊一下人工智能了》,除了一条有效评论之外,全是来刷AI的评论。

screenshot_on_b85m_by_flameshot_at_2025-04-08_13-21-07

诚然我已知现在人的确没几个能读得下去文字,更别说是我写的这种枯燥无味的长篇大论。但是人机刷评论这操作属实是有些人放弃做人了,毕竟独立博客不需要刷活跃度来提升展示率,这些人机刷的这些玩意属实是真把脑子丢了塞了个热度算法塞自己头骨里了。

只能说互联网真的退潮了。「潮水褪去,才知道谁在裸泳。」结果发现在水里泡着的全都没穿裤子,大家都在那甩小屌,那就无所谓了。

前几年我的某个亲戚嚷嚷着要培养自己家还在上小学的孙子搞黑客,现在又要做直播,我就等他家啥时候搞AI了。

The post 讲讲目前使用线上AI文字生成图片工具的局限性 first appeared on 石樱灯笼博客.

尝试升级 WordPress 版本 和 PHP 版本,然后失败了

尝试把 WordPress 从 5.2 版本 升级到 6.6 版本,把 PHP 从 7.4 版本升级到 8.3 版本。

任务艰巨得完成不了。

非常的崩溃。


前提

我现在的线上的博客,以及线下的开发环境,以及(如果还在不为我知的某个角落存在的话)商用用环境,都是 PHP 7.4 的。

最早些时候,应该算是2015年,正式入坑 PHP ,那时候基本是公司用啥,我用啥。PHP 5.2 5.4 5.6 都用过了,尤其是 5.2 大坑一大堆,摔过很多次。然后到 2016 年的时候终于用上了革新的版本 PHP 7.0。真爽。再后来开始自己独立开发环境,直接开了 DAMP 的坑,最初也是用的 7.0 版本,然后就很随意的升到 7.3 版本,主要是当时开发负担少。然后博客站也都升级到了 PHP 7.3。

再后来 2021 年接了一个外包项目。虽然当时 PHP 8.0 已经发布了,但是貌似周边支持都不怎么地。为了保证开发速度,直接用了 PHP 7.4 版本。当时还涉及到前端开发,Node环境也是大更新,很早之前一直用的各种热门前端库基本都死绝了。博客和本地开发环境也都升级到了 PHP 7.4,博客的 WordPress 程序倒是没变,还是 5.2 版本(这里埋了个大坑),只是偶尔会从官网下载代码包然后手动更新对应的文件,以修复些潜在的安全问题。

现在是2024年年末,就连PHP 8.0 都已经停止维护快满一年了,最新版本 PHP 8.3 也已经发布快满一年了。WordPress 都到了 6.6 版本了,一堆 WordPress 插件都已经停止 5.2 版本的支持了。

想趁着有时间有机会,把 PHP 和 WordPress 都升级了。

天真了。


第一天

首先是把线上的代码全备份一遍。这个毫无工作量,我之前写了个备份代码,直接就把自己的整站扒下来。然后把备份的站再部署到本地的开发环境上,再改几个数据库字段,就完事了。打开后台,先禁用所有插件,以便升级之需。

Apache2 和 MySQL 不用动,因为用的一直都是 Docker 的最新版本,这几年也没什么巨大的兼容性变化。

PHP 这块我不知道算不算麻烦。我把 PHP 从 7.4 到 8.3 的所有 不向后兼容变更废弃功能 全都看了一遍。没多少,就几页,几分钟就看完了。个人感觉这么多变更,只有一条能实际影响到我日常开发工作,就是自 8.0 起不再支持 带有默认值的参数后面跟着一个必要的参数

screenshot_on_b85m_by_flameshot_at_2024-10-24_22-51-45.png

其实个人工作中也很少这么用,因为易读性有点烂。论性能来讲的话这么写性能也很差,只不过以前工作过的公司里就有很多人这么写,主要是为了防止其他同事调用函数忘记传参(空参也是参)。

其余的改动基本影响不到我。我使用的基本都是 PHP 的官方建议用法,最多也就是会遇到某些外部库被遗弃然后有个平替的情况,比如数据库接口啥的,即使出错了立刻就能发现。

于是很自信的先把 PHP 环境升级到了 8.3 。因为是基于 Docker 的所以也完全不用担心环境污染的问题。

然后就崩了,WordPress 就打不开了。

这倒是意料之中,毕竟当年 WordPress 4.3 版本当年连 PHP 7.0 都不支持。我现在用的是 5.2 版本,最高能支持的 PHP 版本也才 7.3 ……

Screenshot_2024-10-24_at_23-02-46.png

什么?7.3?但我已经用 PHP 7.4 跑了 WordPress 满 3 年了啊???

什么兼容性测试……

下载了个 wordpress-6.6.2 的包,按官方文档手动安装。 崩得一塌糊涂

全部删除了重新来,这回用官方的自动升级功能,直接从 5.2 升级 6.6。真神奇,WordPress 官网被墙了这么久了竟然能秒下 WordPress 的安装包,我也不知道他是走的什么渠道。PHP 就这点恶心,前台所有操作你都看不到任何细节,就像是在用 Windows 一样。

成功安装。然后 崩得一塌糊涂 。这回不仅崩得稀烂,而且由于没手工删除后台的旧文件,新旧文件混在一起,更是手足无措。

就这么搞了超过6个小时,一直干到后半夜三点多,搞不定。

放弃,睡觉。

然后严重失眠,抽搐。

screen_IMG_2148.png


第二天 白天

首先考虑下到底是 PHP 的问题还是 WordPress 的问题。

按理来讲我已经把 PHP 的升级文档都看完了,并没有什么会天塌一般的变更,但是 WordPress 这边的确天塌了。

先在 PHP 8.3 环境下运行一下我的其他项目看看,结果我的个人主页就崩了。

screenshot_on_b85m_by_flameshot_at_2024-10-24_23-33-27.png

我用的是 2023 年 3.1.48 版本 的 Smarty,其基础版本是给 PHP 7.0 做的,可能旧了吧。

下载了最新版本的 smarty-5.4.1 ,然后

screenshot_on_b85m_by_flameshot_at_2024-10-24_15-36-49.png

什么玩意? implode is Deprecated ,我怎么不知道?

又去重新看了一遍 PHP.net 官网的 implode 文档和 PHP 升级文档。根本没有 Deprecated 。

然后在网上搜了一下,发现是 Smarty 的锅。而且 Smarty 还在 join 和 implode 之间反复横跳。更恶心的是,implode 和 join 在 PHP 7.4/8.0 中已经声明并废弃了 先数组后分隔符 的用法,但是在 Smarty 中却是强制要求 先数组后分隔符 ?甚至官方在 issue 里来来了句 Smarty is Smarty and PHP is PHP. 有病吧。而且你就算有病,你特么连个文档都没有,谁知道你有这种抽风的设计啊。

你要知道之所以我还用 Smarty 这种超级古董,就是因为这是一种 靠谱的、前后端分离、完全后端渲染、仅需要 HTTP 和 PHP 环境、不需要臃肿框架和特定语法,的网页渲染模式,是提供给搜索引擎最靠谱的传统模式。没有网页模板系统的话,想写这种纯后端渲染前端显示的页面,就只能 php 和 html 代码混写,非常的恶心。

现在 Smarty 抽风了,真就不知道以后还怎么不依赖框架写这种页面。我搜了下,Laravel 的 Blade ,和 Symfony 框架下的 Twig,貌似也可以独立使用,但是我对 Laravel 和 Symfony 基本一无所知,作为一个 PHP 开发者真是有点丢人。

话题扯远了,回到刚才。

我目前是不太想动我的个人主页的,这 WordPress 是大头,是主要内容。主页只是个入口。虽然主页改动起来并不困难,代码量少,Smarty 抽风的部分比较好找。但主页这一块我其实并不满意,主要是多语言这块用的传参而不是独立页面,很受搜索引擎嫌弃,基本上没收录,收录的也搜不到。但我的确没有精力和欲望去重做。

另一方面,WordPress这边,崩溃得最多的部分其实是插件。WordPress的代码质量本来就很堪忧了,第三方插件更是三脚猫,各种天花乱坠的不规范语法,可以说基本上都不能在 PHP 8.3 上运行。

另外我虽然看了 不向后兼容变更废弃功能 ,但是 PHP 新版新增的语法糖也有点天花乱坠。我用的是最新版的 php-cs-fixer_v3.64.0 ,没配置好的话就会把那些插件的奇葩写法转写成 8.3 的语法糖,有时结果更是瞎眼,基本没有易读性。

综上考虑,先放弃 PHP 8.3 的升级。先把能通的条通。PHP 的升级难度应该不是最高的,但是底下这些撇不掉的小垃圾目前是必须要保且支持不到 PHP 8.3,没精力做修改。

放弃 PHP 8.3 继续用 PHP 7.4 。


第二天 晚上

看兼容性列表,WordPress 6.6 也是支持 PHP 7.4 的。

但是实际上 API 改动实在太大了,而 PHP 前端应用最恶心的一点,就是 出错了,不报错

即使开启了 define('WP_DEBUG', true); define( 'WP_DEBUG_LOG', true ); define( 'SAVEQUERIES', true ); ,也经常是

  • 功能好像开了但是没开
  • 功能好像崩了但是啥日志都没有
  • 功能正常使用但是页面上打了一堆不知道哪里来的错误日志

面对如此大的一个工程而大部分代码逻辑都是不可靠的。升级到 6.6 实在是消受不起。

放弃 WordPress 6.6 ,只升级到比较近的版本。

要不然试试 5.5 吧,毕竟我在用的一款插件,作者自评最高支持到 5.5。

下了个 WordPress 5.5 的安装包,装完了。崩,但是崩得没有 6.6 多。

主题 graphene

不开插件,只看主题,首先就是文章的评论显示不出来。检查后发现是评论的API变了,而我的主题 graphene 是 1.9.4.3 版本的,不支持 5.5 。

screenshot_on_b85m_by_flameshot_at_2024-10-25_00-48-04.png

有时候看其他人的代码就是折磨,代码里写法五花八门,空格TAB混着,一会拼接字符串,一会替换字符串。单引号双引号混着用,左边括号有空格,右边括号换行了。

说实话我都不知道这算不算改好了,反正现在是能显示出来。我更担心的是其实还有哪个不知道的角落还有错,但是看不到,毕竟 PHP 前端 出错了 不报错

官方倒是有个新版的 graphene,但是我现在用的这个主题就是我大量改动过的,因为 graphene 原版的代码实在是, 太错了 。好多代码完全不符合前端的理念。然后是颜色和界面也是要一点一点从设置里调,那复杂和麻烦程度,说真的我更乐意重写 HTML 和 CSS 。

我真的想过很多次自己做一个 WordPress 主题,这个想法可是足够老了。但是当时 WordPress 3 版本的主题文档就恶心到我了,真的超级麻烦。而到如今就 WordPress 现在的代码质量,我估计开发主题会更困难更恶心。

也是怪不得其他更轻量的博客程序能后追直上。

插件 Disable WordPress Core Updates

接下来是 Disable WordPress Core Updates 这个插件。

这个插件是为了禁用 WordPress 的界面更新的。但是其实只有一行有意义的代码:

add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );

首先 create_function 这个函数在 PHP 7.2 废弃,在 8.0 中删除,所以我改写成了。

add_filter('pre_site_transient_update_core', function ($a) { return null; });

然后就见证奇迹了。能用是能用,但是 pre_site_transient_update_core 这个字段我在整个 WordPress 代码中都没找到。为什么做一个 pre_site_transient_update_core add_filter 就能抑制 WordPress 界面提示升级? 魔法啊?

然后开启这个插件的时候,更新页面是崩的。

screenshot_on_b85m_by_flameshot_at_2024-10-24_21-14-55.png

魔法。

插件 NIX Gravatar Cache

接下来是 NIX Gravatar Cache 插件。

这是个把 Gravatar 头像缓存到本地服务器的插件,只不过早就死透了。我当时随便改了点代码对付着用,大部分时间没出错也就那样了。

首先是这段代码。(红色部分是我添加的改动)

screenshot_on_b85m_by_flameshot_at_2024-10-25_01-04-29.png

不能直接执行 wp_enqueue_scriptwp_enqueue_style ,要先执行个 add_action('wp_enqueue_scripts', 引用能调用那俩玩意的函数); 。外国人看这种超长的单词时不会眼花吗?

然后是这么一段代码。

screenshot_on_b85m_by_flameshot_at_2024-10-25_01-00-47.png

WordPress 的 register_啥啥啥_hook(__FILE__, array($this, '函数名')); 写法全都作废了,要改成 register_啥啥啥_hook(__FILE__, array($this, '函数名'));

接下来底下那一节:

  • 假如 路径不可写 且 路径为目录,报错

否则

  • 假如 创建目录(权限777)失败 且 路径不为目录,报错

就这烂判断条件看得我脑子都快炸了也没弄明白为什么这破玩意能在我线上服务器上跑几年没报错,而我本地开发环境却根本跑不通。

screenshot_on_b85m_by_flameshot_at_2024-10-25_01-19-42.png

而且这玩意讨厌就讨厌在于,确在我的测试环境下报错了,但是 WordPress 只是多了个 .php-error 的样式并且高出来 2em 的一节,但是一点错误日志都没有!!! 出错了 不报错

最后还是靠自己写 debug 代码定位的问题。

这 TM 都是些不该是问题的问题,竟然多得到处都是。

2天,一点有效进展都没有。唯一有效收获就是这些屎山不碰就没事,一碰能崩得全身是屎。

反而自己写的没有引用那些垃圾玩意的插件和程序,没发现啥大毛病。


第三天

2天没啥进展,给我干懵了。

俗话说没事别升级,升级必出事。

原本的想法是先试着升级,如果不能平滑升级的话,大不了全摧毁了,然后把整个博客文章用导入的方法塞回去重建。如果插件出问题了,大不了找找看是否有新的替代品。结果搜了一下,靠谱的插件基本没有,一大堆商业推广的插件,和一大堆复合性插件,而且这些插件无论对 5.x 版本 还是 6.x 版本的兼容性都乱七八糟,问题解决不了,还有可能引入更多的问题。主题这边则是更不想换,一方面本身现在用的主题就是我大量修改过的,因为网上的各种主题,仅安全性就一塌糊涂,更别说 HTML 标准了。我这主题还是专门针对 1366×768 分辨率优化过的,能在 小屏幕 150% 比例正常显示。让我再去改个新的,工作量也是太大。

现在基本上没辙了。

PHP 这边其实还行,而且版本活跃度比较稳定。

screenshot_on_b85m_by_flameshot_at_2024-10-25_22-09-00.png

https://packagist.org/php-statistics 能看出各版本使用占比都跟维护相关。但 7.4 版本 比 8.0 版本还受欢迎 属实乐了。

但是周边应用真的是质量山体滑坡。WordPress自 3.0 版本就开始崩,后面很多发展都很魔幻,就连编辑器都是靠社区兜底,到现在已经想不清楚这玩意的产品路线是啥了。

其他生态我也不清楚,毕竟作为一个 PHP 开发,我连 Laravel 和 Symfony 都没用过,商用产品都是用 ThinkPHP 应付的,当然最爽不过不依赖框架没有条条框框自己从头写。

但是像 Smarty 这种原行业标志都走奇葩路线了。可以说整个IT行业,基本上,正常的元老人物都退出舞台了,剩下的这些,刨去臭鱼烂虾,就只有偏执而扭曲了,假若走向歪路,那就没得旧,而这一点在开源社区上也极为明显(因为闭源商业的死不死没人关心),Godot 基金会开搞政治正确炮轰特朗普和动画头像用户,Linux 基金会直接开踢俄罗斯的代码贡献者。IT 行业现在就像是一个患了早期癌症的癌细胞轻微扩散病人,看似有救但却是谁都不想救。


结论

给我干哑火了,懵逼了,现在不知道咋整了。

The post 尝试升级 WordPress 版本 和 PHP 版本,然后失败了 first appeared on 石樱灯笼博客.
❌