分类
PHP

博客升级到 PHP8.1

由于 php7.4 马上结束维护了,所以把博客服务器 PHP 版本做了个升级,直接升级到当前的最新稳定版 PHP8.1。

当前 PHP 各版本维护周期

PHP8.1 的安装命令如下:

apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-curl php8.1-xml php8.1-imagick php8.1-zip php8.1-gd php8.1-intl php8.1-bcmath

安装完成后,顺便开启了 PHP8.1 的 JIT,以提高性能,开启方法如下:

编辑 php.ini,在 opcache 配置部分添加加粗的两行:

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=50M

保存后记得重启 php8.1-fpm。最后通过 phpinfo()查看效果:

PHP8.1 开启 JIT 成功

参考链接:https://stitcher.io/blog/php-8-jit-setup

分类
读书

《活着》

余华《活着》

初读余华的《活着》,其实是在今年的夏天,当时读完有很多感慨,没有及时记下来。最近在读余华的《在细雨中呼喊》,才想起这件事。

《活着》这本书读完是很压抑的,足足难受了好几天。书中透过徐福贵的讲述,记叙了一个从地主之家的少爷变为一个一无所有的无比悲惨的老农的一生。

福贵身边的人一个接一个的死去,仿佛上天对他的惩罚,又仿佛他早早就透支完了他一生的福贵,后半生只能在苦难中度过。

唯一值得庆幸的是,他身边的人都是爱他的,不离不弃,至死不渝。他身边的人也是热爱生活的。妻子家珍起早贪黑、勤俭持家,即使生病后仍想着下地干活;儿子有庆每天光脚跑着去学校,跑回来喂羊,不分寒暑;女儿凤霞虽然是个哑巴,但她是一个心灵手巧的姑娘;女婿二喜虽然偏头,但是有力气能干活;外孙苦根,多么可爱的一个孩子……

正是这样一群人一个接一个的死去,才最让人难受,最接受不了的是有庆,多么好的孩子,最后竟然死在了给县长夫人献血,血被抽干栽地身亡……看到这里,呼吸都快停止了,难受的透不过气来。

但就是在这种情况下,福贵却坚强的活着,要是换一个人,可能也就随他们而去了吧。这种情况下,死容易,活着才是最难的。福贵从一个富家少爷,变成一无所有,最后亲人一个一个死去,思想和精神上得经受怎么样的打击,怎么还能够活得下去?

但是福贵还是坚强地活下来了,而且最后还买了一头叫福贵的牛,仍劳作在这片世代生活的土地上。

最开始看这本书,是气愤的,气愤福贵的不争气,气氛他败家。后来替他身边一个个离去的人感到惋惜。再到后来,有点佩服他,竟然还能独自活着。

是的,这就是福贵的一生,其实全书不管在怎样的情况下,福贵都没有想过死,他自已也没想过要怎么活,反正就是饿了吃饭,天黑睡觉,天亮干活。

这可能就是在告诉我们一个道理,不论到了什么境况,都要坚强地活着,再惨惨不过福贵。顺其自然,珍惜身边人,做好自己该做的,不要犯福贵的过错。

分类
Laravel

Hello, Laravel

经过一周的紧张开发,又一个面向银行的内部系统总算完成了。这个系统本来打算是用 .NET 来做,但这段时间一直心心念念 Laravel 框架,就像所有趁手好用的工具一样,只要用过一次,就忘不掉她的好。

经过简单分析,发现这个系统其实并没有复杂的业务和计算,由于是内部系统,也不存在高并发的可能,所以,对于 Laravel 是适用的。本来 .NET 开发的系统已经完成了 70% ,花了一周不到的时间就用 Laravel 重写完成了,不得不感慨开发速度之快,同时开发体验拉满。

这么多年来,虽说 PHP 也在断断续续的用,但从没怎么把它当回事,一般的项目主要还是使用 .NET 来做。对于自由开发者来说,.NET 可谓是相当的万金油,既可以做桌面开发,也可以做 Web 开发,关键时刻还可以拿来写一写安卓移动应用。由于是静态编译型语言,性能基本够用,配合 SQL Server 数据库,基本没有做不了的项目。

但是,自从知道 Laravel 框架后,就在慢慢地在不断了解,越了解就越被她的优雅所打动,这里我也用了优雅这个词,因为实在没有想到更好的词能描述那种感觉。直到去年,尝试用她开发了一个小项目,由于当时对 Eloquent 了解还不够深入,甚至多对多、一对多这种关系的用法还不太清楚,就强行上了,结果也还行,顺顺利利的开发完成。

这次的项目开发,在彻底弄清了 Eloquent 之后,就果断切换到 Laravel 来开发,真的是太好用了,再也不用定义 ASP.NET 里面的那一堆堆的实体类,再也不再需要 AutoMapper,再也不用那蹩脚的表单验证,再也不用等待编译生成,等等好处无法一一言说。总之就是开发轻量了,保存即生效,刷新即可看效果,整个过程轻松加愉快,身心愉悦!

当然,Laravel 并不是完美的,并不适用于所有场景,比如高并发场景,计算密集、IO密集型应用,对于这些场景和应用,Laravel 不是不能做,而是不够好,性能不够高!当然,这不能怪 Laravel,这是 PHP 的问题,什么时候等 PHP 进化出高性能的运行模式,那 Laravel 就是完美的。

最后,程序语言、程序框架始终是工具,只有根据需求和场景选择合适的工具才是真理。

分类
ASP.NET Core

.NET 7 身份验证和授权的变化

.NET 7 于今天发布了,在 ASP.NET Core 的身份验证和授权的配置上做了一些简化,变化如下:

配置登录验证的方式,从 .NET 6 的:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme);

变成了 .NET 7 的:

builder.Services.AddAuthentication().AddCookie();

ASP.NET Core 会自动对认证方案进行推断,从而省略了参数的配置。

对于登录验证和授权的中间件,.NET 7 中不再需要手动引入,框架会自动推断是否使用,因此,app.UseAuthentication()app.UseAuthorization()也就不再需要了。

从而,运行一个完整的 ASP.NET Core MVC 程序所需要的最简配置是这样的:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddAuthentication().AddCookie(); //👈 new feature
var app = builder.Build();
app.UseStaticFiles();
app.MapDefaultControllerRoute();
app.Run();

参考链接:https://auth0.com/blog/whats-new-in-dotnet-7-for-authentication-and-authorization/

分类
Laravel

Laravel 9 安装中文语言包

首先使用 composer 安装依赖包:

composer require laravel-lang/publisher laravel-lang/lang laravel-lang/attributes --dev

注意 laravel-lang/publisher 这个包需要 php 8.1 版本才行,如果是 php 8.1 以下版本,要使用如下命令来安装旧版:

composer require laravel-lang/publisher:^13.0 laravel-lang/lang:^10.9 laravel-lang/attributes:^1.1

然后使用下面的命令把中文语言包添加到 lang 目录下:

php artisan lang:add zh_CN

最后修改配置文件 config/app.php,来使用中文。

'locale' => 'zh_CN',

注:本文基于 Laravel Framework 9.33.0 版本测试通过。

参考链接:

https://github.com/Laravel-Lang/lang
https://publisher.laravel-lang.com/installation/

分类
生活

疫情又一次卷土重来

到今天,学校已经停课一周了,很多地方已经封控起来了。只不过这次和以往不同的是,这次不封城,只封风险区域。目前,小县城已经封闭了30多个小区,好在我们小区没事。

三年了,来日不可知,往日不可追。无比怀念过去那没有疫情,自由自在的旧时光。

每天都要做核酸,不知为何,今天人有点多
分类
洞箫

今生情可鉴

今生情可鉴片段
分类
WordPress

wordpress 网站根目录权限设置

网站文件权限设置,在网站根目录下执行

for directories

find . -type d -print0 | xargs -0 chmod 0755

for files

find . -type f -print0 | xargs -0 chmod 0644

for wp-config.php

chmod 600 wp-config.php

如果wordpress站点健康检查提示无法自动更新,则执行下面这两句,把当前文件夹以及所有文件加入php-fpm用户组

chown -R www-data:www-data *
chown -R www-data:www-data .

www-data 是 debian/ubuntu 系统的 php-fpm 默认用户名。

分类
WordPress

wordpress custom post type 的 category 页面的模板文件命名规则

在使用自定义文章类型时,对应的 category 页面的文件名应该是taxonomy-{taxonomy}.php

例如有一个自定义 Post Type 的分类法是 product_category,那么该分类法对应的 category 页面的模板文件名就是taxonomy-product_category.php

如果该分类法下有一个分类,名为adva,那么该分类对应的模板文件名为taxonomy-product_category-adva.php


如果是默认的文章类型,即 post type 是 post ,它的 category 页面的名字就是category.php,默认的分类法其实就是category,但却不能写成taxonomy-category,只能自定义类型才能这么写。

如果默认分类法下有一个news的分类,那么对应的模板文件名就是category-news.php

分类
WordPress

wordpress category 和 archive 的区别

一个post type可以没有分类(category),但一定可以进行文章归档(archive)。

分类(category),是针对分类法(taxonomy)的,而归档而是针对文章的。

所以,模板命名上,category 总是和分类关联,比如news分类模板:category-news.php。

而 archive 总是和 post type 关联,比如有一个 custom post type 名字是 product,那么对应的归档页面就是 archive-product.php。