在 PHP 中生成 UUID

UUID 全称是 Universally unique identifier,它是一种识别符,使用任意的计算机都可以生成,不需要一个中央数据库进行管理,即可以保证几乎没有重复的几率。而 UUID 的值域之大,据说给世界上每一粒沙子分配一个 UUID,也不会有重复的。

最近在改 WordPress 的代码,需要用到 UUID。但是,PHP 中居然没有生成 UUID 的函数,只好自己写一个。

上述代码可以生成一个 UUID version 4。UUID 目前有 5 个版本,其中第四版是完全随机的,生成起来比较容易。而其中的 com_create_guid,是 Windows 中 PHP 的一个函数,它直接调用 COM 的 CreateGuid 函数来生成 UUID,但是在 Linux 没有对应的函数库,只好自己写了。为了方便在不同的平台上使用,就创建了一个同名的函数。其它的代码就是生成随机数了。

至于用法,就直接调用 com_create_guid() 即可。

配置 SendMail 通过 SMTP 发送邮件

今天不知怎么的,SendGrid 插件突然抽风了,导致博客后台完全打不开,显示为 503 Service Unavailable。一怒之下就把 SendGrid 插件给删了。

但是不用 SendGrid 插件的话,就要自己配置邮件服务了,没辙,硬着头皮上吧。

先说一下背景,主机环境是 Google Compute Engine,RHEL 7 系统,使用 SendGrid.net 作为 SMTP 服务。Linux 中有个邮件工具叫作 SendMail,它是一个命令行工具,PHP 也是用它来发送邮件的。所以把 SendMail 配置好了,不仅 WordPress / PHP 可以正常发送邮件,其它基于 SendMail 的工具也可以正常工作了,一举两得。以下命令假设已有管理员权限。

首先,安装必须的系统组件,其中的 cyrus-sasl-plain 是一个加密组件,如果没有安装的话,会出现错误“AUTH=client, available mechanisms do not fulfill requirements”:

设置 SMTP 服务器,在 /etc/mail/sendmail.mc 中找到下面的第一行,然后如下添加第 2、3、4 行:

需要注意的是其中端口指定为 2525,这是 Compute Engine 和 SendGrid 的约定,一般的端口是 25 或者 587。

然后在 /etc/mail/access 中添加 SMTP 帐号:

其中 Username 和 Password 要替换成真实的用户名和密码,在 SendGrid 中,用户名/密码和登录时候用的一样。

然后编译相关配置并重启 SendMail 服务:

这样就配置好了,为了检验 SendMail 能正常工作,我们来做一个简单的测试:

先创建一个文本文件,mail.txt:

Subject: SendMail Test
Random Email Content

然后执行命令:

如果能收到测试邮件,就说明配置成功了;如果不能,可以检查 /var/log/maillog 文件看是哪里出错了。

Google Cloud 对国内用户的友好度

由于众所周知的原因,Google 的服务对于国内用户不太友好。,于是很多博主也不太敢把博客放在 Google Cloud 上面。作为喜欢吃螃蟹的博主,我来分享一下 Google Cloud 的友好程度。

本博客放在台湾的数据中心,。以下测试结果来自奇云测。

目标地址 HTTP://leonax.net,总共 79 个监测点,16.5% 的监测点无法访问本站:

  • 电信(42 个监测点):有 4 个监测点(9.5%)无法访问本站,现象都是可以获取 IP,但 HTTP 访问失败。
  • 电信通(4 个监测点):全部通过测试。
  • 教育网(1 个监测点):全部(100%)未通过测试,可以获取 IP,但 HTTP 访问失败。
  • 联通(20 个监测点):有 1 个监测点(5%)无法访问本站,可以获取 IP,但 HTTP 访问失败。
  • 鹏博士(1 个监测点):全部通过测试。
  • 移动(7 个监测点):全部(100%)未通过测试,可以获取 IP,但 HTTP 访问失败。

目标地址 HTTPS://leonax.net总共 79 个监测点,15.2% 的监测点无法访问本站:

  • 电信(42 个监测点):有 8 个监测点(19%)无法访问本站,其中江西省新余市电信把 IP 解析到了 218.87.109.64,其它地区都可以解析到正确的 IP,但 HTTP 访问失败。
  • 电信通(4 个监测点):有 2 个监测点(50%)无法访问本站,可以获取 IP,但 HTTP 访问失败。
  • 教育网(1 个监测点):全部(100%)未通过测试,可以获取 IP,但 HTTP 访问失败。
  • 联通(20 个监测点):有 1 个监测点(5%)无法访问本站,为哈尔滨市联通,把 IP 解析到了 220.181.179.8。
  • 鹏博士(1 个监测点):全部通过测试。
  • 移动(7 个监测点):全部通过测试。

总体而言,不同的地区的网络提供商(ISP)有不同的限制,全国大约有一七分之一的用户无法正常访问本站。如果您发现本站的打开速度有问题,也请留言,并注明您的 ISP。