至尊技术网 - ThinkPHP https://www.zzwws.cn/tag/ThinkPHP/ ThinkPHP6 excel表导入导出 https://www.zzwws.cn/archives/6389/ 2023-01-03T14:12:00+08:00 composer下载phpspreadsheetcomposer 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; } ThinkPHP6使用DOMDocument报错 https://www.zzwws.cn/archives/6385/ 2022-12-23T16:51:27+08:00 每一个载入浏览器都会生成一个 Document 对象。Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。Document 对象是 Window 对象的一部分。我们项目中需要使用第三方支付,第三方支付文件使用了DOMDocument,如果直接使用DOMDocument的话会报错解决方法只需要在DOMDocument加上一个反斜杠就可以了$dom = new \DOMDocument(); $dom->loadXML($data); ThinkPHP6使用阿里云短信服务 https://www.zzwws.cn/archives/6384/ 2022-12-16T15:49:00+08:00 使用composer安装sdkcomposer 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、短信预警机制,做好出问题之后的防护 ThinkPHP6使用扩展类库 https://www.zzwws.cn/archives/6369/ 2022-11-16T10:06:45+08:00 在使用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()); ThinkPHP 过滤重复数据distinct和group https://www.zzwws.cn/archives/6344/ 2022-06-16T17:52:00+08:00 //distinct方法去重 $data = (new classifyModel())->distinct(true)->field('name')->select()->toArray(); //group方法去重 $data = (new classifyModel())->group('name')->select()->toArray(); 对于两种去重方式: distinct去重、简单易用,但只能对于单一字段去重,并且最终的结果也仅为去重的字段,实际应用价值不是特别大。 group去重,最终的显示结果为所有字段,且对单一字段进行了去重操作,效果不错。 源商城V1.1 虚拟产品销售平台程序 https://www.zzwws.cn/archives/6229/ 2021-12-11T18:12:00+08:00 源商城系统是源分享全新推出的一款轻量级、高性能的开源商城系统。系统基于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 PHP域名授权系统 源授权V1.5.2 https://www.zzwws.cn/archives/6217/ 2021-12-10T17:22:00+08:00 源授权是一款全新架构的授权系统.采用ThinkPHP 5.0开发,内置各种强大的功能,邮件管理,腾讯云短信、阿里云短信等.后台强大简洁,使用方便快捷,支付模块集成易支付功能,前台支持自助购买和操作管理授权!搭建一个网站的标配包括了服务器和域名 (源授权不支持虚拟主机)强烈建议使用:[服务器](标准版、系统选Centos、其他配置默认即可后续可升级配置),刚入门选择最低配置或者活动机器均可。 服务器环境要求的配置:PHP 7.2+ 和 Mysql 5.6(推荐使用linux版本宝塔进行管理搭建,完美)支付接口集成了易支付 前台可使用卡密授权激活 支持多程序在线自助授权 短信集成腾讯/阿里云短信 支持前台在线充值支付购买 快捷登录方式集成了QQ/微信/微博 可自行对管理权限进行补差价升级 安全 稳定 简约 新UI · 告别繁琐操作 多端授权 · 一站多控 · 授权统一管理方便快捷下载地址:https://zhizun.lanzoux.com/i0xIkxgdztg 源导航V1.0导航系统 https://www.zzwws.cn/archives/6212/ 2021-12-10T17:16:59+08:00 源导航是一款集网址、资源、资讯于一体的导航系统,采用ThinkPHP 5.0开发!普及知识:搭建一个网站的标配包括了服务器和域名 (源授权不支持虚拟主机)强烈建议使用:[服务器](标准版、系统选Centos、其他配置默认即可后续可升级配置),刚入门选择最低配置或者活动机器均可。 服务器环境要求的配置:PHP 7.2 和 Mysql 5.6(推荐使用linux版本宝塔进行管理搭建,完美)基本功能:后台自定义配置广告位展示 后台配置导航栏目和收录站点 随心所欲切换想用的首页模板下载地址:https://zhizun.lanzoux.com/i2ADSxgdmkj MVSO自动更新采集影视程序V2.0.6源码 https://www.zzwws.cn/archives/6197/ 2021-12-09T18:29:12+08:00 使用说明:上传直接访问使用,无需安装配置要求: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 php邮件群发管理系统源码 https://www.zzwws.cn/archives/5977/ 2021-10-26T17:31:07+08:00 Thinkphp内核邮件群发管理系统源码 用于群发邮件使用,支持自定义设置个性化挂机参数,支持多发件箱,多模板可视化管理,支持记录挂机日志。程序功能介绍:【发信日志】记录每次执行的状态日志。【多发件箱】支持自定义多个发信账号发信。【发信模板】支持自定义多个邮件模板随机调用。【延时执行】控制发信频率,最低设置1秒。【状态开关】挂机时发信错误,自动关闭发信账号状态,状态为off时,则不会执行挂机发信任务。 邮件模板,收件箱均支持。百度网盘链接:https://pan.baidu.com/s/1XNzYdO5QekF3WqHvYheZTg 密码:gvn9