叶测试 - 叶测试
type: channel
link: https://r1989.com/author/1/
description: 叶测试
items: 微信小程序对接php通过stream流式输出AI大模型结果
items: 使用phpword读取word中的文本、表格等内容
items: 瀚高数据库安全版安装license
items: PostgreSQL中的archive_command详解
items: linux工具：json解析工具jq
items: 多因素认证（MFA）动态令牌PHP实现
items: js变量间赋值，修改变量值后原变量随之改变问题
items: OA系统信创迁移流程

微信小程序对接php通过stream流式输出AI大模型结果
type: item
date: 2026-04-18T00:47:00+00:00
description: php端代码参考（调用豆包）<?php header('Content-Type: text/event-stream'); // 以事件流的形式告知浏览器进行显示 header('Cache-Control: no-cache'); // 告知浏览器不进行缓存 header('X-Accel-Buffering: no'); //关闭加速缓冲 header('Connection: keep-alive'); $keyword = '你是谁'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input = json_decode(file_get_contents('php://input'), true); if (isset($input['message'])) { $message = $input['message']; } } $url="https://ark.cn-beijing.volces.com/api/v3/chat/completions"; $json='{ "model":"doubao-seed-2-0-pro-260215", "messages": [ { "role": "system", "content": "请回答用户提出的植物名称或其他相关问题，如果提问仅包含植物名称则结合百度百科返回植物相关信息信息，删除返回结果中的citation代码内容，需包含：植物中文名称、别名、外文名、分布区域、功能特征、形态特征、生长环境及习性、病虫防治事项、栽培技术、松针腐植土是否适合种植等信息。如果用户提出的非植物相关问题，则正常输出结果。返回结果为html模式，支持的标签包含 等，不要使用复杂的css样式。以下是用户提问：" }, { "content": "'.$message.'", "role": "user" } ], "thinking": {"type": "disabled"}, "stream":true }'; $arr=json_decode($json,true); $header=['Authorization: Bearer ark-xxx','Content-Type: application/json']; /** * 示例回调函数，用于处理接收到的数据并返回给客户端 * * @param string $data 接收到的数据片段 */ function handleResponseData($data) { // 在这里，你可以将数据写入输出缓冲区或直接发送给客户端-例如，使用 echo 或 SSE 发送数据 //sleep(3); echo $data; // 假设这里直接将数据发送给客户端 echo "\n"; //刷新输出缓冲区---把数据输出给浏览器 ob_flush(); flush(); } // 使用示例 $res=curlStreamRequest( $url, // 替换为实际的 API URL json_encode($arr), // 替换为实际的 POST 数据（如果需要） $header, // 替换为实际的请求头 //直接传递闭包函数 function($data) { handleResponseData($data); } //'handleResponseData' // 传递回调函数名作为字符串（如果回调函数在全局作用域中） ); /** * 流式请求--通过 cURL 发起流式请求并处理响应 * * @param string $url 请求的 URL * @param array $headers 请求头数组 * @param array|string|null $postData POST 数据 * @param callable $callback 处理响应数据的回调函数 * @throws Exception 如果回调函数不是有效的 Callable */ function curlStreamRequest(string $url,$postData = null, array $headers = [], callable $callback) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); // 不将响应保存为字符串，直接处理 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, …

使用phpword读取word中的文本、表格等内容
type: item
date: 2025-08-27T06:35:24+00:00
description: phpword读取word中的内容，调用deepseek后生成word下载，代码如下： <?php /** * Desc: * User: SenSen Wechat:1050575278 * Date: 2025-8-27 * Time: 11:02 */ namespace app\index\controller\service; use app\index\controller\Auth; use PhpOffice\PhpWord\IOFactory; use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\SimpleType\Jc; use sensen\services\HttpService; use sensen\services\JsonService; use sensen\services\upload\Upload; class QiSuZhuang extends Auth { /** * 诉状上传 */ public function upload() { $upload_type = $this->request->get('upload_type', sys_config('upload_type', 1)); try { $path = make_path('qisuzhuang', 2, true); $upload = new Upload((int)$upload_type, [ 'accessKey' => sys_config('accessKey'), 'secretKey' => sys_config('secretKey'), 'uploadUrl' => sys_config('uploadUrl'), 'storageName' => sys_config('storage_name'), 'storageRegion' => sys_config('storage_region'), ]); //验证类型 $res = $upload->to($path)->validate(['fileExt'=>'doc,docx', 'fileMime'=>['application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/msword']])->move('file'); if ($res === false) { return JsonService::fail('上传失败：' . $upload->getError()); } else { $fileInfo = $upload->getUploadInfo(); if ($fileInfo) { $file = '.'.$fileInfo['dir']; $phpWord = IOFactory::load($file); $sections = $phpWord->getSections(); $szContent = ''; foreach ($sections as $section) { $elements = $section->getElements(); // 获取当前section的所有元素 foreach ($elements as $element) { if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) { // 文本段落 foreach ($element->getElements() as $ele) { $szContent .= self::getTextNode($ele) . "\n"; } }else if ($element instanceof \PhpOffice\PhpWord\Element\Table) { foreach ($element->getRows() as $ele) { $szContent .= self::getTableNode($ele) . "\n"; } } } } $deepSeekContent = $this->getDeepSeekContent($szContent); debug_file($deepSeekContent, 'qisuzhuang'); $fileName = date('YmdHis'); $this->generateQszWord($deepSeekContent, $fileName); return JsonService::successful('上传成功', ['path'=>…

瀚高数据库安全版安装license
type: item
date: 2025-08-16T01:32:43+00:00
description: 瀚高数据库安全版 V4.5.8 以及后续版本，license 文件可分别管控瀚高安全版数据库、瀚高高可用集群(db_ha)，瀚高读写分离集群(hg_proxy)。上传 license将 license文件上传到服务器任意目录下检查 license使用 hg_lic -c -F $filepath 来对指定 $filepath license 文件进行检查操作，该操作将会输出对 license 文件的检查结果，如果检查出现问题，将会提示 license 文件异常。如果一切正常将会输出 license 信息，包括 license 编号、license 状态、用户信息、授权方式、授权用途、申请日期、产品名称、产品版本、产品有效期。chmod 0600 /opt/highgo/hgdb-see-4.5.8/etc/lic/hgdb.lic hg_lic -c -F /opt/highgo/hgdb-see-4.5.8/etc/lic/hgdb.lic加载license使用 hg_lic -l -P $HGDB_HOME -F $filepath 来对指定文件 $filepath 进行加载操作，若配置了 $HGDB_HOME 环境变量，-P 参数可以省略。该操作会对许可证文件进行检查，如果许可证文件异常，将会提示。如果许可证一切正常，该操作会将许可证文件加载到数据库中。

PostgreSQL中的archive_command详解
type: item
date: 2025-07-02T00:24:00+00:00
description: 什么是归档（Archiving）？归档是指将过时或不再频繁使用的数据迁移到存储介质的过程。 PostgreSQL支持通过归档机制保存事务日志（WAL），以便在需要时进行数据库的恢复。这是确保数据安全和完整性的重要措施。使用PostgreSQL的archive_command功能，你能够增强数据安全性，确保在发生故障时能够快速恢复。[...]

linux工具：json解析工具jq
type: item
date: 2025-07-01T02:32:12+00:00
description: jq 是一个轻量级、功能强大的 JSON 解析工具，专门用于 查询、格式化、修改 JSON 数据。安装yum install -y jq或直接下载二进制文件[...]

多因素认证（MFA）动态令牌PHP实现
type: item
date: 2025-06-19T12:04:00+00:00
description: 两步验证（Two-Factor Authentication，2FA）是一种增加账户安全性的方式，它要求用户提供两种不同类型的身份验证凭据才能访问服务或数据。这种核心思想建立在“知道”和“拥有”两种安全因素上：一种是用户知道的信息（如密码或PIN码），另一种是用户拥有的物理设备（如手机或安全令牌）。这样，即使攻击者窃取了用户的密码，没有物理设备也无法完成认证过程。多因素认证（MFA）的实现主要包含以下几个核心环节和技术要点，其流程设计兼顾安全性与用户体验：一、核心实现流程MFA 实现需平衡安全性与易用性，生物识别虽便捷但需考虑隐私合规（如 GDPR 生物数据特殊保护）。密钥初始化与绑定‌用户启用 MFA 时，系统生成唯一密钥（如 Base32 编码字符串），并通过加密 QR 码展示给用户扫描绑定认证器（如 Google Authenticator、Authy）。密钥安全存储于服务器端，并与用户账号关联。[...]

js变量间赋值，修改变量值后原变量随之改变问题
type: item
date: 2025-06-03T06:51:31+00:00
description: vue项目的开发过程中，需要多次用到一份基础数据，为减少代码量，提高一下复用效果，便用变量A来定义，在项目中需要用到时就用变量A进行赋值。在项目中调用时，新定义一个变量B，再将变量A赋值给变量B，即B=A；期望的效果是，赋值之后，A和B是两份数据，对变量B进行操作时不影响变量A。B=A的方式只是将B指向A的存储地址，实际上只有同一份数据，因此无论修改A还是B都是会互相影响的。解决方法：B = JSON.parse(JSON.stringify(A))

OA系统信创迁移流程
type: item
date: 2025-05-15T09:43:00+00:00
description: 需要对3000余套律所OA系统进行迁移，按天逐步迁移。基本流程如下：1.申请瀚高测试license兼容适配2.适配前对现有系统进行升级，提高后期迁移效率3.编写相关脚本[...]