惊魂一夜--有福新闻UfqiNews升级到PHP8

有福新闻UfqiNews的老版本依然运行在 GWA2 PHP ( https://ufqi.com/dev/gwa2/ )上,去年底PHP编程语言本身升级到了PHP8, 获得好评,我们即打算择日升级GWA2 PHP到PHP8版本。

考虑到之前关于升级的经验教训,任何开源软件,能够在生产线部署的,一定是当前稳定版本(latest stable release)的上一个版本,也就是上一个稳定版本的最新小版本。所以我们考虑将 有福新闻UfqiNews的GWA2 PHP升级的话,也不会直接去PHP8,而是先使用 PHP8之前的一个稳定版本PHP7.4.

又由于软件开发和使用,尤其是系统软件的开发和使用,另外一个黄金法则是能够运行就尽量不要去做任何修改(包括升级、优化等)。所以如果没有一定的动力的话,我们是不会去修改(升级、优化)一个运行正常的系统。

不幸的是,时过境迁,物换星移,人们对软件系统的改进期望是无止境的。很快我们就遇到一个需要通过升级来解决的问题:当前的UfqiNews ( https://ufqi.com/news/ ) 系统里在处理图片水印时,无法在WebP格式的图片上打水印。这也不是大问题,要求图片另存为其他格式也可以绕过去,毕竟WebP格式的图片还是新事物。可是看到WebP的发展势头,似乎普及起来也只是时间问题,加上对PHP8的神乎其技的“飞速”传言,我们就依仗“艺高人胆大”的脑门一热的开启了在 UfqiNews上升级PHP8的操作了,从而遇上了惊魂一夜,PHP8有不兼容的问题,尤其是看起来像是走退路的NULL值问题和数据类型错误抛出TypeError/ValueError。

PHP Built-in function count() Changelog ¶

VersionDescription
8.0.0count() will now throw TypeError on invalid countable types passed to the value parameter.
7.2.0count() will now yield a warning on invalid countable types passed to the value parameter.

PHP Built-in function explode() Changelog ¶

VersionDescription
8.0.0explode() will now throw ValueError when separator parameter is given an empty string (""). Previously, explode() returned false instead.

另一个受影响较为严重的PHP内置函数是 implode ,
PHP 7及之前,
$str = implode(“-“, $array);
\# 能吃屎, 不管 $array 是啥料,都正常返回,继续程序 …
PHP 8及之后,
$str = implode(“-“, $array);
\# 开始硬怼了, $array 类型不对时,直接抛出错误,撂挑子不干了!

PHP之所以雄起的“初心”之一就是有种“能吃屎”的精神,一个变量不管啥类型,都能顺利执行跑通,即便结果是非预期的,断然不至于将程序退出来,直接硬怼调用者说,“傻货,你输入的数据有问题!”

通常只有那些强类型的、预编译的语言的才有那么硬刚硬怼的底气,PHP之前是断然不会的。真是由于这种“有事私下说,有问题日志里打小报告”的平易近人,获得了很多小白初级程序员的喜欢,遇上互联网的东风,逐渐成燎原之势。PHP7及之前的程序代码,只要没有形式上错误,基本上都能顺利运行、跑出结果(或可能非预期)。繁琐复杂的编译、类型检查、内存申请与销毁、垃圾回收、数组越界、空指针、Nnll对象等等一些列问题,语言类库及API本身都做了一系列的努力,使之尽可能不终止程序的运行。

这种平易近人其本质是语言本身的类库及API对程序开发者、对程序使用者提供了异常情况处理工具,是某种包容精神的体现。程序员会搞错类型,终端用户也会手抖,网络也不稳定,操作系统也偶尔异常,输入的数据类型有问题似乎在所难免。

语言开发者这么升级改进长脾气地硬怼程序开发者,如果程序开发者不做异常处理,则就一路硬怼到终端用户那里。这显然是不行的,让终端用户吃瘪,程序员是无法交代的,程序员可以往回找语言开发者吗? 纵有理由千千万,简单易行的PHP,不该忘了初心,将这些繁琐的、基本的检查抛出来(而不是兼容处理消除消化掉问题),把强类型语言的“缺点”学来,作为“长进”。

这些背后可能是复杂和漫长的决策、权衡与博弈,其本身是某种方法论的对比,其本身都没有对与错,而是一些取舍和边际选择。这让我想起了我们在设计 GWA2 的API接口时的一些考虑,同时也在阿里巴巴和Google的一些Java语言规范( https://ufqi.com/news/ulongpage.1507.html?tit=Java開發手冊-阿里巴巴-嵩山版-2:編程規約 )中出现过。

比如在 GWA2 的主体方法与接口中,如果方法的返回值是基本类型( primitive scalar types ),应该是有个默认返回值,以上面 PHP 的 count 函数为例,我们预期的写法:
function int count($list){
int c = 0; # default or on failure
if(!isset($list)){ } # a waring
else if($list == null){ } # another warning
else if(!is_array($list)){ } # 3rd warning
else{
\# count based on some rule…
c++;
}
return c;
}

如果是非基本数据类型的,如数组、列表或者Hash表、资源描述符等返回值( non-primitive compound types ),则应该是两个返回字段,一个字段标注是否成功处理,另外一个字段则是处理的实际结果值。以上面 PHP 的 explode 函数为例,我们预期的写法:
function array explode($separator, $string){
$rtnArray = array(); $rtnList = array;
$isSucc = false;
if(!isset($string)){ } # a waring
else if($string == null){ } # another warning
else if(!is_string($string)){ } # 3rd warning
else if($string == “”){ } # 4th warning
else{
\# split based on some rule…
$rtnList[$i] = function($string, $i);
$isSucc = true;
}
if($isSucc){ $rtnArray[0] = true; $rtnArray[1] = $rtnList; }
else{ $rtnArray[0] = false; $rtnArray[1] = $rtnList; }
return $rtnArray;
}

GWA2 Manual Book

GWA2 Return Values of Methods


附记1.

为了使得系统能够支持WebP格式的图片文件支持水印功能,我们打算升级PHP语言环境。

起初,我们并不打算升级到 PHP8,而是打算升级到PHP7.4这个版本,在实际编译PHP源代码时,当前系统上报错说缺少 oniguruma类库,即便通过yast/zypper 安装了 oniguruma-devel 之后,仍然报错说无法找到,而相同配置的另外其他服务器则能够顺利找到&通过编译。 Linux还有很长的路要走。
既绕无法安装PHP7.4, 那就试试PHP8, 结果还是类似错误,预计只好针对oniguruma这个类库下点功夫,经过一番折腾,终于通过手工下载 https://github.com/kkos/oniguruma 一份源代码,手工编译&安装之后才通过。

解决了 oniguruma 这个问题之后,在编译PHP8的时候,还遇到 ext/geoip 无法编译通过的情况,后来通过手工下载 https://github.com/rlerdorf/geoip 一份重新放入 ext/geoip 才算通过。

尽管解决了那么多问题,具体PHP8兼容性问题,还没有显现。由于担心会出现异常,我们选择在深夜流量较小的时候找一台服务器进行试装,结果就遇上重启之后大面积报错的情况,举凡遇到 count 和 implode /explode等地方,都需要手工增加相应类型或数据安全检查代码。

顺带的昨晚还未被 Hanjst ( https://ufqi.com/dev/hanjst/ ) 替换掉的PHP Smarty模板引擎,一样随着PHP8的升级,触发一团糟的问题,服务被迫终止了一会。庆幸我们在后续的GWA2中将逐渐解耦模板引擎,使用 Hanjst替换掉Smarty,与服务器端开发语言不再绑定。

再一次的惊魂一夜!再次印证了,不要就近升级到软件的最新的latest stable release,惊魂大于惊喜。
再次印证了,能跑的系统,尽量避免升级,各种问题会导致业务被迫中断。智者千虑,必有一失。

—-

附记2.

这是使用 WordPress 的PHP8兼容版,创作的第一篇Blog,WordPress的PHP8的版本升级比预期的快,体验好!值得学习。

WordPress的新版升级过程大致为:
1)备份原程序和资源文件,备份原数据库;
2)检查备份的可还原性;
3)新创建WordPress子目录,或者将现有目录转移为 old目录;
4)下载并解压WordPress的新版本,解压到相应子目录,通过访问 blog/wp-admin/install.php 启动程序;
5)输入原数据库的访问账号,WordPress自动检查;
6)自动选择升级数据库,此前程序文件已经升级完毕;
7)使用原账号登录到升级后的WordPress后台,一切就绪;
8)还差原WordPress下的主题文件和资源文件,通过 cp -rf blog/wp-content/themes/xxx-theme 复制过来主题文件;
9) 通过 cp -rf blog/wp-content/uploads 复制过来资源文件,上传文件;
10) WordPress 提供了在线升级原主题的服务,顺利实施。
11)升级主题及相关文件之后,原先如果对主题模板文件进行了相应修改的话,需要重新在升级后的模板文件中进行再次有针对性的修改,比如特色链接,插图或者广告链接之类的插件。


-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architeture, https://ufqi.com/dev/gwa2/ )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、在线医疗、在线教育、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, online medical services, online teaching, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for Native App, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出.


ufqinews logo


有福新闻 UfqiNews

这里呈现热点全局, 尺寸间一览所有令人关注的疑点焦点;
这里表达条分缕析, 视野内一睹各个脉络清晰的故事主线.
有福新闻UfqiNews 带来全新的资讯阅览体验, 不信息过载, 亦不信息茧房.

在寻求最大社会共识和满足千人千面之间谋取平衡,
在满足广泛涉猎与追求术业专攻之间谋取平衡.
媒介插上人工智能的翅膀将如虎添翼, 与资讯比翼双飞.
新闻爱好者的良心之选, 匠心之作.

UfqiNews presents the hot spots globally, with all interesting points at a glance.
Information is organized here and there is a clear storyline within every single detail.
UfqiNews brings a brand new reading experience, no information overload and no information Cocoons,

In seeking a balance of the maximum social consensus and meeting thousands of people for each interest,
In achieving a balance between satisfying a wide range of hunting and pursuing specialization in the industry.
That media is being born with wings of the artificial intelligence will be even more powerful and the information will fly swifter than ever.
Better choices of newsreaders and the art of work from them.

惊魂一夜!有福新闻UfqiNews升级到PHP8 | -UFQI-Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10837.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nexus7 android 6.0推送,Nexus用户有福了 Android 7.0即将推送

科客点评:终于来了!准备开始吃牛轧糖! 今年5月,谷歌正式发布最新的Android N系统。7月1日,谷歌都会在位于加州山景城的总部竖起一座新的雕像,将Android N正式定名为Android Nougat(牛轧糖)。现在&#xff0…

细节控有福了!显微镜级别的检测手法

最近科技圈最受关注的事大概就是RTX 4090显卡的发布了,该显卡的性能呈炸裂式增长,同时价格也奇高。 据悉4090显卡无论是在游戏、设计还是摄影上,都能够带来非常舒适畅快的体验。这感觉就对了,就是那种得不到的永远在骚动的感觉。…

oppo系统更新服务器,系统升级,这些OPPO用户有福了!

原标题:系统升级,这些OPPO用户有福了! OPPO 最近消息不断,上个月刚发布了一款旗舰新机,这个月又将推出Ace2,并且正式发布的时间已经确定了,就是这个月13号的晚上7点。而今日,官方也给…

GitHub 标星 2.9w+,我发现了一个宝藏项目,作为编程新手有福了!

大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的…

谷歌强势出手,人工智能学习者有福了,从此数据资产跨入搜索时代!

1995年,正是互联网方兴未艾之时,雅虎横空出世,雅虎以提供互联网各种信息目录起家,迅速崛起成为世界互联网巨头,整个互联网行业也迎来了门户网站时代。彼时的第一批互联网居民,要想在互联网上获取信息&#…

虚拟机连不上群晖服务器,没NAS也能体验群晖:VMware虚拟机安装DSM详细安装步骤...

2015-10-14 11:48:23 十一国庆遇到台风“杜鹃”,下了几天雨,蛮凉爽的。放晴后虽说去外面玩了几天,但最多时间还是呆在家里。最近对DSM比较感兴趣,网上看了几篇文章,如何安装及设置,对此有点初步的了解。手上没有NAS,但是想体验DSM的朋友有福了,抽空写了这篇文章,希望对…

鸿蒙碧 不忘前,不忘初心,荣耀手机包括老机型也将可升级华为研发的鸿蒙OS

原标题:不忘初心,荣耀手机包括老机型也将可升级华为研发的鸿蒙OS 根据之前曝光的消息,从4月份开始,华为将全面开启旗下自主研发系统HarmonyOS的升级适配,而且消息显示,华为大部分机型都将可以升级HarmonyOS…

Linux 游戏玩家有福了

ProtonDB 对 Steam 上前 10、前 100 和前 1000 款游戏的兼容性进行了评级,根据评级,前 1000 款游戏中有 77% 在 Linux 上运行良好,在前 100 款游戏中有 80% 在 Linux 上运行良好,而在前 10 名游戏中只有 4 个在 Linux 上运行良好。…

荣耀v20不支持鸿蒙,华为鸿蒙系统下月推送,这44款手机有福了!荣耀V20无缘升级...

原标题:华为鸿蒙系统下月推送,这44款手机有福了!荣耀V20无缘升级 从去年到今年,大家对于华为自主研发的“鸿蒙”系统非常期待,而余承东也在Mate40系列发布会上就明确表态,鸿蒙系统将在2021年第二季度推送。…

杜有福 c语言 第三版,C语言程序设计习题答案 杜有福.doc

C语言程序设计习题答案 杜有福.doc C语言程序设计习题答案习题一 C语言程序设计概述一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2(5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4(9)结构化的程序设计P9二、简述题1. 设计程序时应遵循哪些基本原则P4…

c语言编程设计杜有福,C语言程序设计习题答案 杜有福

C语言程序设计习题答案 习题一 C语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答&#xff1a…

【与ChatGPT相处两个星期让我刮目相看】

最近OpenAI的ChatGPT热度不减,作为一名IT老兵,怎么能够错过如此重量级的产品,就冲着微软的100亿美金,我也不得不给足面子,通过一系列爬山涉水、翻山越岭的准备工作,终于是能够一睹ChatGPT的庐山真容&#x…

斯坦福谷歌新研究爆火,用ChatGPT控制NPC,在虚拟世界构筑人类社会

放任25个AI共同生活,他们竟然在虚拟世界里构建人类社会! 前沿 时至今日,ChatGPT已经火遍全球,我们都见识到了AI的强大。但“生活”这个看似充满人情味的词,不负众望的和AI有了联系。 来自斯坦福和谷歌的一组研究人员…

R(2+1)D理解与MindSpore框架下的实现

一、R(21)D算法原理介绍 论文地址:[1711.11248] A Closer Look at Spatiotemporal Convolutions for Action Recognition (arxiv.org) Tran等人在2018年发表在CVPR 的文章《A Closer Look at Spatiotemporal Convolutions for Action Recognition》提出了R(21)D&a…

鸿蒙哪些机型可以用,鸿蒙2.0可以在哪些型号的手机中使用?鸿蒙2.0适配的机型介绍...

鸿蒙2.0全新系统已于昨日正式更新发布,在很多方面都具有非常不错的优越性,而且在一台手机中也可以实现多个系统同时运行,这在其他品牌的手机上是极少出现的,小编相信本次的更新一定可以为大家带来更棒的使用体验,而且适…

华为nova2s可以升级鸿蒙吗,华为Nova7怎么升级鸿蒙系统 Nova7升级鸿蒙系统步骤教程...

Nova7这一次在鸿蒙系统的升级名单之中在第二批次,那么华为Nova7怎么升级鸿蒙系统呢?为了解决各位小伙伴们疑惑的问题,小编收集了资料带来了Nova7升级鸿蒙系统步骤教程。 华为Nova7怎么升级鸿蒙系统 重要的事情多说几遍,一定记得备…

什么牌子的护眼灯对孩子眼睛好?盘点五款护眼灯

现在生活节奏越来越快,夜间的学习和工作已经不可避免。很多人在劣质的光源下眼睛会出现各种问题。为了孩子、或者为了自己,选择一款优质光源的台灯保护眼睛极其重要。 那么我们该选择哪个牌子的护眼台灯呢?其实,选择哪个牌子的护眼…

哪个牌子的led灯质量好?2022LED护眼台灯最好的品牌有哪些

谈及led灯的品牌,就不得不提一些比较专业的厂商了,特别是在护眼照明领域,明基、南卡、飞利浦、松下等品牌都有不俗的实力,出产的led护眼台灯在业内都有广泛的知名度,在消费者领域也是好评连连。那么它们到底好在哪儿呢…

JUnit 5 –如何禁用测试?

JUnit 5 @Disabled示例禁用整个测试类或单个测试方法上的测试。 PS已通过JUnit 5.5.2测试 注意 您还可以根据条件禁用测试 。 1. @禁用方法 1.1测试

手机表格html5,手机上怎么做表格?

手机上怎么做表格?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 手机上怎么做表格? 我的手机都是通过下载安装wps这个app程序,制作的表格。 就个人使用经验,手机制作表格,最好只做简单明了的,方便制作的…