torugo/util

包含有用类和方法的库

1.12.1 2024-09-17 19:05 UTC

README

包含有用类和方法的库。

目录

需求

  • PHP 8+
  • PHP mbstring 扩展已安装并加载。
  • PHP openssl 扩展已安装并加载。
  • Composer 2+

安装

在终端中输入

composer require torugo/util

或将它添加到 composer.json 文件的 require 列表中

{
    "require": {
        "torugo/util": "^0.1.0"
    }
}

工具

CDT(压缩日期和时间)

CDT 是一种包括毫秒的日期和时间存储方式。

use Torugo\Util\CDT\CDT;

获取

返回当前日期/时间的 CDT。

$cdt = CDT::get(); // returns something like "SGVU9Z2WV"

fromTimestamp

从时间戳或 microtime 生成 CDT。

$cdt = CDT::fromTimestamp(416410245.1234); // returns "6VX4790YA"

fromDateTime

从 PHP DateTime 对象生成 CDT。

$dateTime = \DateTime::createFromFormat("Y-m-d H:i:s.u", "2017-08-01 14:45:56.789");
$cdt = CDT::fromDateTime($dateTime); // returns "OU0H0K0LX"

toMicrotime

将 CDT 转换为 microtime(浮点)数字。

$micro = CDT::toMicrotime("6VX4790YA"); // returns 416410245.1234

toDateTime

将 CDT 转换为 PHP DateTime 对象。

$dateTime = CDT::toDateTime("6VX4790YA"); // returns an instance of DateTime

DateWriter

将 DateTime 对象转换为书面日期/时间。

$dw = new DateWriter( \DateTime $dt, string $language );
$dw->write(string $format);

格式选项

接受所有 PHP DateTimeInterface::format 字符。

括号内([])的内容将不会以任何方式改变。

默认情况下,所有月份和星期的名称都定义为标题大小写,要转换大小写,请使用标记

  • *{ ... } 转换为大写。
  • %{ ... } 转换为小写。

国际化

可用于写入月份和星期名称的语言。

用法

use Torugo\Util\DateWriter\DateWriter;

$dateTime = \DateTime::createFromFormat("Y-m-d H:i:s", "2017-08-01 15:30:45");
$dw = new DateWriter($dateTime, "pt");

$dw->write("[São Paulo,] j [de] %{F} [de] Y");
// São Paulo, 1 de agosto de 2017

$dw->write("*{l}");
// TERÇA-FEIRA

SemVer

验证并比较语义版本号。版本号必须遵循 semver.org 规则

用法

use Torugo\Util\SemVer\SemVer;

$version = new SemVer("1.0.0");

$version->compareTo("1.0.0");      // returns VersionComparison::Equal
$version->compareTo("1.0.1");      // returns VersionComparison::Smaller
$version->compareTo("1.0.0-beta"); // returns VersionComparison::Bigger

TBase64(URL安全)

对可用于 URL 的字符串进行 Base64 编码和解码。

用法

use Torugo\Util\TBase64\TBase64;

$b64 = TBase64::encode("My String"); // => "TXkgU3RyaW5n"
$decoded = TBase64::decode($b64); // => "My String"

TEncrypt

使用对称密钥加密/解密字符串。

注意

对称密钥
表示用于加密的密钥必须与解密时相同。
每个加密算法都有一个最小密钥长度(以字节为单位),请查看下面的表格。

用法

use Torugo\Util\TEncrypt\TEncrypt;
use Torugo\Util\TEncrypt\Enums\TCipher;

$text = "May the force be with you!";
$key = "ye-PaJYnFPluROpIFo146zhQNvKHbUkIKNMc2rkd8rE";

$encrypted = TEncrypt::encrypt($text, $key,);  // Encrypts the text
$decrypt = TEncrypt::decrypt($encrypted,$key); // Decrypts the encrypted text

加密算法

使用 TCipher 枚举设置新的加密算法。

设置加密算法:

TEncrypt::setCipher(TCipher::CAMELLIA_256_OFB);

所有支持加密算法的列表,默认为 AES_256_CFB

TFile

通过解析内容来操作文本文件。

use Torugo\Util\TFile\TFile;

检查文件是否存在

静态方法 exists 返回给定路径中的文件是否存在,您可以使用 createIfNotExists 参数在文件不存在时创建文件。

TFile::exists(string $path, bool $createIfNotExists): bool

创建文件

静态方法 create 尝试在给定路径上创建文件。
成功返回 true 或失败返回 false

TFile::create(string $path): bool

检查文件是否可写

$file = new TFile(__DIR__ . "/file.txt");

$isWritable = $file->isWritable();

加载文件行

将文本文件的行作为数组返回

$file = new TFile(__DIR__ . "/file.txt");

$lines = $file->getLines();

解析.env文件

env 文件的内容解析为关联数组。

$file = new TFile(__DIR__ . "/.env");

$env = $file->parseEnv();

解析.json文件

加载 JSON 文件内容并返回它作为关联数组。
在无效的情况下返回空数组。

$file = new TFile(__DIR__ . "/file.json");

$json = $file->parseJson();

解析.key文件

加载.key文件内容并从中返回密钥。

密钥文件是一个包含密钥分割成行的文本文件。
密钥必须被-----BEGIN----------END-----所包围。

.key文件示例

-----BEGIN-----
UjNbMRDfsFyfEtgMVXUhhUqNiIEWxNyChFzuTRFwWgupYgbgnseckyLXmQTzjdyf
nQnmKFAiPQCyTjpqiBlewFUPdBlViQejeCZaLlLvbzLSAZgKUcRDWGqiPCrxhprO
BozroybWrtgzUfkdQbDzukaEidtADbsQQUTteFSIlNvyrrbbYJpzAkFrGiexsjOb
sSSwNsYcCzyRTDQoJIemWtGAJMyPSTJoaGTbShtJejVRmhPwpmcTFImkaKXIPNnl
HOQKUDnhoDQFXVsFueCFXRfrEPiieJSJUEGBmmCJFoMFNOsEVgoXIPMVyaFiZgbi
vZNKyydWKNXqrJfvWwHZPnTvIyGRzgqicEjdnNrlqsLYmKCpjeuVmvteBSIZCuLs
KlcqBtYhbeoTfUesqTwGDftjjSFHNWHirwWPdusiGUqDzjlzJPiaBsosBFyeziHb
kaEdZEpTOUoRYiFAmtiVHqPFFfwxytrzQkwfoGORYviXdyfRYYfcOLKZlwoDUMnm
dsUrbfhhScMFUrPtRijXiuTwkcyacOTojJEvtafFgiETIPzHfvNiXFFxYmNhbftJ
hMwvJQpYwykHNekNYFJbIfepGErQrAxuDSeOddKKgYoDfSeZzbPeabrtavJWjXgb
wSQPVFBJtyEBuyQilRHKQduJOKOBYuwOhlWvJzqxeywCAaAYFyVtHcSFjyxYVgzy
rKjtjbJnAyyfkAUZawctbPqfCkqovijpoomjLsPIYWOMLkdfyktwCorpbKayFEnJ
OIiGAamMuGMheNadiGJGIAvwJIOcnAugRmiCKFbDWdSgGZZHjdeUbZyEJMJxzPcx
ZKKQEfQqIAZSpGSaKHNsfBLKMhRkEmqIkKTopzPJisPalGJqobiaGMifFPwnzHNd
RCRWklziDGeAbLZAVwByJpFHShtPETUcypXgWNTECHhxsveQtgFqPWqEPQPyFsfW
OrHzAMARDiHywWmmeLGyrrJDTnuXClvVIKvTuUQXwXymnqDmroUXRMbuykvcaGPP
-----END-----
$file = new TFile(__DIR__ . "/mykey.key");

$key = $file->parseKeyFile();

TPass

生成随机密码,并检查密码强度

use Torugo\Util\TPass\TPass;

选项

注意

当启用beginWithALetter时,请确保启用includeLowercaseincludeUppercase

设置符号源

默认的符号来源是!;#$%&()*+,-./:;<=>?@[]^_{|}~;

要设置自定义的符号来源,请使用方法setSymbols

检查密码强度

要检查密码强度,请使用方法checkPasswordStrength;

它返回一个0到4的整数值,其中

0 = Very week
1 = week
2 = medium
3 = strong
4 = very strong

示例

"123456" => 0,
"112233" => 0,
"admin" => 0,
"password" => 0,
"psw1223!A" => 1,
"NU$;K^9" => 2,
"NU$;k3+" => 3,
"NU$;K^+B#D!;+D%8nP" => 4,
"123456NU$;K^+B#D!;+D%8nP" => 4,

TUID(Torugo唯一ID)

生成带有日期和时间的随机唯一ID。

use Torugo\Util\TUID\TUID;

此工具可以生成三种类型的ID

生成

$short = TUID::short();
$medium = TUID::medium();
$long = TUID::long();

验证

$tuid = "PVA4M433-20L5-K1HVUPLQW-TL0SHULDI0VT";
TUID::validate($tuid); // returns true

获取日期和时间

$tuid = "PVA4M433-20L5-K1HVUPLQW-TL0SHULDI0VT";
TUID::getDateTime($tuid); // returns a PHP DateTime instance

TRandom

生成随机字符串和数字

use Torugo\Util\TRandom\TRandom;

$tRandom = new TRandom;

随机字符串

设置用于生成随机字符串的源字符。

$rnd = $tRandom->string(10); // Generates 10 chars long random string

参数

设置源字符

$random->alpha = "ABCDEF";
$random->numbers = "123";
$random->symbols = "#$%&*";

$str = $random->string(10);
// Generates a random string with the given characters.

随机数

生成给定范围内的随机整数。

$tRandom->number(1001, 9999); // Generates a random number between 1001 and 9999

带前导零的随机数

生成带有前导零的正随机整数。

$tRandom->lzNumber(1, 9999, 4); // 0001 ... 9999
$tRandom->lzNumber(1001, 999999, null); // 001001 ... 999999

特质

空值特质

为特定类型返回一个空值。

use Torugo\Util\Traits\EmptyValues;

class MyClass {
    use EmptyValues;

    function myFunction() {
        // ...
        $type = $this->getEmptyValueForType(gettype($var));
        // ...
    }
}

从数组工厂

从键=>值数组中实例化一个类。

  1. 密钥必须等于属性名称。
  2. 所有属性都必须设置为public。

示例

use Torugo\Util\Traits\FromArrayFactory;

class UserDto
{
    use FromArrayFactory;

    public string $name;
    public string $email;
    public string $password;
}

$payload = [
    "name" => "Full User Name",
    "email" => "user@gmail.com",
    "password" => "SuperStrongPassword!",
];

$instance = UserDto::fromArray($payload);
// $instance->name ==> "Full User Name"
// $instance->email ==> "user@gmail.com"
// $instance->password ==> "SuperStrongPassword!"

贡献

目前不对贡献开放,我打算尽快使其可用。

许可

本库使用MIT许可证许可 - 有关详细信息,请参阅LICENSE文件。