mongdch / mon-util
常用的PHP工具类库,包含了各种各式各样的工具,如:容器、时间、验证器、多语言、图片处理、二维码生成、IP地址解析、文件操作、数据安全、数据字典等等等等。。。
1.7.0
2026-11-07 08:48 UTC
Requires
- php: >=8.0
- psr/container: ^2.0.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-master
- 1.7.0
- 1.6.11
- 1.6.10
- 1.6.9
- 1.6.8
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.16
- 1.5.15
- 1.5.14
- 1.5.13
- 1.5.12
- 1.5.11
- 1.5.10
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.11
- 1.4.10
- 1.4.9
- 1.4.8
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.17
- 1.3.16
- 1.3.15
- 1.3.14
- 1.3.13
- 1.3.12
- 1.3.11
- 1.3.10
- 1.3.9.1
- 1.3.9
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.2.10
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2026-11-07 08:49:53 UTC
README
PHP常用工具、辅助类集合,包含各种常用的类库
环境要求
- PHP >= 8.0
- 部分功能依赖以下扩展,请按需安装:
bcmath:Lottery(概率计算)、Nbed64curl:Network、Tool::downloadgd:Image、Gif、Qrcodefileinfo:UploadFile(MIME 检测)sockets:Network 的 TCP/UDP 功能
安装
composer require mongdch/mon-util
功能清单
核心
- Container类,对象容器,符合 PSR-11 标准
- Instance类,trait单例实现,兼容Container容器
- Pipeline类,管道,适合中间件式编排
- Event类,事件hook类
- Collection类,数组集合类
- Lang类,多语言操作
- View类,视图字符串操作类
常用工具
- Tool类,常用工具类库函数
- Common类,公共工具函数库
- Date类,时间操作
- Tree类,树结构操作
- File类,文件操作
- OS类,操作系统相关工具类
- Validate类,验证器
- IdCard类,处理身份证相关的业务工具类
- Dictionary类,Mysql数据字典生成
- Sql类,解析SQL文件,获取sql操作语句
- DocParse类,解析PHP类对象注解,生成文档
- Lottery类,概率抽奖工具类
- SnowFlake类,雪花ID生成类
- Spids类,生成简短唯一ID类
- Minifier类,HTML、JS、CSS、VUE、PHP文件代码压缩工具
- Nbed64类,Nbed64加密算法类
- Obfuscator类,PHP代码混淆工具
文件与图片
- UploadFile类,文件上传
- UploadImg类,base64图片上传
- UploadSlice类,处理大文件分片上传
- Image类,图片处理工具
- Gif类,辅助Image类进行GIF图片处理
- Qrcode类,用于生成图片二维码
网络与迁移
- Network类,网络客户端工具类,支持HTTP、TCP、UDP
- HttpRequest类,HTTP请求信息封装
- HttpResponse类,HTTP响应封装
- IPLocation类,基于纯真IP库的ip地址定位
- Migrate类,Mysql数据库备份迁移
使用示例
服务容器
use mon\util\Container; // 绑定服务(支持数组批量绑定,值为闭包、类名或实例) Container::instance()->set('db', MyDb::class); // 获取实例,支持构造方法依赖注入,默认单例缓存 $db = Container::gen('db'); // 重新获取新实例 $db2 = Container::gen('db', [], true); // 判断服务是否存在 Container::instance()->has('db'); // 反射执行类方法,支持参数依赖注入(格式:类名@方法名) Container::instance()->invokeMethod('Test@say', ['name' => 'mon']);
类不存在时抛出
mon\util\exception\NotFoundException(实现 PSR-11 的NotFoundExceptionInterface),反射实例化失败时抛出mon\util\exception\ContainerException。
单例 trait
use mon\util\Instance; class Service { use Instance; protected function __construct(int $id = 0) {} } Service::instance(); // 获取单例 Service::createInstance([1], true); // 强制创建新实例
验证器
use mon\util\Validate; $validate = new Validate(); $result = $validate->rule([ 'name' => ['required', 'length:3,20'], 'phone' => ['required', 'mobile'], 'code' => ['postal'], ]) ->check($data); if (!$result) { var_dump($validate->getError()); }
内置常用验证规则:mobile、tel、email、postal、china、alpha、car_num、pay_card、required、length 等,详见 Validate 类源码。
文件操作
use mon\util\File; File::createFile('内容', '/path/to/file.txt'); // 写入文件(默认追加) File::read('/path/to/file.txt'); // 读取文件 File::createDir('/path/to/dir'); // 创建目录 File::copyFile($source, $dest); // 复制文件 File::getExt('/path/to/file.txt'); // 获取后缀名 File::removeFile('/path/to/file.txt'); // 删除文件(内部已做路径归一化,防穿越)
雪花ID
use mon\util\SnowFlake; $snowflake = SnowFlake::instance(); // 数据中心ID、机器ID,多实例部署必须区分,范围均为 0-31 $snowflake->setConfig(1, 1); echo $snowflake->createID(); // 如:415724538895360001
概率抽奖
use mon\util\Lottery; $lottery = Lottery::gen([ ['title' => '一等奖', 'probability' => 1], ['title' => '二等奖', 'probability' => 9], // 概率总和小于 100 时,剩余概率自动补充为未中奖奖项 ]); $result = $lottery->draw(); // isWin 为 true 表示中奖
概率精确到 4 位小数(
scale可调),底层使用random_int与 bcmath 高精度计算,概率总和必须小于等于 100。
身份证
use mon\util\IdCard; $idcard = new IdCard(); $idcard->check('110101199003077777'); // 校验合法性(位数、省份码、生日、校验码) $idcard->getProvinces($id); // 获取省份 $idcard->getCity($id); // 获取城市 $idcard->getLocation($id); // 获取地区信息
大文件分片上传
use mon\util\UploadSlice; $upload = new UploadSlice([ 'rootPath' => './public/upload', // 保存根路径 'tmpPath' => 'tmp', // 分片临时目录,基于rootPath 'exts' => ['mp4', 'zip'], // 允许的文件后缀 'sliceSize' => 4 * 1024 * 1024, // 分片大小限制 ]); // 保存分片:fileID 为本次上传唯一标识,chunk 从 0 递增 $upload->upload($fileID, $chunk); // 全部分片上传完成后合并 $result = $upload->merge($fileID, $chunkLength, $fileName, $saveDir);
并发合并安全(内部使用文件锁),合并采用流式拷贝与原子重命名,不会占用大量内存。
merge的$fileName与$saveDir参数会参与最终保存路径拼接,请务必在业务侧校验后再传入。
助手函数
dd($var); // 调试输出(浏览器友好) collection($arr)->column('id'); // 数组集合 check('mobile', '13800138000'); // 快捷验证,支持Validate所有规则 buildURL('/index', ['id' => 1]); // 构建URL
安全注意事项
Network与Tool::download对 HTTPS 请求默认不校验证书(SSL_VERIFYPEER=false),生产环境涉及敏感数据时请自行评估并加强。UploadSlice::merge、Tool::download的文件名与保存路径参数直接参与路径拼接,务必在业务侧校验。OS类依赖shell_exec/exec函数获取系统信息,部署时请注意相关函数是否被禁用。
更新日志
请查阅 CHANGELOG.md
致谢
感谢您的支持和阅读,如果有什么不足的地方或者建议还请@我,如果你觉得对你有帮助的话还请给个star。
关于
作者邮箱: 985558837@qq.com