特殊的服务器环境引发的 Laravel 框架异常

一个使用 Laravel 框架的项目,在某次更新生产环境代码后报了奇怪的错误。而代码在开发环境和测试环境运行都是正常的。由于无法接触到生产环境,只能通过 PHP 引擎的源代码来猜测导致错误的原因

上海公立三甲医院名单

神经外科学

全国排名医院名称
2复旦大学附属华山医院
11海军军医大学附属长海医院
15上海交通大学医学院附属仁济医院
29海军军医大学附属长征医院
32上海市第六人民医院

胸外科学

全国排名医院名称
2上海市肺科医院
4复旦大学附属中山医院
5上海市胸科医院
8复旦大学附属肿瘤医院
29海军军医大学附属长海医院

心血管外科学

……

灵乌赋

梅君圣俞作是赋,曾不我鄙,而寄以为好。因勉而和之。庶几感物之意同归而殊途矣。

灵乌灵乌,尔之为禽兮。何不髙翔而逺翥,何为号呼于人兮。告吉凶而逢怒,方将折尔翅而烹尔躯,徒悔焉而亡路。彼哑哑兮如诉,请臆对而心谕:“我有生兮,秉阴阳之含育;我有质兮,处天地之覆露。长慈母之危巢,托主人之佳树。斤不我伐,弹不我仆。母之鞠兮孔艰,主之仁兮则安。度春风兮,既成我以羽翰;眷庭柯兮,欲去君而盘桓。思报之意,厥声或异。警于未形,恐于未炽。知我者谓吉之先,不知我者谓凶之类。故告之则反灾于身,不告之则稔祸于人。主恩或忘,我怀靡臧。虽死而告,为凶之防。亦由桑妖于庭,惧而脩徳,俾王之兴;雉怪于鼎,惧而脩徳,俾王之盛。天聴甚迩,人言曷病。彼希声之凤皇,亦见讥于楚狂;彼不世之麒麟,亦见伤于鲁人。凤岂以讥而不灵,麟岂以伤而不仁?故割而可巻,孰为神兵;焚而可变,孰为英琼。宁鸣而死,不默而生。胡不学太仓之鼠兮,何必仁为,丰食而肥。仓苟竭兮,吾将安归?又不学荒城之狐兮,何必义为。深穴而威。城苟圯兮,吾将畴依?宁骥子之困于驰骛兮,驽骀泰于刍养。宁鹓雏之饥于云霄兮,鸱鸢饫乎草莽。君不见仲尼之云兮,予欲无言。累累四方,曾不得而已焉。又不见孟轲之志兮,养其浩然。皇皇三月,曾何敢以休焉。此小者优优,而大者乾乾。我乌也勤于母兮自天,爱于主兮自天;人有言兮是然,人无言兮是然 。”

……

JavaScript 异步可迭代定时器

ES8(ES2017)引入了 async 函数和 await 关键字。await 关键字可用于 async 修饰的异步函数或者一个 Promise 对象,而异步函数本质上也就是一个返回 Promise 对象的语法糖。

ES9(ES2018) 引入了新的 for await...of 语句,可用来遍历异步可迭代对象。异步可迭代对象通过 Symbol.asyncIterator 符号来指定默认的异步迭代器,如果一个对象设置了这个属性,它就是异步可迭代对象。和同步迭代器一样,异步迭代器同样包含一个 next() 方法,该方法返回一个对象,包含 donevalue 两个属性,前者表示循环是否结束,后者是当前循环的返回值。

……

解决 PHP Trait 不能定义常量及成员变量冲突的问题

PHP Trait 只能定义成员变量和方法,不能定义常量。如下代码会报错:

php// test.php

trait UsageTrait
{
    const THE_CONST_NAME = 1;
}

错误消息为:

Fatal error: Traits cannot have constants in test.php

想要在不同的类中共用一组常量,可以通过接口来解决:

……

小众编程语言

这里先给出小众的定义:以 TIOBE Index for October 2021 为标准,排名在 20 位以后的编程语言。其中排名前 20 的编程语言为:

  1. Python
  2. C
  3. Java
  4. C++
  5. C#
  6. Visual Basic
  7. JavaScript
  8. SQL
  9. PHP
  10. Assembly language
  11. Classic Visual Basic
  12. Go
  13. MATLAB
  14. R
  15. Groovy
  16. Ruby
  17. Swift
  18. Fortran
  19. Perl
  20. Delphi/Object Pascal

……

论辩的魂灵

本作品写于 1925 年 3 月 9 日,收录于《华盖集》和《语丝》。

二十年前到黑市,买得一张符,名叫“鬼画符”。虽然不过一团糟,但帖在壁上看起来,却随时显出各样的文字,是处世的宝训,立身的金箴。今年又到黑市去,又买得一张符,也是“鬼画符”。但帖了起来看,也还是那一张,并不见什么增补和修改。今夜看出来的大题目是“论辩的魂灵”;细注道:“祖传老年中年青年‘逻辑’扶乩灭洋必胜妙法太上老君急急如律令敕”。今谨摘录数条,以公同好——

……

告别密码验证

最近,微软宣布所有用户现可从其帐户中完全删除密码。用户可以通过在手机上安装 Microsoft Authenticator 应用来接收验证码进行登录。详见《微软账户进入无密码时代,现可将你的密码彻底删除》:

微软副总裁 Vasu Jakkal 表示,“近年来,我们一直都在强调无密码机制的重要性。今天我在这里很高兴地向大家宣布,这项愿景终于有了实质性进展。从今天开始,您可以将你微软账户中的密码彻底删除。”

对于这么做的原因,微软表示单纯的密码机制已经成为了安全系统的软肋,每年仅仅因为这个原因发生的相关攻击就多达 180 亿次,约每秒 579 次。

不过各位小伙伴还请不要以为微软取消密码就没有安全保护机制了,因为在迈入无密码时代之前你还需要在自己的手机上安装一个 Microsoft Authenticator 应用(如果您愿意,您可以随时为帐户重新添加密码),之后根据实际使用位置的不同,通过 Windows Hello、安全密钥,或者是通过邮件、手机或其他应用以及服务(包括 Outlook、OneDrive、Microsoft 家庭安全等)接收到的验证码进行登录。

……

爱棠村掘尸案和斯励之死

爱棠村掘尸案

1931 年 11 月,上海各大报纸竞相报道了一起骇人听闻的凶案,法租界姚主教路爱棠村两户民居院内挖掘出多具尸体。经证实,这些尸体是已叛变的中共特科领导人顾顺章失踪多月的家属。这就是当年轰动一时「爱棠村掘尸案」,后世亦称为「顾顺章灭门案」。

1931 年 11 月 25 日,《民国日报》的报道

1931 年 11 月 25 日,《民国日报》的报道

……

解决 curl 无法获取本地发行者证书问题

问题

当使用 curl 命令打开 HTTPS 网站,比如:

shellcurl -sSL https://www.github.com/

显示如下错误:

curl: (60) SSL certificate problem: unable to get local issuer certificate

根据错误信息可以得知,问题是 curl 找不到本地的 CA 证书所导致。

解决方案

首先,下载 CA 证书:https://curl.se/ca/cacert.pem

  1. 不验证 TSL 证书:
    • liburl:curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    • 命令行:添加参数 -k--insecure
  2. 指定 CA 证书:
    • liburl:curl_easy_setopt(curl, CURLOPT_CAINFO, cacert);
    • 命令行:添加参数 --cacert /path/to/cacert.pem
  3. 使用环境变量(仅命令行):set CURL_CA_BUNDLE=/path/to/cacert.pem
  4. 对于 Windows 下的 curl 命令,将 cacert.pem 重命名为 curl-ca-bundle.crt,并保存到以下路径之一:
    1. curl.exe 命令所在路径;
    2. 当前工作路径;
    3. Windows 系统路径(C:\Windows\system32);
    4. Windows 路径(C:\Windows);
    5. 任意 %PATH% 路径。