x-zuzhi/juhelib

Self use php class library

2.0.0 2023-11-09 06:29 UTC

This package is auto-updated.

Last update: 2025-03-09 09:20:21 UTC


README

介绍

Self use php class library

安装教程

composer require x-zuzhi/juhelib

语义化版本

从该版本开始官方将采用语义化版本号策略,也就是版本号格式使用:主版本号.次版本号.修订号。版本号递增规则如下:

  • 主版本号:当做了不兼容的 API 修改
  • 次版本号:当做了向下兼容的功能性新增
  • 修订号:当做了向下兼容的问题修正

    email 类使用方法

    use Juhelib\email;
    ...
      email::setConfig([
          "engine" => "2", // 1、基于socket协议(不支持 ssl) 2、phpmailer(支持 tls / ssl)
          "nickname" => "xxxx", // 发信昵称
          "server" => "xxxx", // smtp 地址
          "port" => "587", // smtp 端口,默认 587(可选)
          "secure" => "tls", // 启用 tls / ssl 加密,默认 tls(可选)
          "username" => "xxxx", // 账户
          "password" => "xxxx", // 密码
          "debug" => "false", // 是否开启 debug(可选)
      ]);
        
      // 发送邮件(不使用标签),返回 bool(是否发送成功)
      var_dump(email::send('xxxx@qq.com','邮件标题','邮件内容'));
        
      // 发送邮件(使用标签),返回 bool(是否发送成功)
      $code = 123456; // 验证码
      $code_time = 120; // 验证码有效期(秒)
      var_dump(email::send(
          'xxxx@qq.com', '[:sitename:] - 邮箱验证',
          '您的验证为:[:code:],有效期为:[:codetime:]分钟,请尽快使用。当前时间:[:date:]',
          ['sitename' => '我的小站', 'code' => $code, 'codetime' => strval($code_time / 60), 'date' => date("Y-m-d", time())]
      ));
        
      // 以上代码发送的邮件信息如下:
      // 邮件标题:我的小站 - 邮箱验证
      // 邮件内容:您的验证为:123456,有效期为:2分钟,请尽快使用。当前时间:2019-06-22
    ...
    

    file 类使用方法

    use Juhelib\file;
    ...
      // 上传到七牛云
      file::setConfig([
          'engine' => 'qiniu', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
            
          'qiniu_url_prefix' => 'http', // 协议
          'qiniu_domain' => '七牛云地址',
          'qiniu_key_access' => '你的 accessKey',
          'qiniu_key_secret' => '你的 secretKey',
          'qiniu_bucket_name' => '空间名称'
      ]);
      // 上传到阿里云 OSS
      file::setConfig([
          'engine' => 'alioss', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
            
          'alioss_key_access' => '你的 accessKey',
          'alioss_key_secret' => '你的 secretKey',
          'alioss_endpoint' => '数据节点', // 我这里用的是杭州节点,http://oss-cn-hangzhou.aliyuncs.com
          'alioss_bucket_name' => '空间名称'
      ]);
      // 上传到腾讯 COS
      file::setConfig([
          'engine' => 'qcloud', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
            
          'qcloud_url_prefix' => 'http', // 协议
          'qcloud_region' => '存储桶地域,例如:ap-chengdu',
          'qcloud_secret_id' => '你的 secretId',
          'qcloud_secret_key' => '你的 secretKey',
          'qcloud_bucket' => '格式:BucketName-APPID'
      ]);
      // 上传到 FTP
      file::setConfig([
          'engine' => 'ftp', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
            
          'ftp_host' => 'FTP 地址',
          'ftp_port' => 'FTP 端口',
          'ftp_username' => 'FTP 账号',
          'ftp_password' => 'FTP 密码',
          'ftp_url' => '外部资源地址', // 只要外部能直接访问该资源即可
          // 示例一:'ftp_url' => 'http://1.cn:8080'
          // 示例二:'ftp_url' => 'https://1.cn:8443'
          // 示例三:'ftp_url' => 'ftp://1.cn:8021'
      ]);
      // 上传到 FTP (SSL)
      file::setConfig([
          'engine' => 'ftp-ssl', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
            
          'ftp_host' => 'FTP 地址',
          'ftp_port' => 'FTP 端口',
          'ftp_username' => 'FTP 账号',
          'ftp_password' => 'FTP 密码',
          'ftp_url' => '外部资源地址', // 只要外部能直接访问该资源即可
          // 示例一:'ftp_url' => 'http://1.cn:8080'
          // 示例二:'ftp_url' => 'https://1.cn:8443'
          // 示例三:'ftp_url' => 'ftp://1.cn:8021'
      ]);
      // 上传到 SFTP(PHP 需安装 SSH2 扩展)
      file::setConfig([
          'engine' => 'sftp', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
            
          'sftp_host' => 'SFTP 地址',
          'sftp_port' => 'SFTP 端口',
          'sftp_username' => 'SFTP 账号',
          'sftp_password' => 'SFTP 密码',
          'sftp_path' => '上传路径',
          'sftp_url' => '外部资源地址', // 只要外部能直接访问该资源即可
          // 示例一:'sftp_url' => 'http://1.cn:8080'
          // 示例二:'sftp_url' => 'https://1.cn:8443'
          // 示例三:'sftp_url' => 'ftp://1.cn:8021'
      ]);  
      // 上传到本地
      file::setConfig([
          'engine' => 'local', // 引擎
          'white_ext' => ['zip', 'doc'], // 增加文件后缀白名单
          'image_compress_ratio' => '90', // 图片压缩率,默认90%
      ]);
        
      // 开始文件上传,返回上传成功后的(数组)图片地址
      var_dump(file::upload([
          'upload_folder' => 'upload', // 这里填写本地存放目录
          'file_size' => '4096' // 这里可以限制文件大小,默认设置 4M 文件限制,默认单位为KB
      ]));
      // 开始 Base64 图片上传,返回上传成功后的(数组)图片地址
      var_dump(file::upload_base64([
          'upload_folder' => 'upload', // 这里填写本地存放目录
          'file_size' => '4096' // 这里可以限制文件大小,默认设置 4M 文件限制,默认单位为KB
      ]));
    ...
    

    sms 类使用方法,发送短信验证码

    use Juhelib\sms;
    ...
      // 腾讯云短信
      sms::setConfig([
          'engine' => 'qcloud', // 短信引擎
          'qcloud_appid' => '你的 appid',
          'qcloud_appkey' => '你的 appkey',
          'qcloud_template_id' => '短信模板 ID',
          'qcloud_sign' => '短信签名',
      ]);
      // 发送短信,返回 bool(是否发送成功)
      var_dump(sms::sendSms('手机号',
          ['验证码'] // 短信参数
      )); 
        
      // 阿里短信
      sms::setConfig([
          'engine' => 'alisms', // 短信引擎
          'alisms_keyid' => '你的 keyid',
          'alisms_secret' => '你的 secret',
          'alisms_template_code' => '短信模板 code',
          'alisms_sign' => '短信签名',
      ]);
      // 发送短信,返回 bool(是否发送成功)
      var_dump(sms::sendSms('手机号',
          ['code' => '验证码'] // 短信参数
      ));
    ...
    

    image 类使用方法

    use Juhelib\image;
    ...
      // 压缩图片
      image::compressedPictures('图片路径', '压缩后保存路径', '是否内部调用(true/false)', '图片压缩比(默认90)');
      // 判断是否 gif 动画
      image::check_gifcartoon('图片路径');
    ...
    

    ip 类使用方法

    use Juhelib\ip;
    ...
      // 获取 IP 地址
      ip::getIP();
      // 获取 IP 数据,返回 [Array] 数据
      ip::getData('qqwry'); // 可选参数: taobao/ip138/qqwry
    ...
    

    hook 类使用方法

    use Juhelib\hook;
    ...
      // 注册钩子
      hook::add('name', function() {
          echo 'hello world';
      });
      // 执行钩子
      hook::run('name');
    ...
    

    excel 类使用方法

    use Juhelib\excel;
    ...
      // 读取 excel 文件,返回 [Array] 数据
      excel::getExcel('文件路径', '从第n行开始读取');
      // 导出 excel 文件 (方法一)
      $array = [
          ['Apple IPhone 11 X', '¥8999', '实体'], ['小米 10', '¥3999', '实体']
      ];
      foreach ($array as $key => $value)
      {
          $data[$key] = [
              '商品名称' => $value[0],
              '商品价格' => $value[1],
              '商品类型' => $value[2],
          ];
      }
      // 也可使用 excel::exportPdf 函数进行 PDF 文件导出
      excel::exportExcel([
          [
              'name' => '商品数据',
              'data' => $data
          ], [
              'name' => '财务数据',
              'data' => [
                  [
                      '日进账' => '八万',
                      '月进账' => '二十四万',
                      '年进账' => '两千九百二十千万'
                  ]
              ]
          ]
      ], ['file_name' => 'Demo']);
      // 导出 excel 文件 (方法二)
      // 也可使用 excel::exportPdf 函数进行 PDF 文件导出
      excel::exportExcel([
          [
              'name' => '商品数据',
              'title' => ['商品名称', '商品价格', '商品类型'],
              'data' => [
                  ['Apple IPhone 11 X', '¥8999', '实体'],
                  ['小米 10', '¥3999', '实体']
              ]
          ], [
              'name' => '财务数据',
              'title' => ['日进账', '月进账', '年进账'],
              'data' => [
                  ['八万', '二十四万', '两千九百二十千万']
              ]
          ]
      ], ['file_name' => 'Demo']);
      // 根据模板 导出 excel 文件
      // 也可使用 excel::exportPdf 函数进行 PDF 文件导出
      excel::exportExcel([
          [
              // 中间件(可选)
              'middleware' => function ($spreadsheet) {
                  // 此处可用于处理模板内容,比如修改标题、时间等
                  $spreadsheet->setCellValue('A1', '年月(2021-06)');
                  return $spreadsheet;
              },
              'data' => [
                  ['Apple IPhone 11 X', '¥8999', '实体'],
                  ['小米 10', '¥3999', '实体']
              ]
          ], [
              'data' => [
                  ['八万', '二十四万', '两千九百二十千万']
              ]
          ]
      ], ['file_name' => 'Demo', 'template_path' => 'demo.xlsx']);
    ...
    

    safe 类使用方法

    use Juhelib\safe;
    ...
      // 字符串加密模块
      safe::str_encrypt('源字符串', '密钥');
      // 字符串解密模块
      safe::str_decrypt('加密过的字符串', '密钥');
      // 文件加密模块
      safe::file_encrypt('源地址', '加密后的文件地址', '密钥');
      // 文件解密模块
      safe::file_decrypt('加密过的文件地址', '解密后的文件地址', '密钥');
    ...
    

    system 类使用方法

    use Juhelib\system;
    ...
      // 获取物理 Mac 地址
      system::get_mac_addr();
      // 生成机器码
      system::machine_code('混淆码');
    ...
    

    check 类使用方法

    use Juhelib\check;
    ...
      // 验证银行卡号是否有效(前提为16位或19位数字组合)
      check::isBankCard('银行卡号');
      // 验证身份证号是否正确
      check::isIdentityCard('身份证号');
      // 验证url地址
      check::isUrl('Url', '协议,默认 Http');
      // 验证电话号码
      check::isPhone('电话号码');
      // 验证邮箱
      check::isEmail('邮箱');
      // 验证邮编
      check::isZip('邮编');
      // 是否是数字
      check::isNumeric('传递值');
      // 是否超过最大长度
      check::isMaxLength('传递值', '最大长度');
      // 超过最大数
      check::isMaxValue('传递值', '最大值');
      // 验证用户名(只允许下划线+汉字+英文+数字(不支持其它特殊字符))
      check::isUsername('传递值', '最小长度', '最大长度');
      // 是否为空值
      check::isEmpty('传递值');
      // 数字验证
      check::isNum('传递值');
      // 是否是数字或英文组合
      check::isNumLetter('传递值');
      // 是否同时包含数字和英文,必须同时包含数字和英文
      check::isNumAndLetter('传递值');
      // 微信号验证
      check::isWebchat('微信号');
    ...
    

    push 类使用方法

    use Juhelib\push;
    ...
      // 个推推送
      push::setConfig([
          'engine' => 'getui', // 推送渠道
          'app_id' => '你的 appid',
          'app_key' => '你的 appkey',
          'master_secret' => '你的 master_secret',
      ]);
      // 向单个用户推送消息
      $clickType = 'url';
          // intent:打开应用内特定页面
          // url:打开网页地址
          // payload:自定义消息内容启动应用
          // payload_custom:自定义消息内容不启动应用
          // startapp:打开应用首页
          // none:纯通知,无后续动作
      $behavior = 'http://www.baidu.com';
      push::message('cid', '标题', '内容', ['click_type' => $clickType, 'behavior' => $behavior]);
    
      // 极光推送
      push::setConfig([
          'engine' => 'jiguang', // 推送渠道
          'app_key' => '你的 appkey',
          'master_secret' => '你的 master_secret',
      ]);
      push::message('registration_id', '标题', '内容');
    ...
    

    后续

    setConfig 方法可以一次性赋值,拿 sms 类为例

    use Juhelib\sms;
    ...
      sms::setConfig([
          'engine' => 'qcloud', // 短信引擎
          'qcloud_appid' => '你的 appid',
          'qcloud_appkey' => '你的 appkey',
          'qcloud_template_id' => '短信模板 ID',
          'qcloud_sign' => '短信签名',
          'alisms_keyid' => '你的 keyid',
          'alisms_secret' => '你的 secret',
          'alisms_template_code' => '短信模板 code',
          'alisms_sign' => '短信签名',
      ]);
    ...