PHP 8.0兼容性注意事项

一、前言

以下内容主要针对从PHP 7.0或更早版本跨大版本升级到PHP 8.0的开发者。

在浏览本文之前,建议阅读以下链接:

(A)官方的PHP 8.0发布介绍:https://www.php.net/releases/8.0/en.php

(B)安全研究者phith0n发布的文章《有安全研究者混入了PHP 8.0开发组!》:https://mp.weixin.qq.com/s/0HSAPYY2PjbwEN3MhI4SkA

(C)《从 PHP 7.4.x 移植到 PHP 8.0.x》:https://www.php.net/manual/zh/migration80.php

二、语法引入和变更

1、不再支持大括号的数组写法(PHP 7.4引入)

以往我们会使用大括号来获取字符串某一个位置的内容:

$a = "abfdcccc";
$b = $a{0};

从PHP 7.4开始,该写法将不被支持,会报E_COMPILE_ERROR

[E_COMPILE_ERROR][Error Code 64] Array and string offset access syntax with curly braces is no longer supported

三、类引入和变更

1、Throwable接口引入(PHP 7.0引入)

从PHP 7.0开始,官方引入Throwable接口。现在Exception类和Error类均是Throwable接口的实现。

如果使用了set_exception_handler接收默认异常处理时,请在PHP 7.0检查是否允许实现了Throwable接口的实例传递。如果只支持传递Exception实例,则在PHP 7.0开始会存在问题,因为有可能会传递新增的Error实例。详见:https://www.php.net/manual/en/function.set-exception-handler.php

2、Error类引入(PHP 7.0引入,PHP 7.x强化PHP 8.0强化)

从PHP 7.0开始,官方引入Error类,即所有PHP内部错误类的基类。参见:https://www.php.net/manual/en/class.error.php

后续的PHP 7.x版本中,部分内置扩展把原来的输出warning迁移到抛出Error类,比如:

(A)ext/BCMath错误行为变更(PHP7.3引入):“BCMath Arbitrary Precision Mathematics: All warnings thrown by BCMath functions are now using PHP’s error handling. Formerly some warnings have directly been written to stderr.”

到了PHP 8.0,官方进一步强化了该类使用范畴:使用PHP函数时,如果出现参数验证错误,现在会抛出Error类而不是输出warning。因此,需要留意如何处理更多的异常。

Consistent type errors for internal functions: Most of the internal functions now throw an Error exception if the validation of the parameters fails.

PHP 7例子:

strlen([]); // Warning: strlen() expects parameter 1 to be string, array given

array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0

PHP 8例子:

strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given

array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

四、扩展部分

1、ext/mcrypt扩展不再内置(PHP 7.1废弃,PHP 7.2移除)

从PHP 7.1开始,内置的mcrypt扩展被标记为废弃;PHP 7.2开始,mcrypt扩展被从内置库移除。

建议相关函数改用openssl扩展实现,和其它编程语言对接起来相对更通用。

详细见:

https://www.php.net/manual/en/intro.mcrypt.php

https://www.php.net/manual/en/migration71.deprecated.php

2、ext/xmlrpc扩展不再内置(PHP 8.0移除)

从PHP 8.0开始,内置的xmlrpc扩展被移除。

如有需要,请自行从PECL库下载并编译:https://pecl.php.net/package/xmlrpc

3、ext/sodium引入(PHP 7.2引入)

从PHP 7.2开始,官方引入sodium扩展。该扩展依赖libsodium库。

sodium扩展可以替代mcrypt扩展的功能,也能替代openssl扩展中的部分加解密功能。

但笔者建议,如果涉及和其它系统或编程语言的对接,优先使用openssl扩展。

参考:https://www.php.net/manual/en/book.sodium.php

本页永久链接:https://www.orztip.com/?p=526&article_title=php-8-compatibility

如何下载Adobe Flash Player 29.0.0.140全系列独立离线安装包

Adobe已经停止支持Flash Player,但国内转交给一家公司进行运营,也就是中国特供版。中国特供版存在锁区、弹广告等行为【1】,所以不少人会寻找29.0.0.140的版本以满足特定用途。那么在哪里可以找到呢?

在52pojie论坛上,有网友分享了其收集的Adobe Flash Player 29.0.0.140的所有离线安装包、调试程序、独立播放器,总共约151MB,值得各位下载备用。

下载地址见:

https://www.52pojie.cn/thread-730019-1-1.html

备用地址:

链接: https://pan.baidu.com/s/15jI9kHzZPGU8PWsw55U3sQ 密码: ee1v

要安装Adobe Flash Player 29.0.0.140,请注意如下事项。

(1)安装Adobe Flash Player 29.0.0.140需要断网安装。

(2)安装后必须在控制面板内的“Flash Player”设置中设置其为永不更新,否则仍然会被更新到中国特供版。

(3)如果安装了中国特供版,需要先卸载,完全重启一次后才能安装。

参考资料:

【1】《为什么我们要卸载Flash》:https://mp.weixin.qq.com/s/dGLnWnV0Xp4CZj3NRV3L_g

附:Adobe Flash Player 29.0.0.140离线安装包、调试程序、独立播放器文件的SHA256校验

342b22d1e8143102b98b2bd2a1f455ecca4fc54fd1dfa3fe63e4bb76300ca2ce ./ActiveX Internet Explorer/install_flash_player_ax.exe
a958591ede770b3e27af5f4e605c1ee99623c3fa59560c1b6bcafc63e616da3a ./Content Debuggers/flashplayer_29_ax_debug.exe
4f35c2c0ea3cf91dadf7352c45430342a44b6b22fe42a0670a8f4510c37f25fa ./Content Debuggers/flashplayer_29_plugin_debug.exe
97c4e4749a55c8ada49197030184befdf768b5481c5bf1a5629c1fad56f1afeb ./Content Debuggers/flashplayer_29_ppapi_debug.exe
d1b1680b966cee845cb33df0f8fd1da50fd0b70db1736524cb08ab29269ef4d1 ./NPAPI Firefox/install_flash_player.exe
4ce6e0910f71efb7fcca585388df847f8ea609d1125e1a6085dd7372ed234e09 ./PPAPI Opera and Chrome/install_flash_player_ppapi.exe
e5fdb31acd751c4b03a48b0463c60f445f9470c2efdcc73ee71ff3b268e75fef ./Standalone/flashplayer_29_sa.exe
bb24eff218d32ebefc042ebdbfe4cad81d6c79e82c8c6c061fe8b23520c615ed ./Standalone Debuggers/flashplayer_29_sa_debug.exe
26e2f1136867d67d4f2104e0a012f21d9645d7486f7c7083a26f6722ff22a639 ./uninstall_flash_player.exe

本页永久链接:https://www.orztip.com/?p=513&article_title=adobe-flash-player-29-0-0-140-content-debugger-standalone-offline-installer-download

如何获取旧版macOS DMG原版镜像

方法一:苹果官方支持网站

截至2021-03-17,苹果官方支持网站放出了以下macOS DMG原版镜像:

macOS Sierra 10.12(可升级 El Capitan、Yosemite、Mavericks、Mountain Lion 或 Lion)
OS X El Capitan 10.11(可升级 Yosemite、Mavericks、Mountain Lion、Lion 或 Snow Leopard)
OS X Yosemite 10.10(可升级 Mavericks、Mountain Lion、Lion 或 Snow Leopard)

下载地址:https://support.apple.com/zh-cn/HT211683

方法二:App Store

截至2021-03-17,苹果在App Store上架了以下安装器

macOS Catalina 10.15(可升级 Mojave、High Sierra、Sierra、El Capitan、Yosemite、Mavericks):https://apps.apple.com/cn/app/macos-catalina/id1466841314?mt=12

macOS Mojave 10.14(可升级 High Sierra、Sierra、El Capitan、Yosemite、Mavericks、Mountain Lion):https://apps.apple.com/cn/app/macos-mojave/id1398502828?mt=12

macOS High Sierra 10.13(可升级 Sierra、El Capitan、Yosemite、Mavericks、Mountain 、Lion):https://apps.apple.com/cn/app/macos-high-sierra/id1246284741?mt=12

方法三:由Collin开发的macOS XXX Patcher Tool for Unsupported Macs

开发者Collin开发的macOS XXX Patcher Tool for Unsupported Macs系列,本意是用于对安装镜像打补丁,以支持在官方不受支持的旧苹果电脑型号上运行新的macOS。但这些工具也含有可以下载旧版macOS DMG原版镜像的能力。注意,这些工具需要在macOS上运行。

(A)macOS Sierra Patcher Tool for Unsupported Macs

Current version: 4.2.7

下载地址:http://dosdude1.com/sierrapatch.html

(B)macOS High Sierra Patcher Tool for Unsupported Macs

Current version: 2.7.0, SHA1: 73f180d30200ef5f6d900440fe57b9c7d22bd6bf

下载地址:http://dosdude1.com/highsierra/

(C)macOS Mojave Patcher Tool for Unsupported Macs

Current version: 1.3.7, SHA1: 6f96788c3e61240dde232d644d83a0d8f373dbdc

下载地址:http://dosdude1.com/mojave/

(D)macOS Catalina Patcher

Current Version: 1.4.4

SHA1: b4caafe55b4f79afa962ec7ff58264c9b257aeca

下载地址:http://dosdude1.com/catalina/

方法四:Apple’s Regular Software Catalog

该方法需要从Apple’s Regular Software Catalog中辨别数个文件的下载url(一般为BaseSystem.dmg、BaseSystem.chunklist、InstallInfo.plist、InstallESDDmg.pkg、AppleDiagnostics.dmg、AppleDiagnostics.chunklist等),下载后进行U盘写入。

该方法需要一定的技术能力,详细见如下帖子《Making a bootable High Sierra USB Installer Entirely From Scratch in Windows or Linux Mint (without access to Mac or App Store Installer.app)》:https://www.insanelymac.com/forum/topic/329828-making-a-bootable-high-sierra-usb-installer-entirely-from-scratch-in-windows-or-linux-mint-without-access-to-mac-or-app-store-installerapp/

Apple’s Regular Software Catalog地址:https://swscan.apple.com/content/catalogs/others/index-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz

备注:安装文件校验值可参考如下地址,包括macOS安装文件(SharedSupport.dmg、InstallESD.dmg、BaseSystem.dmg)和Xcode Installer DMG的SHA1值:

https://github.com/notpeter/apple-installer-checksums

本页永久链接:https://www.orztip.com/?p=504&article_title=macos-dmg-download

Win10怎样通过蓝牙播放手机上的音乐或声音

最近想把Windows 10变成蓝牙音箱,让手机上的音乐或者声音通过蓝牙传输到电脑上,然后在电脑扬声器上播放。查了一下,这个功能涉及到Windows有没有实现和开放A2DP sink角色的问题。

A2DP全名是Advanced Audio Distribution Profile(高质量音频数据传输协议),这里面有两个角色,第一个是A2DP Source,作为源头端(source)负责编码和发送;第二个是A2DP Sink角色,作为接收端(receiver)负责接收和解码【1】。

Windows 7时代,虽然微软没有明面支持A2DP Sink角色,但如果厂商的蓝牙驱动有相关实现,那么是可以让Win 7作为A2DP Sink角色,来通过蓝牙播放手机上的音乐。但从Windows 8开始,无论是微软还是厂商蓝牙驱动,均不再支持A2DP Sink角色。这个问题也就一直延续到了Windows 10,更确切点来说,延续到Windows 10版本1909【2】。

不过就在Windows 10版本2004开始,微软又重新实现和开放了A2DP sink角色。只不过微软官方并没有实现相关界面,需要让开发者编写程序来实现。有鉴于此,一位名为Mark Smirnov‬的开发者编写了“Bluetooth Audio Receiver”程序并在微软商店上架,让Windows 10版本2004和其后的版本开启A2DP sink角色。

因此,要让Win 10变身成“蓝牙音箱”,需要进行如下步骤:

(1)确认你的操作系统是Windows 10版本2004或更高版本。

(2)确保蓝牙设置处已经匹配了手机。

(3)从微软商城安装“Bluetooth Audio Receiver”。如果搜不到,请直接点击下面链接:

https://www.microsoft.com/en-us/p/bluetooth-audio-receiver/9n9wclwdqs5j?activetab=pivot:overviewtab

(4)打开“Bluetooth Audio Receiver”,选择对应的手机,然后按“Open Connection”。

(5)成功后,界面会提示Connected,手机上也有相关提示。现在手机上的音乐或者声音就会通过Windows 10的电脑扬声器来播放了。

===============

参考信息:

【1】AN986: BLUETOOTH® A2DP AND AVRCP PROFILES GETTING STARTED GUIDE,https://www.silabs.com/documents/public/application-notes/AN986.pdf

【2】Enable and Use A2DP Sink for Bluetooth in Windows 10,https://winaero.com/enable-and-use-a2dp-sink-for-bluetooth-in-windows-10/

本页永久链接:https://www.orztip.com/?p=487&article_title=how-to-let-windows-10-act-as-bluetooth-a2dp-sink-to-receive-and-play-mobile-music

免费PDF转Word、Word转PDF推荐:永中PDF工具集

永中PDF工具集,是开发永中Office的公司永中软件股份有限公司,依托永中云所发布的专业的在线PDF文档转换处理工具。该工具集可以在网页、客户端或者微信小程序内进行多种PDF相关的转换处理操作。

免费用户使用PDF转Word,或Word转PDF功能时,可处理30MB内的文件。对于处理小型文件的人来说,这个容量是足够的。其他功能的大小或其它条件限制,请参见官网。

地址:https://pdf.yozocloud.cn/

本页永久链接:https://www.orztip.com/?p=481&article_title=pdf-yozocloud-cn

【优惠分享】【2021年】电信宽带大提速:广东电信宽带预存240元提速500M(需承诺在网2年)

东莞电信最近(2021年)通过线上定向推送方式向用户宣传宽带优惠,其中符合资格的广东电信用户,有机会办理广东电信宽带预存240元提速500M(需承诺在网2年)优惠。

办理此优惠并线上支付后,订单名称为“2021宽带大提速-预存240元提速至500Mbps”。

注意:提速套餐能否受理成功,以最终受理结果为准。

参与地址:https://gd.189.cn/kd/kdts/202101/index.html?source=KDWAP-PUSH-21KDTS&XSQD=KDWAP-PUSH

订单查询:https://gd.189.cn/TS/zones/hd/ddcx/

后记:也有朋友查询后没有这个优惠,而是中国电信宽带融合套餐办理和提速优惠(见后面的图)。

附:活动规则

(一)提速条件
1、本次宽带大提速活动是广东电信针对受邀家庭宽带用户推出的提速政策,具体参加资格和办理结果以系统返回信息为准。
2、用户只能选其中一档产品办理,不能重复办理,未能参加本次线上自助提速的宽带用户,请携带本人有效证件,前往住所附近的电信营业厅咨询,营业厅将根据您宽带的网络线路及宽带业务使用情况,推荐适合您的宽带提速优惠。
(二)本此提速不含城中村、游戏宽带、天天宽带用户、校园宽带、WIFI宽带、政企及公众专线宽带、已办理加价提速、红黑绿名单和宽带状态不正常等用户。订购规则:
1)宽带提速产品与其他宽带提速产品互斥,即只能办理一项宽带提速产品,不能同时办理多个宽带提速,需退订原有宽带提速产品后才可重新订购新的宽带提速产品;
2)需用户线路或终端设备支持提速,如用户光MDOEM只能支持100Mbps,则最高只能办理100Mbps提速,需提至更高速率的,请携带本人有效证件到住所附近电信营业厅咨询办理升级光MODEM及宽带优惠提速。
(三)各项提速政策规则
1、提速套餐到期后恢复客户宽带原有订购速率。
2、因用户线路及网络设备等因素限制的,提至不高于200M/300M/500M/1000M的,以最大可达速率为准。
3、线上提速办理,用户确认订购并完成支付或确认客户承诺提速条款后,订单在48小时内完成受理。受理成功的订单立即生效。如遇办理高峰,部分情况可能会延时,可通过订单查询页面查看进度或致电10000号查询及报障,感谢您的支持与理解。
4、用户首次订购,如提速未生效,建议用户可重新拨号上网尝试,观察10分钟左右看速率是否提升(非强制性要求)。
5、提速套餐能否受理成功,以最终受理结果为准,如有疑问可致电10000号咨询。
(四)订单查询:
1)用户如何查询已下单未支付的订单,可通过姓名+身份证号码、姓名+联系电话、姓名+订单号等3种选择方式,点击进入查询:http://gd.189.cn/TS/zones/hd/ddcx/

附:常见问题

1、提速活动的范围是什么,为什么我不能参加这个提速优惠活动?
答:本次宽带大提速活动是广东电信针对受邀家庭宽带用户推出的提速政策,具体参加资格和办理结果以系统返回信息为准。不能参加线上自助提速的宽带用户,可前往住所附近的电信营业厅咨询,营业厅将根据您的宽带的网络线路及宽带业务使用情况,推荐适合您的宽带提速优惠。
2、提速200M及以上速率对线路以及用户光MODEM有哪些要求?
答:200M及以上宽带速率对用户线路及终端设备有一定要求,必须为FTTO或FTTH接入到户,同时用户光MODEM型号可支持200M及以上速率。用户可通过互联网查询MODEM型号或到电信营业厅现场咨询家庭光MODEM可支持的最大速率。对于用户家里光MODEM不能支持200M+速率的,用户可打10000号或到营业厅办理光MODEM升级服务。
3、为什么提速成功后达不到所示速率?
答:宽带速率指用户终端接入到中国电信宽带网络的最高速率,实际可达速率受被访网站、应用、客户设备等综合因素影响存在波动和差异。若差异不大,属正常。用户操作系统和拨号软件也会影响宽带速率,为获得好的宽带上网速率和体验,推荐使用Windows自带的宽带拨号软件,Windows以外的操作系统建议使用RasPPPoE宽带拨号软件。

(本条非广告,为本人实际体验,仅用于分享,不构成商业行为建议)

本页永久链接:https://www.orztip.com/?p=467&article_title=gd-189-cn-zhong-guo-dian-xin-2021-you-hui-kuan-dai-da-ti-su-240-yuan-500m-2-nian-zai-wang

儿童故事大全推荐:中央人民广播电台“小喇叭”节目

许多家长对选择什么儿童故事给儿童阅读颇为头疼,尤其担心内容质量问题。也有的家长库存不多,不知道读什么睡前故事讲给小孩听。实际上,有一档节目可能被大家忽略了,那就是中央人民广播电台“小喇叭”节目。

中央人民广播电台“小喇叭”节目是一个面向全国学龄前儿童的广播节目,栏目从1956年9月4日开播至今【1】【2】。该节目有一个单元为“抱抱熊故事时间”,里面会播放各种儿童故事,非常适合家长给儿童播放,或者由家长作为睡前故事讲给小孩听。同时还有博士爷爷回答小朋友的“小问号”单元,同样值得收听,还能让小孩子发送语音给他提问哦(发送到微信公众号“小喇叭博士爷爷”(boshiyeye1))。

目前(2021年)“小喇叭”节目是在中国之声电台播送,时间为每天晚上8点到8点半。网上也有在线收听或重播。在线收听或重播方式如下:

(1)(强烈推荐)手机应用:云听

“云听”是中央广播电视总台基于5G+4K/8K+AI等新技术,推出的总台高品质声音聚合分发平台,也是继央视频上线之后又一个国家级5G声音新媒体平台。

在云听,搜索“小喇叭”,即可找到入口。里面的音频已经按单元分割好,方便按需要播放。

直达链接:https://ytweb.radio.cn/share/albumDetail?columnId=15682083075702

(2)手机应用:蜻蜓FM

在蜻蜓FM,搜索“主播”名称为“中国之声”的用户,然后里面有专辑,找到“小喇叭”即可重听。里面的音频没有分割,是按整个节目进行播放。

注意:蜻蜓FM可能会插播广告(比如下图中的“为您精选”广告),还是建议用云听,毕竟没竞争性广告。

直达链接:https://m.qingting.fm/share/vchannels/138236?platform=direct_link

========

参考信息

【1】http://china.cnr.cn/c1zby/xlb/wzsl/201010/t20101021_507204214.html

【2】《声音巨匠│关不掉的收音机,忘不了的《小喇叭》》,声境界(全民悦读太原阅读会官方帐号),2019-09-04 21:52:https://baijiahao.baidu.com/s?id=1643474750531397205&wfr=spider&for=pc

本页永久链接:https://www.orztip.com/?p=459&article_title=cnr-xiaolaba

使用Git拉取代码时显示reference broken错误,如何解决?

表现

在windows上使用TortoiseGit、或者在Linux上使用Git命令,对一个项目拉取代码时,会提示reference broken错误。以下为TortoiseGit的日志:

git.exe fetch --progress -v "origin" master
Server refused to set environment variables
From github.com:HorseLuke/AlibabaSDK
* branch            master     -> FETCH_HEAD
error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken
! [new branch]      master     -> origin/master  (unable to update local ref)


git did not exit cleanly (exit code 1) (797 ms @ 2021-03-05 22:08:33)

原因

项目中的.git目录,其用于保存指向commit对象的指针文件丢失或者损坏。这些文件一般存放在“【项目目录】/.git/refs/remotes/origin”下。

解决方法

1、删除“【项目目录】/.git/refs/remotes/origin”下的所有文件,删除前注意备份。

Linux下可运行如下命令进行删除(没有用 -f,是为了仔细确认):

rm 【项目目录】/.git/refs/remotes/origin/*.*

2、重新运行一次拉取命令。这其中:

2.1、在TortoiseGit中,就是右键菜单选择Git Sync后,再点Pull。

2.2、在Linux下,则是直接运行如下命令:

git fetch --all

本页永久链接:https://www.orztip.com/?p=457&article_title=git-error-reference-broken-or-unable-to-resolve-reference