至尊技术网 - ThinkPHP https://www.zzwws.cn/tag/ThinkPHP/ zh-CN Tue, 03 Jan 2023 14:12:00 +0800 Tue, 03 Jan 2023 14:12:00 +0800 ThinkPHP6 excel表导入导出 https://www.zzwws.cn/archives/6389/ https://www.zzwws.cn/archives/6389/ Tue, 03 Jan 2023 14:12:00 +0800 悠悠楠杉 composer下载phpspreadsheet

composer require phpoffice/phpspreadsheet

PhpSpreadsheet中文简介

phpexcel由于版本陈旧性能低下官方放弃维护,转而开发PhpSpreadsheet用了最新得psr标准因而对php版本不向下兼容需要注意!

PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式

PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到

使用PhpSpreadsheet开发的PHP要求7.1或更高版本,并且支持链式操作

PhpSpreadsheet 支持的文件格式

文件路径extend/Excel.php

<?php
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use think\exception\ValidateException;

class Excel
{
    /**
     * 导入excel表格
     * @param array $file 文件路径
     * @return array|string
     */
    protected function importExcel($file)
    {
        try {
            // 截取后缀
            $fileExtendName = substr(strrchr($file, '.'), 1);
            // 有Xls和Xlsx格式两种
            if ($fileExtendName == 'xlsx') {
                $objReader = IOFactory::createReader('Xlsx');
            } else {
                $objReader = IOFactory::createReader('Xls');
            }
            // 设置文件为只读
            $objReader->setReadDataOnly(TRUE);
            // 读取文件,tp6默认上传的文件,在runtime的相应目录下,可根据实际情况自己更改
            $objPHPExcel = $objReader->load($_SERVER['DOCUMENT_ROOT'] . $file);
            //excel中的第一张sheet
            $sheet = $objPHPExcel->getSheet(0);
            // 取得总行数
            $highestRow = $sheet->getHighestRow();
            // 取得总列数
            $highestColumn = $sheet->getHighestColumn();
            Coordinate::columnIndexFromString($highestColumn);
            $lines = $highestRow - 1;
            if ($lines <= 0) {
                return '数据不能为空';
            }
            // 直接取出excle中的数据
            $data = $objPHPExcel->getActiveSheet()->toArray();
            // 删除第一个元素(表头)
            array_shift($data);
            // 返回结果
            return $data;
        } catch (ValidateException $e) {
            return $e->getMessage();
        }
    }

    /**
     * 导出excel表格
     * @param array $header 设置表头数据
     * @param array $data 生成的表格数据
     * @param bool $type 文件类型,true为Xlsx,false为Xls,默认为true
     * @param string $fileName 文件名,默认为数据
     */
    protected function export($header = [], $data = [], $type = true, $fileName = "数据")
    {
        // 实例化类
        $preadsheet = new Spreadsheet();
        // 创建sheet
        $sheet = $preadsheet->getActiveSheet();
        // 生成表头字母
        $letter = [];
        $n = 0;
        for ($i = 'A'; $i <= 'Z'; $i++) {
            if ($n<count($header)){
                $letter[] = $i;
            }else{
                break;
            }
            $n++;
        }
        // 循环设置表头数据
        foreach ($header as $k => $v) {
            // 解决长数字自动转科学计数法
            if(is_numeric($v) && strlen($v) > 11){
                $sheet->setCellValueExplicit($letter[$k].'1',$v,'s');
            }

            $sheet->setCellValue($letter[$k].'1', $v);
        }
        // 生成数据
        $sheet->fromArray($data, null, "A2");
        // 样式设置
        $sheet->getDefaultColumnDimension()->setWidth(12);
        // 设置下载与后缀
        if ($type) {
            header("Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            $type = "Xlsx";
            $suffix = "xlsx";
        } else {
            header("Content-Type:application/vnd.ms-excel");
            $type = "Xls";
            $suffix = "xls";
        }
        // 激活浏览器窗口
        header("Content-Disposition:attachment;filename=$fileName.$suffix");
        //缓存控制
        header("Cache-Control:max-age=0");
        // 调用方法执行下载
        $writer = IOFactory::createWriter($preadsheet, $type);
        // 数据流
        $writer->save("php://output");
    }
}

调用

$excel = new Excel();

// 导出
$header = ['姓名','性别'];
$data = [['小王','男'],['小李','男']];
$excel->export($header,$data);

// 导入
$data = $excel->importExcel('/storage/picture/20221222/77d80064c35db092c8124a13a7f6fcd5.xlsx');
if(is_array($data)){
    print_r($data);
}else{
    echo $data;
}

]]>
0 https://www.zzwws.cn/archives/6389/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
ThinkPHP6使用DOMDocument报错 https://www.zzwws.cn/archives/6385/ https://www.zzwws.cn/archives/6385/ Fri, 23 Dec 2022 16:51:27 +0800 悠悠楠杉 每一个载入浏览器都会生成一个 Document 对象。

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。Document 对象是 Window 对象的一部分。

我们项目中需要使用第三方支付,第三方支付文件使用了DOMDocument,如果直接使用DOMDocument的话会报错

解决方法
只需要在DOMDocument加上一个反斜杠就可以了

$dom = new \DOMDocument();
$dom->loadXML($data);
]]>
0 https://www.zzwws.cn/archives/6385/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
ThinkPHP6使用阿里云短信服务 https://www.zzwws.cn/archives/6384/ https://www.zzwws.cn/archives/6384/ Fri, 16 Dec 2022 15:49:00 +0800 悠悠楠杉 使用composer安装sdk

composer require alibabacloud/sdk

新建一个控制器文件或者放到共用文件

<?php
namespace app\api\controller;

use app\BaseController;
use AlibabaCloud\Client\AlibabaCloud;
class Sms extends BaseController
{
    public function index()
    {
        $phone = input('phone');
        if(!$phone){
            echo '请传入手机号';
        }else if(!$this->validatePhone($phone)){
            echo '手机号格式错误';
        }else{
            $res = $this->sendCode($phone);
            if($res === true){
                echo '发送验证码成功';
            }else{
                // echo $res;
                echo '发送验证码失败';
            }
        }
    }

    /**
     * 发送短信验证码
     */
    protected function sendCode($phone)
    {
        return $this->sendSms('AccessKeyId','Secret',['phone' => '手机号','sign' => '至尊网络','code' => 'SMS_...','param' => json_encode(['code' => mt_rand(10000,99999)])]);
    }
  
    /**
     * 阿里云短信服务
     * @param $AccessKeyId
     * @param $Secret
     * @param $params
     * @return bool
     * @throws ClientException
     */
    protected function sendSms($AccessKeyId, $Secret, $params){
        if (empty($params['phone'])) {
            return false;
        }
        // 创建客户端
        AlibabaCloud::accessKeyClient($AccessKeyId, $Secret)
            ->regionId('cn-hangzhou')
            ->asDefaultClient();
        try {
            $query = [
                'RigionId'     => 'cn_hangzhou',
                'PhoneNumbers' => $params['phone'],// 输入的手机号
                'SignName'     => $params['sign'],// 签名信息
                'TemplateCode' => $params['code']// 短信模板id  
            ];
            if(!empty($param['param'])){
                $query['TemplateParam'] = $params['param'];// 可选,模板变量值,json格式
            }
            $result = AlibabaCloud::rpc()
                ->product('Dysmsapi')
                ->version('2017-05-25')
                ->action('SendSms')
                ->host('dysmsapi.aliyuncs.com')
                ->options([
                    // 这里的参数可以在openAPI Explorer里面查看
                    'query' => $query
                ])
                ->request();
            $arr = $result->toArray();
            // print_r($arr);
            if($arr['Code'] == 'OK'){
                return true;
            }else{
                return $arr['Message'];
            }  
        } catch (ClientException $e) {
            return $e->getErrorMessage();
        } catch (ServerException $e) {
            return $e->getErrorMessage();
        }
    } 
    
    /**
     * 校验手机号码
     * @param $phone
     * @return bool
     */
    protected function validatePhone($phone){
        if(!preg_match("/^(?:(?:\+|00)86)?1[3-9]\d{9}$/", $phone)){
            return false;
        }
        return true;
    }
}  

短信验证码防刷机制
1、时间限制:60秒后才能再次发送
2、手机号限制:同一个手机号,24小时之内不能够超过5条
3、短信验证码限制:30分钟之内发送同一个验证码
4、前后端校验:提交Token参数校验
5、唯一性限制:微信产品,限制同一个微信ID用户的请求数量
6、产品流程限制:分步骤进行
7、图形验证码限制:图形验证通过后再请求接口图形验证码前后台交互流程比较简单
8、IP及Cookie限制:限制相同的IP/Cookie信息最大数量
9、短信预警机制,做好出问题之后的防护

]]>
0 https://www.zzwws.cn/archives/6384/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
ThinkPHP6使用扩展类库 https://www.zzwws.cn/archives/6369/ https://www.zzwws.cn/archives/6369/ Wed, 16 Nov 2022 10:06:45 +0800 悠悠楠杉 在使用thinkphp6时,经常要引用第三方类库,比如upload.php类,在框架根目录下的 extend 目录称为 扩展类库目录,用于存放一些自定义的类,只要符合自动加载的规范(命名空间、类名、文件名),就可以拿来直接使用。

1. extend 目录的直接子内容
假设在 extend 目录下创建一个 Upload.php 文件,如果是 extend 目录的直接子内容则不需要添加命名空间

<?php

class Upload
{
    
}

此时可以在控制器中直接使用 \Upload 类,特别注意命名空间

2. 带层级的类
假设在 extend/file 目录下创建一个 Upload.php 文件,此时需要添加命名空间

<?php

namespace file;

class Upload
{
    
}

此时可以在控制器中直接使用 \file\Upload 类

// 测试
dump(new \Upload());
dump(new \file\Upload());
]]>
0 https://www.zzwws.cn/archives/6369/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
ThinkPHP 过滤重复数据distinct和group https://www.zzwws.cn/archives/6344/ https://www.zzwws.cn/archives/6344/ Thu, 16 Jun 2022 17:52:00 +0800 悠悠楠杉 //distinct方法去重 $data = (new classifyModel())->distinct(true)->field('name')->select()->toArray(); //group方法去重 $data = (new classifyModel())->group('name')->select()->toArray();

对于两种去重方式:

distinct去重、简单易用,但只能对于单一字段去重,并且最终的结果也仅为去重的字段,实际应用价值不是特别大。

group去重,最终的显示结果为所有字段,且对单一字段进行了去重操作,效果不错。

]]>
0 https://www.zzwws.cn/archives/6344/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
源商城V1.1 虚拟产品销售平台程序 https://www.zzwws.cn/archives/6229/ https://www.zzwws.cn/archives/6229/ Sat, 11 Dec 2021 18:12:00 +0800 悠悠楠杉

源商城系统是源分享全新推出的一款轻量级、高性能的开源商城系统。系统基于ThinkPhp5.0+mysql+Vue开发,完善的后台权限管理、会员管理、订单管理、产品管理、数据统计、系统配置、组合数据管理、日志管理、数据库管理,支持队列、PHP快速生成表单、图表统计、表格导出等功能。能够快速积累客户、会员数据分析、智能转化客户、有效提高销售、吸引流量、网络营销、品牌推广的一款产品,且更适合大家二次开发;我们专注于原创研发和创意设计,探索并实现传统教育行业转型发展的难题,通过互联网工具,为合作伙伴长远发展贡献全力。在更深远的认知中,将不断修正服务导向,以开放共享的理念服务中小企业,心之所向,素履以往,以敬畏之心拥抱互联网,勇做推动行业发展的中坚力量,创造价值,为推进互联网转型发展做出贡献。

安装方式:

1.上传程序安装包到宝塔内已创建平台的根目录下,然后解压即可,删除安装包(安装包可删除可不删除,具体看个人意志)

2.上传解压完安装包之后我们回到宝塔的网站管理界面,点击右侧的设置=>伪静态【设置为ThinkPHP】

location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }

3.配置好伪静态随后点击网站目录, 设置运行目录为Public即可

4.在浏览器打开你已添加好的域名或则IP进行访问进入安装页面,安装提示内容进行配置即可

5.如果打开提示No input file specified. 点击网站目录把防跨站攻击(open_basedir)取消勾选

QQ互联回调地址
域名/third/callback/qq
域名/wap/#/pages/User/QQlogin

下载地址:https://zhizun.lanzoux.com/iqhbDxhupgb

]]>
0 https://www.zzwws.cn/archives/6229/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
PHP域名授权系统 源授权V1.5.2 https://www.zzwws.cn/archives/6217/ https://www.zzwws.cn/archives/6217/ Fri, 10 Dec 2021 17:22:00 +0800 悠悠楠杉

源授权是一款全新架构的授权系统.采用ThinkPHP 5.0开发,内置各种强大的功能,邮件管理,腾讯云短信、阿里云短信等.后台强大简洁,使用方便快捷,支付模块集成易支付功能,前台支持自助购买和操作管理授权!

搭建一个网站的标配包括了服务器和域名 (源授权不支持虚拟主机)强烈建议使用:[服务器](标准版、系统选Centos、其他配置默认即可后续可升级配置),刚入门选择最低配置或者活动机器均可。 服务器环境要求的配置:PHP 7.2+ 和 Mysql 5.6(推荐使用linux版本宝塔进行管理搭建,完美)

支付接口集成了易支付 前台可使用卡密授权激活 支持多程序在线自助授权 短信集成腾讯/阿里云短信 支持前台在线充值支付购买 快捷登录方式集成了QQ/微信/微博 可自行对管理权限进行补差价升级 安全 稳定 简约 新UI · 告别繁琐操作 多端授权 · 一站多控 · 授权统一管理方便快捷

下载地址:https://zhizun.lanzoux.com/i0xIkxgdztg

]]>
0 https://www.zzwws.cn/archives/6217/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
源导航V1.0导航系统 https://www.zzwws.cn/archives/6212/ https://www.zzwws.cn/archives/6212/ Fri, 10 Dec 2021 17:16:59 +0800 悠悠楠杉

源导航是一款集网址、资源、资讯于一体的导航系统,采用ThinkPHP 5.0开发!

普及知识:搭建一个网站的标配包括了服务器和域名 (源授权不支持虚拟主机)强烈建议使用:[服务器](标准版、系统选Centos、其他配置默认即可后续可升级配置),刚入门选择最低配置或者活动机器均可。 服务器环境要求的配置:PHP 7.2 和 Mysql 5.6(推荐使用linux版本宝塔进行管理搭建,完美)
基本功能:后台自定义配置广告位展示 后台配置导航栏目和收录站点 随心所欲切换想用的首页模板

下载地址:https://zhizun.lanzoux.com/i2ADSxgdmkj

]]>
0 https://www.zzwws.cn/archives/6212/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
MVSO自动更新采集影视程序V2.0.6源码 https://www.zzwws.cn/archives/6197/ https://www.zzwws.cn/archives/6197/ Thu, 09 Dec 2021 18:29:12 +0800 悠悠楠杉

使用说明:

上传直接访问使用,无需安装

配置要求:

PHP7.2+

nginx,apache,iis均可

.htaccess为apache伪静态

nginx.htaccess为nginx伪静态

web.config为iis伪静态

若是使用宝塔面板可以直接设置成thinkphp伪静态就行了

PHP版本:php7.3

运行目录:根目录/(不需要设置/public)

后台地址:访问你的域名/admin

用户名:mvso

密码:123456

全站采集360影视官方接口!

源码内附详细搭建教程以及相关伪静态代码!

自动适应模板有后台简单方便快捷 虚拟空间也可以完美搭建

下载地址:https://zhizun.lanzoux.com/ij6Lvxf3o0f

]]>
0 https://www.zzwws.cn/archives/6197/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/
php邮件群发管理系统源码 https://www.zzwws.cn/archives/5977/ https://www.zzwws.cn/archives/5977/ Tue, 26 Oct 2021 17:31:07 +0800 悠悠楠杉

Thinkphp内核邮件群发管理系统源码 用于群发邮件使用,支持自定义设置个性化挂机参数,支持多发件箱,多模板可视化管理,支持记录挂机日志。

程序功能介绍:
【发信日志】记录每次执行的状态日志。
【多发件箱】支持自定义多个发信账号发信。
【发信模板】支持自定义多个邮件模板随机调用。
【延时执行】控制发信频率,最低设置1秒。
【状态开关】挂机时发信错误,自动关闭发信账号状态,状态为off时,则不会执行挂机发信任务。 邮件模板,收件箱均支持。

百度网盘链接:https://pan.baidu.com/s/1XNzYdO5QekF3WqHvYheZTg 密码:gvn9

]]>
1 https://www.zzwws.cn/archives/5977/#comments https://www.zzwws.cn/feed/tag/ThinkPHP/