# E2EE 更新日志
----
## 测试版说明
使用前**请备份原始代码**,新版(包括测试版)不保证功能完全向下兼容。
发现问题请及时**联系群管理员或作者**,反馈具体问题。如果能够复现,请提供复现代码,以便能够快速解决问题。
测试版仅用于**正式版发布前的测试,请不要在正式环境中使用**。
测试版通常编译为**调试模式**,不会对代码进行任何优化,**运行效率远低于正式版**。
----
测试版使用说明
- 将 e2ee.fne 拷贝到 “[易语言]/lib” 目录
- 备份要编辑的代码
- 打开易语言编辑测试
- 发现问题反馈给群管理或作者
----
## 3.5
### 测试版 240117
- **格式编码**
- URL编码/URL解码 加入了UTF-16/UTF-32的支持(感谢 太阳)。没错,又重构了一遍。
- **文本处理**
- 修复了 文本_批量替换_删除索引() 函数返回类型定义错误(感谢 心乱)
- 修复了 传入文本数组可能解析失败导致奔溃的问题(感谢 心乱、Game)
- [原因] 使用了易语言解析字节集数组的方法,未转换为文本数组导致类型匹配失败
- 文本处理.文本_批量替换_从数组
- 文本处理.文本_批量替换_创建索引_从数组
- **网站服务器**
- 修复了 配置项 [提交参数尺寸] 单位(使用新技术后默认尺寸为 Byte,现已修复为 KB)(感谢 心乱)
- 原版本不修改此参数时,默认提交参数内容最大值限制为 1.6K。现在参数最大值为 1.6M长度。如果需要更大参数可修改此配置项。
- **EDBC**
- 修复了 取回错误() 方法定义。方法也将直接返回错误文本。
- 加入了 “@” 符号转义支持。具体用法为不需要做为变量的“@”符号前加反斜杠“\@”。
- [例如] SELECT * FROM \@TB WHERE code = @code
- 只有 @code 为变量
- mysql
- 根据建议将识别JSON类型返回数据为文本型
- odbc
- 修复了 NULL 类型支持
- 修复了 参数化查询或更新时文本参数可能失败的问题(感谢 林夕)
- 重构了 错误处理等逻辑,错误原因更具体详细
- **网站客户端**
- 修复了多线程批量模式下,执行单请求访问每次延时1秒的问题(感谢 神话)
- **键值表**
- 恢复了 消息数据() 文本到日期时间型的支持
### 测试版 240105
- **WebSocket服务器**
- 加入了 随机端口启动功能。
- **使用方法**
- 初始化() 端口设置为 0
- 启动() 成功后使用 取端口() 获取当前端口
- **键值表/列表**
- 修复了 到JSON() 只返回“true”的问题(感谢 林夕)
- 到JSON()
- 响应.写出结果()
- 修复了 打开文本()/另存文件() 保存后的JSON可能转文本的问题(感谢 心乱)
- **网站服务器**
- 修复了 取配置文本() 返回空的问题(感谢 IQ↑诸※葛※瑜§☆☆)
- **图像处理**
- 修复了 保存数据() 时图像不是24位时保存PNG/JPG会失败的问题(感谢 心乱)
- 修复了 取原始数据() 时导出数据时序列化数值为文本导致的数据出错问题
### 测试版 240101
- *Release date 2023/12/31*
- **国际化**
- 加入了 国际化多语言支持。
- [**代码中使用**]
- 请求.取语言名/置语言名/取语言列表/取语言值
- [**模板中使用**]
- {{ 取语言名/置语言名/取语言列表/取语言值 }}
- 更多说明请查看E2EE的`多语言.md`文档
- **宽文本**
- 重构了 宽文本处理,彻底解决生成或转义导致的数据缺失等问题。
- **网站服务器**
- 优化了 上传功能。将上传读取数据部分转化为异步处理,避免线程阻塞节省线程和CPU资源。
- 加入了 重启() 方法。
- 修复了 用户续传约定范围为“[起始]-[结束]”时未定义[结束]导致范围验证失败的问题。
- 修复了 配置文件更改时重启可能失败的问题。
- 重构了 跨域处理功能
- 加入了 订阅视图函数限定请求方法。
- [**规则**] "[" [方法名] ("|" [方法名])* "]" [请求地址]
- [**使用方法**] 在订阅视图函数的地址参数最左边,加入中括号“[]”,内容为方法名(大写),多个方法用“|”分割
- [**示例**] 服务器.订阅视图函数(&视图, "[POST]/upload")
- [**示例**] 服务器.订阅视图函数(&视图, "[GET|POST]/upload")
- [**示例**] 服务器.订阅视图函数(&视图, "[OPTIONS]*")
- [**注意**] 当限定了请求方法时,其它请求方法将被当成404处理。
- [**注意**] 同一个地址允许多方法不同函数
- **键值表/列表**
- [**注意**]
- 升级了 序列化版本号。
- 3.4版本以前的支持库不能读取新生成的数据格式
- [**相关命令**]
- 到字节集()
- 到Base64()
- Memcache/Redis/RabbitMQ 等生成的键值表/列表导出的字节集数据
- 新的支持库能够兼容读取旧版数据。
- 无法正确读取3.3.7~3.3.9版本支持库生成的时间类型数据,读取后可能为空时间。
- JSON
- 修复了 双精度/数值长度超过64位时可能奔溃(感谢 这个嘛)。
- 修复了 对象类型 读取时意外字符导致的奔溃(感谢 Stately)。此功能会影响 JWT内容修改或JSON乱码导致的奔溃。
- 修复了 取时间() 返回的时间跟易语言相同时间对比可能为假的问题(感谢 8680088、XGSoft)。
- 修复了 错误使用键值表/列表相反的表达式时(譬如用键值表的表达式置值列表对象),可能导致原始对象被对象池错误回收后被再次分配导致同对象多存在的问题(感谢 荭枫)
- 修复了 排序() 方法指定排序方式为 按整数/小数排序 时,数据类型为 [日期时间型] 结果可能不准确的问题。
- **定时任务**
- 修复了 时间或月份变化时,可能任务无效或者每秒重复执行的问题(感谢 Testme)。
- **通用连接池**
- 修复了 初始化() 时,最小闲置数和最大连接数的验证逻辑,可能导致的连接数锁定32个的BUG(感谢 荭枫)。
- **WebSocket服务器**
- 加入了 手动指定SSL方法/版本(ssl_method)
- 修复了 绑定私有证书可能失败的问题
- 加入了 HTTP协议升级请求处理函数
- 加入了 取请求信息 方法。可以获取 URI、请求头、请求内容信息。
- 加入了 置响应头/追加响应头/置响应状态/置响应内容 方法。
- 加入了 置HTTP函数() 方法。可以指定HTTP处理函数。
- 加入了 自定义SSL协议配置项支持。
- [**使用方法**]
- 在 初始化_WSS() 方法中指定 SSL选项 参数。
- 加入了 PONG超时处理函数
- 加入了 置PONG超时() 方法,可以指定 PONG超时时间 和 PONG超时事件 参数。
- 修复了 SSL环境下无法收到 PONG 消息的问题。
- **WebSocket客户端**
- 修复了 使用代理连接时阻塞的问题。
- 修复了 连接有效的“wss://”时可能握手失败的问题
- 加入了 手动指定SSL方法/版本(ssl_method)
- 加入了 绑定私有证书功能
- 在初始化后调用 初始化_SSL()
- 加入了 HTTP处理方法
- 加入了 置请求内容() 方法。可以指定升级HTTP请求协议时提交的内容。
- 加入了 取响应信息() 方法。可以获取HTTP升级请求中携带的URI、原始响应头 和 响应内容。
- [**使用方法**]
- 在 初始化()/初始化_标识() 方法中指定 HTTP处理函数。
- 加入了 PONG超时处理函数
- [**使用方法**]
- 在 初始化()/初始化_标识() 方法中指定 PONG超时时间 和 PONG超时事件 参数。
- **高级查询器**
- 修复了 内存泄露的问题
- 修复了 当表达式为 SELECT 函数(xxx) AS $self 等场景时可能会漏掉函数执行的问题
- **加解密对象**
- 修复了 加密数据GCM 时[附加验证数据]只能为整数的问题(感谢 Ahfbwox)。
- **格式编码**
- 修复了 HEX解码时包含空格或其它内容无法准确解析的问题。
- **服务器辅助**
- 加入了 取图像文件尺寸() 方法。通过提取图像二进制数据,快速提取常用图像格式的宽高尺寸信息。支持 JPG/GIF/PNG/BMP 格式
- **模板**
- 加入了 新的“又如”语法:
```
{{?条件 == 1}}
我是条件1
{{!?条件 == 2}}
我是条件2
{{!否则}}
我是其它条件
{{/条件}}
```
- 否则也可以用 {{!}} 代替 {{!否则}}
- **数据验证器**
- 重构验证引擎全面支持宽文本
- 正则表达式全面兼容UTF-8
- 所有 “汉字”验证项支持所有语言内容(排除所有标点符号仅保留每种语言的文本部分)。验证集合自动采集于最新UNICODE码表。
- **图像处理**
- 重写了 保存数据() 方法。使用 png/jpg/bmp 原始算法导出数据到通用流。
- 加入了 取原始数据()/置原始数据() 方法。能够获取图像原始数据和从原始数据创建图像。
- **EDBC**
- 修复了 查询时有参数的情况下,空文本返回为 NULL 的问题(感谢 山川)。
- [**mysql**]
- 全类型映射修复(感谢 荭枫 等)。新的驱动能够准确匹配类型。
- **逻辑型**: BIT(1)
- **整数型**: TINYINT / SMALLINT / MEDIUMINT / INT / BIT / YEAR
- **长整数型**: BIGINT
- **双精度小数**: FLOAT / DOUBLE / DECIMAL
- **文本型**: CHAR / VARCHAR / TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT / TIME / ENUM / SET / JSON
- **字节集**: BINARY / VARBINARY / TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB / POINT / LINESTRING / POLYGON / GEOMETRY / MULTIPOINT / MULTILINESTRING / MULTIPOLYGON / GEOMETRYCOLLECTION / JSON
- **日期时间型**: DATE / DATETIME / TIMESTAMP
- **JSON处理**
- 加入了 JSON处理 对象。可用于快速解析和写出JSON。
- **示例**
- 优化 904 多语言
- 加入 905 WebSocket工具
- 加入 702 通用缓存对象示例/Memcache多线程端口测试.e
## 3.3.9
- **定时任务**
- 修复了 定时任务奔溃的问题
## 3.3.8
*Release date 2022/05/04*
- **定时任务**
- 修复了 取回数据 时转换时间失败的问题
- 修复了 修改系统时间小于原时间可能不会触发任务的问题
- 修复了 月份变化时可能任务失效的问题(感谢 Testme)
- **通用线程池**
- 修复了 取回数据 时转换时间失败的问题
## 3.3.7
*Release date 2022/04/27*
- 修复了易语言时间(OleDateTime)转换到E2EE时间可能损失精度的问题(感谢 银河世纪、这个嘛)
- 修复了获取时间为空值时会被设置为当前时间的问题
- **键值表/列表**
- 修复了 创建/赋值 为时间类型时可能失败的问题
- **高级查询器**
- 加入了以“[]”开头的变量寻址方式(感谢 织梦)。例如:WHERE ['my name'] = 'JimStone',从当前键值表获取主键“my name”对应的值
## 3.3.6
*Release date 2022/04/26*
- 趁着疫情封城还没被传染赶紧发新版
- **静态编译**
- 修复了在DLL中使用E2EE静态编译时,调用某些函数可能无法加载(E2EE)的问题(感谢 这个嘛)
- **网站客户端**
- 上传功能的“Content-Type”加入了使用内部MIME的支持
- **模板引擎**
- 修复了文件内容为空显示“未知错误”的问题
- 加入了文件不存在时的错误提示
## 3.3.5
*Release date 2022/04/20*
- **存取键值表/存取列表**
- 修复了 到Base64 无效的问题(感谢 Dcdc)
- 去除了 内存池线程分配机制用于适配自我管理线程数据的情况
- **文本处理**
- 修复了 文本_批量替换_从索引 可能失败的问题(感谢 这个嘛)
- 原索引指针内存被重置引起的
- **存取列表**
- 修复了类型转换函数 int/double/string/datetime(感谢 织梦)
- 修复了 排序() 中的文本排序(感谢 织梦)
- **高级查询器**
- 修复了类型转换函数 int/double/string/datetime。
- **通用连接池**
- 加入了 初始化() 方法。可以设定连接数等参数
- 修复了连接超过闲置数量时可能无法释放的问题(感谢 Lion)
- **ADODB数据库连接**
- 修复了 查询可能导致内存溢出的问题(感谢 Lion)
- **模板引擎**
- 修复了 文本变量减乘除处理结果永远为0的问题(感谢 Why何)
## 3.3.4
*Release date 2022/04/09*
- **通用线程池**
- 修复了 守护线程启动失败导致线程池始终最小线程数运行的情况(感谢 网络魔法)
- **存取查询器**
- 加入了 NULL 关键字支持。可以用于条件判断和数据返回等
- **网站客户端**
- 修复了多线程请求可能产生访问冲突的问题(感谢 织梦)
## 3.3.3
*Release date 2022/04/08*
- **共享参数**
- 加入了 取所有参数_到列表() 方法。可以取回所有参数到[存取列表]对象
- **网站服务器**
- 修复了 服务器关闭可能阻塞的问题(感谢 风声)
- 对象池释放无法继续回收对象导致阻塞
- **消息发布中心**
- 修复了 多窗口应用订阅标签消息时可能阻塞的问题(感谢 网络魔法)
## 3.3.2
*Release date 2022/04/08*
- 重构了静态库方案
- 针对 个人版 和 会员版 进行了区分
- 优化了支持库释放和加载流程
- 加载低版本支持库无法执行新增功能时会显示提示
- **网站服务器**
- 添加了 添加更新检测文件() 方法。
- 添加有效的文件(绝对)路径,网站服务器会监测文件状态,如果文件被修改过则服务器会自动重启。此方法非线程安全,请在“网站初始化”函数中使用
- 修复了 网站停止或重启时可能阻塞的问题(感谢 风声)
- **文本过滤器**
- 修复了被替换为空文本时无法替换成功的问题
- **模板编辑器**
- 修复了 请求.属性表() 中的变量在编辑器中缺失的问题
- 修复了 模板编辑器中执行SQL成功时无法返回结果的问题
- **存取列表**
- 修复了 从CSV载入2() 方法
- 修复了 指定列表头可能导致奔溃的问题
- 加入了 Linux版本换行符 “\n” 的支持(原版本仅支持“\r\n”)
- **高级查询器**
- 修复了 AND / OR 卡死的问题(感谢 银河世纪)
- 编译语句时使用了错误的索引
- **存取查询器**
- 为了更好的维护现有功能,内部整合升级到[高级查询器]
- 所有[存取查询器]功能保留,用法和原来一致(不用修改现有代码)
- 语法向[高级查询器]靠拢
## 3.3.1
*Release date 2022/02/28*
- **JWT对象**
- 修复了 接收者存在内容时可能奔溃的问题(感谢 银河世纪)
## 3.3.0
*Release date 2022/02/28*
- 加入了JWT支持
- **JWT对象**
- 支持全类型算法支持
- 支持签名验证和时间验证
- **JWT算法类型**
- 算法枚举类型
- **JWT解析结果**
- 解析和验签结果枚举类型
- 用于定位解析或验证失败原因
- **常量**
- “JWT算法名称_” 算法名称常量
- “JWT主键_” 默认主键名称常量
- **示例** 索引: 73
- JWT测试工具
- JWT示例
- **Redis**
- 执行结果为非文本时可自动转换为文本(感谢 大小鱼)
## 3.2.1
*Release date 2022/02/23*
- **网站客户端**
- 修复了 使用客户端后程序结束时有延迟或奔溃的问题(感谢 风声)。
- **EDBC**
- mysql.edbc
- 修复了 无参数执行时更新行数无效的问题。
- **EDBC/ADO**
- 修复了 保存对象无法回写ID的问题。
- **高级查询器**
- 修复了 组装结果为多级别键值表时可能奔溃的问题(感谢 小新)。
## 3.2.0
*Release date 2022/02/17*
- 重构了整个框架的时间处理机制。所有功能的时间不再受到 1970 年开始的时间限制
- 关联方法:
- **存取对象**
- 取时间
- 到JSON
- 到文本
- **ADO/EDBC**
- 相关时间赋值和取值方法
- **格式编码**
- 创建时间从文本
- 创建文本从时间
- 创建文本从时间2
- 加入 [共享函数] 功能(具体参考【902 JimStoneCMS】项目)。
- 新增 [共享作用域] 对象。用于在共享函数中获取函数相关参数。
- 参考 示例/902 JimStoneCMS
- 关于[共享函数]
- 实现多模块间的函数互相调用
- 能够在模板函数中直接调用
- 未来公开接口后可实现微服务或远程RPC
- 使用[共享函数]
- 定义
- 网站.订阅共享函数()
- 创建共享函数()。用于定义函数说明
- 创建共享参数()。用于定义函数参数
- 使用
- 创建返回结果()。在共享函数中用于创建返回结果
- 网站.取共享函数列表()。获取所有共享函数信息
- 请求.执行共享函数()/执行共享函数_列表参数()。执行共享函数
- 共享作用域.取回服务器对象()。在共享函数中取回相关服务器对象
- 共享作用域.取参数()/取所有参数()。在共享函数中获取函数参数
- 加入 [宽文本型] 对象。此类型支持已经加入到E2EE各个对象中
- 对象映射功能中请不要设置 宽文本型。具体等待后期的控制中心对象生成功能的支持
- 宽文本型 对象已经并入到E2EE大部分功能之中。新功能欢迎反馈问题。
- 加入 插件机制。
- 建立了 E2EE API 机制,可用于未来的多语言扩展。
- 加入了 brotli 压缩插件。
- 插件名称:e2ee.brotli.plugin.dll
- 插件使用方法:
- 拷贝插件到程序目录下即支持插件功能
- 修复了在易语言选择支持库可能导致奔溃的问题
- **模板**
- 重新加入了 快速SQL(QSQL) 功能的支持
- 加入了 多行代码支持。
- 修复了 [文件列表页] 等状态扩展页面的支持
- 修复了 变量名称识别问题。中文等多字节文本可准确识别长度
- 修复了 快速SQL变量中包含“@”从而可能导致包含文件失败的问题
- 修复了 “!”取反运算
- 修复了 “!=”运算
- 修复了 宽文本和文本 比较运算可能失败的问题
- 修复了 作用域缓存问题。避免同作用域产生值缓存导致多次循环产生相同结果
- **网站请求**
- 加入 取参数到变量() 方法。取回参数并转换到指定类型
- 加入 取回JSON() 方法。当“请求内容”类型为“JSON”时,取回JSON数据到变量
- **EDBC**
- 修复了 MySQL 驱动。
- 修复了保存时间无法保留时间部分的问题。
- **JSON**
- 修复了 小数输出可能丢失 0 和之后内容的问题(感谢 心乱)。
- **高级查询器**
- 修复了 文本比较可能无效的问题。
- **网站客户端**
- POST/PUT
- 加入了 [请求方法] 参数。可以手动指定提交方法
- **路径处理**
- 加入 取文件列表/取所有文件 方法的多级别后缀支持。
- 后缀:.a.b.c
## 3.1.0
*Release date 2022/01/24*
- 加入了全新的 [高级查询器](JsonQ2) 功能。
- 助力E2EE更快进入Linq时代
- 语法灵活功能强大更加适合未来的需求
- **高级查询器**
- 支持SQL标准的大部分单表语法(GROUP BY / ORDER BY / HAVING / MAX / MIN / SUM / AVG / BETWEEN / LIKE / IN)
- 编译查询效率高
- 基于E2EE数据特性开发可自由定义数据来源位置
- 丰富的函数支持
- 可以定制任意结构类型用做数据采集
- **存取列表**
- 加入了 高级查询() 功能。对应快速应用 高级查询器 功能。
## 3.0.7
*Release date 2022/01/18*
- **数据库**
- 重构了参数化SQL解析算法(感谢 银河世纪)。
- 修复了可能存在的动态参数无法正确解析,从而导致参数绑定失败的问题。
## 3.0.6
*Release date 2022/01/12*
- **模板**
- 修复了变量中包含数字可能导致渲染失败的问题(感谢 风声)
- **存取列表**
- 加入了倒序功能。具体使用在“排序()”方法中[排序方式]参数指定为“#存取排序方式_倒序”
- 加入了 置换添加键值表/置换添加列表 方法
- 相比 添加键值表/添加列表 功能效率更高,实现原理是直接内存替换。
- 调用成功后原键值表/列表内容会被清空
## 3.0.5
*Release date 2022/01/12*
- **过滤器**
- 修复了匹配时越界导致的奔溃问题(感谢 织梦)
## 3.0.4
*Release date 2022/01/11*
- **键值表/列表**
- 修复了无法正确解析UNICODE文本的问题(感谢 原子)
- **ADO/EDBC**
- 修复了动态参数解析的问题(感谢 银河世纪)
- 原版本符号连接“@”时无法识别为变量("UPDATE money=@money, name = @name",其中 @前是=,符号连接无法解析)。
## 3.0.3
*Release date 2021/12/29*
- **文本过滤器**
- 重构了文本过滤器
- 使用全新的索引匹配算法
- 内存占用极低。几十万上百万的长语句做为替换关键字也不会导致内存bomb
- 替换效率高效。实测单线程每秒替换25MB~30MB,CPU占用较低。
- 索引创建效率更高
- 加入了“创建按参数_从列表”方法。
- 可配合 存取列表 的 从文本分割 方法。能实现只占用少量内存且效率更高的,实现加载文件、分割 并且 创建替换索引的处理过程。
- 实测使用原始方法加载10万长词条文件(5MB),载入内存并分割文本就占用300MB+内存。而使用存取列表分割内存占用仅10MB。
## 3.0.2
*Release date 2021/12/27*
- 修复了模板编辑器预览路径无参数的问题
- 修复了EDBC驱动读取数据时可能时间转换失败的问题
- 加入了时间兼容模式。时间越界时将使用文本存储时间信息
- **模板引擎**
- 修复了模板引擎渲染或“||”操作时可能无法获取结果的问题(感谢 银河世纪)
- 加入了 包含文件() 函数。支持动态加载模板文件
## 3.0.0
*Release date 2021/12/25*
- 加入了EDBC通用数据库驱动引擎
- 加入了[通用连接池]对象。目前支持的对象:
- EDBC连接
- Redis同步客户端
- 加入了最新的模板引擎
- 全语法支持
- 函数支持更全
- 支持JSON定义
- 支持更加完善的自定义函数支持
- 注意:原判断语句“=”更改为赋值操作,相等判断请使用“==”(感谢 银河世纪)
## 2.9.0
- 重构了存取对象(列表/键值表)部分功能
- 文本相关方法
- 字节集赋值回收
- 加入了新的内存池技术。内存数据处理效率更高
- 修复了Redis相关的问题
## 2.8.16
*Release date 2021/07/02*
- 修复了会员系统验证算法(升级openssl导致)
- 小数文本加入了科学计数法支持
- 针对JSON和可用科学计数法描述的文本输入输出
- **网站响应**
- 修复了 写出成功/写出失败。使生成的JSON内容支持宽文本。
- **加解密对象**
- 恢复了 DSS1 算法支持(升级openssl导致)
- 修改了 新的 加/解密数据 方法名称为 加/解密数据2
- 恢复了 加/解密数据 方法为原始方法
- **存取键值表**
- 更换JSON引擎为新版引擎(感谢 诸葛瑜、织梦)
- 优化了 从网络载入() 方法 (感谢 小秋秋)
- 可以指定【请求方法】参数,如果此参数为空,为空或空文本,则根据是否指定【发送数据】参数,来决定使用“POST”或“GET”
- **存取列表**
- 更换JSON引擎为新版引擎
- 优化了 从网络载入() 方法 (感谢 小秋秋)
- 可以指定【请求方法】参数,如果此参数为空,为空或空文本,则根据是否指定【发送数据】参数,来决定使用“POST”或“GET”
- **网站客户端**
- 修复了 取响应头() 方法执行时, 同名称响应头(例如:Set-Cookie)只包含第一条数据的问题
- **定时任务**
- 重构了 定时预测算法。定时任务规则将更加严谨。
- 修复了 删除任务 方法可能导致奔溃的问题(感谢 银河世纪)
## 2.8.15.1
*Release date 2021/03/28*
- **加解密对象**
- 修复了 无填充 模式下解密的兼容性。
## 2.8.15
*Release date 2021/03/28*
- **网站客户端**
- 修复了自动跳转请求头数据处理过程中的一个溢出问题(感谢 银河世纪)。
- **存取键值表**
- 修复了 从XML载入() 载入CDATA失败的问题(感谢 风中泪)。
- **XML对象**
- 修复了 载入CDATA失败的问题(感谢 风中泪)。
- **WebSocket客户端**
- 加入了 SSL/TLS 混合协议的支持(感谢 逍遥一仙、中国语言)。
- **加解密对象**
- 修复了 无填充 模式下加密可能失败的问题(感谢 Aow)。
## 2.8.14
- 修复了会员证书处理。
[网站服务器]
- 加入了 // 开头的地址兼容性。
## 2.8.13
*Release date 2021/03/16*
- **网站服务器**
- **防火墙**
- 修复了 网站黑名单 在 keepalive 下无法准确验证访问次数的问题。
- **键值表**
- 修复了 从文件载入(, 3) CSV格式读取请求头可能乱码的问题(感谢 银河世纪)
- **WebSocket服务器**
- 修复了 PING/PONG 发送部分的支持(感谢 银河世纪)。
- **WebSocket客户端**
- 修复了 PING/PONG 发送部分的支持。
- **正则表达式**
- 加入了 UTF-8 表达式匹配的支持。
## 2.8.12
*Release date 2021/03/15*
- **网站服务器**
- 优化了 部分网络处理机制(IO服务)。
- 修复了 动态缓存设置被重写导致服务器自动重启的问题。
- **对象映射中心**
- 修复了 从JSON配置的问题。
- 由于未清空数据,导致多次加载JSON配置重复加载已有对象,运行时由于内存的多余信息,导致内存方法溢出奔溃。
## 2.8.11
*Release date 2021/03/14*
- **网站服务器**
- 修复了 未调用 初始化() 直接启动服务器时SSL可能失败的问题(感谢 1250509394)。
- **数据库**
- 修复了 取连接() 方法可能导致线程奔溃的问题(感谢 银河世纪)。
- 此方法可能导致本次连接阻塞不返回数据
- **格式编码**
- 修复了 创建文本() 重新加入了双飘号“··”的支持(感谢 神话、第三只眼)。
- **网站客户端**
- 修复了 取响应头文本() / 取响应状态文本() 方法。在不访问内容的情况下,直接调用可能获取无效内存。
- **定时任务**
- 添加了 删除() 方法。可以根据任务名称删除。
- 加入了 暂停() 方法。
- 加入了 继续() 方法。
- **线程池**
- 加入了 取任务名称() 方法。可以获取任务的名称(如果有绑定)。定时任务可以取回任务名称。
- 加入了 绑定函数名称() 方法。可以绑定函数默认名称。
- 方法 投递任务() 加入了【任务名称】参数。可以绑定任务名称。
## 2.8.10
*Release date 2021/03/12*
- 修复了会员版授权失败的问题。
- 加入对象 [CRC校验]
- **存取列表**
- 加入了 统计() 方法。相关函数:
- “COUNT”取行数
- “SUM”求和
- “AVG”取平均值
- “MAX”取最大值
- “MIN”取最小值
- **通用缓存对象**
- **Memcache**
- 修复了 分布式 模式下【调试模式】时初始化程序奔溃的问题。
- 优化了 计次加/计次减 失败时的处理。失败时返回 -1。
- **格式编码**
- 加入方法 创建CRC()
## 2.8.9
*Release date 2021/03/11*
- **网站服务器**
- 修复了“验证器.json”等JSON文件加载失败的问题(感谢 神话)
- **XML对象**
- 修复了部分XML加载失败的问题
- **存取键值表**
- 修复了 从XML载入() 部分文件加载失败的问题。
- **数据库**
- 加入了 TinyInt 等有符号短整数支持。
- **存取查询器**
- 加入了 宽文本 LIKE 等支持(感谢 修止符)。
- “宽文本”类型需要编码转换,存在编码转换的效率损耗,大量数据用宽文本类型字段查询时,建议改用 查找() 等方法。
## 2.8.8
*Release date 2021/03/07*
### 加解密对象重构后解密将严格按照padding填充方式等设置进行解密正确性校验。
- **存取键值表**
- 加入到 到表单数据() 方法(感谢 荭枫)。功能和 到表单文本 唯一的不同是返回数据类型为字节集。
- **加解密对象**
- 修复了加解密可能内存溢出的问题。
## 2.8.7
*Release date 2021/03/06*
- **XML对象**
- 修复了某些数据载入失败的问题(感谢 银河世纪)
- **存取键值表**
- 修复了某些数据载入失败的问题(感谢 银河世纪)
## 2.8.6
- 升级 OpenSSL 到 1.1.1i 版本(支持TLS1.3)
- **网站服务器**
- 修复了 同时上传文件时可能产生相同文件名的问题(感谢 林夕)
- **WebSocket服务器**
- 加入了 初始化() 的【线程数】参数。会员版可以设置处理任务的线程数量
- 加入了 WSS初始化() 的【加密套件】和【正向保密】参数。可以指定WSS时具体的加密套件
- 加入了 取所有请求头() 方法
- **ADODB数据库连接**
- 优化了 查询/查询头条/执行 等方法时是否执行存储过程的判断逻辑(感谢 网络魔法)。
- 当存在参数时,判断SQL语句中是否存在“@”关键字来决定是否执行(传参)存储过程。
- **加解密对象**
- 加入了 GCM 加密支持,支持AEAD验证。使用时需要指定AAD和Tag长度,请根据实际需求使用。
- 相关算法可使用“#算法_GCM_”开头的常量指定
- 加入方法 加密数据GCM()
- 加入方法 解密数据GCM()
- 加入了 CCM 加密支持,支持AEAD验证。使用时需要指定AAD和Tag长度,请根据实际需求使用。
- 相关算法可使用“#算法_CCM_”开头的常量指定
- 加入方法 加密数据CCM()
- 加入方法 解密数据CCM()
- 加入了步进式 哈希值 提取方法
- 加入方法 开始哈希() 指定哈希算法
- 加入方法 更新哈希() 加入要提取哈希的数据(可以连续多次执行)
- 加入方法 完成哈希() 获取哈希值结果
- 加入了步进式 HMAC值 获取方法
- 加入方法 开始HMAC() 指定哈希算法和密码
- 加入方法 更新HMAC() 加入要提取HMAC的数据(可以连续多次执行)
- 加入方法 完成HMAC() 获取HMAC结果
- 加入了 CMAC 支持。
- 加入方法 取CMAC值()
- 加入方法 开始CMAC()
- 加入方法 更新CMAC()
- 加入方法 完成CMAC()
- 加入了 填充类型 ISO7816_4 的支持。
- 加解密算法时【填充类型】使用 “#填充方式_ISO7816_4” 常量
- 加入了 国密 SM2/SM3/SM4 的支持。
- 加入了以下相关常量:
- #哈希算法_SM3
- #算法_SM4_ECB
- #算法_SM4_CBC
- #算法_SM4_OFB
- #算法_SM4_CFB
- #算法_SM4_CFB1
- #算法_SM4_CFB8
- #算法_SM4_CTR
- 加入了 SM2 相关方法:
- 创建SM2密钥对()
- 加密数据SM2()
- 解密数据SM2()
- 加入了方法 是否支持() 用于判断是否支持指定的算法或哈希算法。
## 2.8.5.4
*Release date 2020/12/23*
- 修复了双精度小数输出文本和JSON的问题
## 2.8.5
*Release date 2020/12/22*
- 重要更新:修复了易语言底层内存处理机制导致E2EE程序奔溃的问题(感谢 龙鹏林(小蜗牛))。
- 此问题影响范围很广,重要体现是程序线程安全处理正常,但调用一些E2EE内的文本或数据处理在长期运行时,偶尔可能会奔溃。
- 修复后E2EE程序只要用户做好必要的线程处理,除非是硬性BUG,否则不会奔溃。
- 加入了新的内存池技术。主要应用于键值表和列表多线程环境下相关的内存处理。
- 修复了GBK编码范围识别问题。将使用更规范的GBK编码表(感谢 龙鹏林(小蜗牛))。
- **网站服务器**
- 加入了配置项自动重载功能。所有关联配置项在网站运行时,如果配置内容产生变化将自动重新加载配置重启服务器。
- **网站请求**
- 优化了JSON类型参数解析。非键值表类型的数据,数据将统一被写入 请求.取所有参数() 下的“json”主键下。
- 修复了JSON类型参数接收为空的问题。
- **存取键值表**
- 加入了 从列表载入() 方法。可以将列表转换为键值表或者给列表创建索引。
- 优化了 到表单文本() 方法。加入了【是否URL编码】参数。可以指定是否对内容进行URL编码处理
- **存取键值表/存取列表**
- 优化了 到文本() 方法。去除了所有的拷贝操作,使用新的流对象,效率更高。
- 优化了 文本格式存储机制。文本数据将自动包含长度信息。
- 修复了 到字节集() 方法无法生成校验码和长度的问题。
- 修复了 从JSON载入/从XML载入() 等方法,在非GBK编码时,解析数据和原编码一致时可能解析失败的问题。
- **网站客户端**
- 加入了 全新的异步请求处理机制。
- 新的异步机制能确保客户端在和服务器传输数据过程中,大部分时候将不占用任何多余CPU。
- 提高了网站客户端的并发能力
- **图像处理**
- 优化了图像通道处理方式。所有图像都使用统一4通道参与图像处理运算。
- **格式文本**
- 优化了 创建文本() 方法。
- 加入了【名称索引】的支持(感谢 龙鹏林)
- 创建文本(“我叫 {name}”,创建键值表(“name”, “JimStone”))。生成内容为“我叫 JimStone”
- 加入了内容输出格式支持
- 创建文本(“金额:{1:D0.2}”, 1.211)。生成内容为 “金额 1.21”。其中“D0.2”指定为输出2位小数
- 加入了 创建文本从时间2() 方法。
- 支持跟Java中的“SimpleDateFormat”类一致的使用方法。
## 2.8.3
*Release date 2020/10/12*
- 加入了 图像处理 对象。
- 支持图像格式 BMP/JPG/PNG
- 支持常用图形图像处理算法
- 支持用指定字体绘制中文
- **编码处理**
- 加入了 文本编码别名常量。别名常量格式为 [编码]_编码。常用编码常量:
- GBK_编码
- UTF8_编码
- **网站服务器**
- 优化了 订阅视图函数 的标签顺序处理。视图函数执行前,将按照标签顺序执行全局函数。
- **数据库**
- 修复了 保存对象 方法时【是否自增】为 假 的关联表无法保存的问题(感谢 荭枫、JimStone)。
- **网站响应**
- 加入了 渲染消息页() 方法。可以快速输出一个弹窗页面,并且指定跳转还是返回等。
- **存取键值表**
- 加入了 合并到() 参数【合并模式】。
- 合并模式。[0] 全部合并 [1] 只合并不存在的主键 [2] 只合并存在的主键。默认: 0
- 加入了 从表单载入() 方法。可以从表单格式的文本载入键值表
- 修复了 到表单文本() 方法时宽文本转换失败的问题(感谢 荭枫)
- **存取列表**
- 修复了 取数量() 参数为数值时可能奔溃的问题(感谢 小蜗牛)。
- **网站客户端**
- 修复了 POST 提交【存取键值表】类型中存在宽文本时内容格式失败的问题(感谢 荭枫)
- **文本处理**
- 修复了 文本_匹配通配符 可能匹配不准确的问题。
- **Redis**
- 修复了 多线程不停创建对象连接服务器久了可能奔溃的问题(感谢 大小鱼)。
- **存取查询器**
- 修复了 取回结果() 未提供【错误原因】参数时可能导致的内存泄露问题。
- 修复了 上跟2.8加入的属性绑定功能可能导致的奔溃问题(感谢 银河世纪)。
- **远程服务**
- 修复了 加载服务信息未绑定类名称导致参数验证失败的问题。关联方法:
- 请求.验证参数
- 请求.验证所有参数
- **数据验证器**
- 修复了 从JSON载入失败的问题。
## 2.8.2
*Release date 2020/09/23*
- 易语言工具菜单加入了【打开目录】和【打开网站】功能。可以分别打开网站根目录和网站网址
- **服务器请求**
- 修复了 取请求地址 可能返回乱码的问题(自动转码)
- **网页内容解析器**
- 修复了取属性大小写敏感的问题
- **网站客户端**
- 处理了进度函数处理时可能因为跨线程导致阻塞的问题
- **文本过滤器**
- 优化了 创建按参数 方法的【替换模式】参数。参数为1时(按字符数替换)生成的替换结果中,中文字符算单个的字符(以前的中文字符算2个字符)。例如:以前“我们”的替换结果为“****”,新的模式下为“**”
- 修复了文本过滤器在新编码处理系统下的兼容性问题
## 2.8.1
* 2020/09/16
- 修复了文本编码常量可能为空的问题
- **对象基础属性**
- 加入了通用类型属性支持
- 加入了新的示例:011 内置对象基础属性
- 修复和加入所有基础对象属性方法的测试
- 相关方法
- 置对象属性
- 取对象属性
- 取对象文本属性
- 取标识
- 置标识
- **数据验证器**
- 加入了全新的URL解析验证算法
[2.8.0]
* 2020/09/05
- 加入了全GBK支持(感谢 银河世纪、大小鱼)。
- 整个E2EE内的所有算法默认都以GBK格式为主。
- 譬如在JSON解析等算法时支持“€”符号等
- 加入了全UTF-8支持。
- 修复了 跨域 功能。
- 加入了固定地址路径“*”的支持。
- 使用方法:网站.订阅视图函数(&视图_星, "*")
- **模板引擎**
- 修复了模板中某些时候无法输出变量的问题
- 依赖于GBK/UTF-8编码机制的完善
- **网站服务器**
- 加入了URL和URI解析标准支持。
- URL RFC2396: http://www.ietf.org/rfc/rfc2396.txt
- URI RFC2732: http://www.ietf.org/rfc/rfc2732.txt
[2.7.3]
[网站请求]
- 接收被URL编码过的内容参数时,如果参数本身编码为UTF8或UNICODE时,参数中包含“\u”已经不会丢失(感谢)。
[2.7.2.1]
[网站服务器]
- 修复了配置项“统计状态”无法起效的问题(感谢 rocket/ro)。原因是英文命名定义和实际调用的名称没有保持一致。
[网站客户端]
- 修复了POST请求后,重定向无法转换为“GET”的问题。CURL代码写死只有显示设置方法类型为“POST”时才会启用重定向更改方法的机制,E2EE使用统一方式设置的方法类型。
[Redis同步客户端]
- 修复了连接时超时时间为0导致无法连接成功的问题。之前使用的是异步连接函数,更改为同步连接函数。
[2.7.2] 2020/04/13
加入了 Redis 支持:
[Redis同步客户端]
支持常用的同步操作。发送请求后,立马返回执行结果。
[Redist异步客户端]
支持Redis异步操作。通常用于发布订阅时订阅消息使用。
[2.7.1.6] 2020/04/05
[网站服务器]
- 修复了上传文件时接收某些文件数据可能失败的问题(感谢 郑雪飞、银河世纪)。
[数据库]
- 优化了查询缓存机制。
* 只有查询结果存在数据时才会建立缓存。
* 原机制由于底层使用统一的“查询”方法,在执行查询无异常时无论返回结果有无数据,针对“查询”命令都表示成功,而针对“查询头条”则因为没有可以依赖的返回结果则执行失败。由于缓存是基于底层查询方法,所以可能会导致“查询头条”等方法沿用“查询”的缓存,空结果时只要存在缓存则永远返回假。
[2.7.1.5] 2020/03/27
[存取列表/存取键值表]
优化了对象池回收方式。
加入了 JSON载入时使用宽文本做为主键的功能。非宽文本主键也将自动转换为宽文本主键。相关方法(增加[是否宽文本主键]参数):
* 从JSON载入
* 置JSON值
加入了 到JSON时保持宽文本主键的功能。相关方法(增加[是否宽文本主键]参数):
* 到JSON
* 置JSON值
[2.7.1.3] 2020/03/21
[文本处理]
HTML关键字解码
加入了 转空格的支持(感谢 断翅的三叶草)。
创建文本/输出调试/输出调试文本
修复了 小数类型参数,生成文本时可能为 0 的问题(感谢 荭枫、云易飞扬)。
[网站服务器]
加入了 是否已授权 方法。可以用来判断是否以授权模式运行。
加入了 取运行状态 方法。可以获取服务器以下信息:线程数、请求数(秒)、上行数据量(秒)、下行数据量(秒)。
* 需要在网站配置中加入配置项“统计状态: 真”
修复了 “上下文_绑定*”相关的方法可能绑定失败导致奔溃的问题(感谢 银河世纪)。
[存取列表]
修复了 主键更名奔溃的问题(感谢 银河世纪)。
修复了 从网络载入 方法的[请求头]参数无效的问题(感谢 逍遥一仙)。
[存取键值表]
修复了 从网络载入 方法的[请求头]参数无效的问题(感谢 逍遥一仙)。
[网站客户端]
优化了 在执行POST请求后,自动重定向后时还是“POST”方法的问题(感谢 小迷糊)。
* POST提交后的所有重定向,都将以“GET”方法执行
[通用日志对象]
修复了 内容存在“%” 时可能奔溃的问题(感谢 银河世纪)。
修复了 销毁日志对象或关闭程序时可能导致奔溃的问题。
[WebSocket客户端]
加入了 使用代理服务器的功能。相关方法:
* 置代理服务器
* 是否启用代理
* 清空代理设置
加入了 PING/PONG 消息接收的支持。
[WebSocket服务器]
加入了 PING/PONG 消息接收的支持。
[2.7.1.2] 2020/03/19
[网站服务器]
修复了 Accept-Encoding不能准确识别 no-gzip 的问题(感谢 黑色代码)。
优化了 网址解析,允许“#”字符文件名支持。
[通用缓存对象]
[内存缓存]
修复了 计次加/计次减 可能出现不准确的问题(感谢 银河世纪、荭枫、大小鱼)。
[2.7.1.1] 2019/12/29
[网站服务器]
[重要] 修复了 连接对象的回收周期问题(感谢 思而不索)。
* 此问题在并发量波动较大、服务器配置反向代理服务器长期没有访问忽然恢复访问等环境下,可能导致返回失败的问题。
* 原因主要是服务端可能会长期保持旧的连接,而请求对象池的对象被重新分配连接时可能才会断开释放旧连接。
取消了 执行视图函数时的协程处理。
[数据库]
修复了 兼容旧版对象映射格式时,保存对象可能失败的问题。
[网站客户端]
修复了 取跳转头() 可能会缺失首个跳转响应头的问题(感谢 逍遥一仙)。
[路径处理]
加入了 多文件后缀的支持。在使用“路径_取文件列表/路径_取所有文件”方法时,可以使用“|”分割指定多后缀名,例如:exe|txt。也支持“,”和“;”做为分隔符,同时支持通配定义等,例如:*.txt;*.exe。注意 :只支持单级别后缀,多个“.”后缀时只认最后一个级别。
修复了 网址/磁盘/局域网 等类型的地址格式化结果可能不准确的问题,牵扯到所有“路径_”系列的方法(感谢 逍遥一仙)。
[2.7.1.0] 2019/12/17
[ADODB数据库连接]
修复了 取回错误() 时变量不为空可能导致奔溃的问题(感谢 -_-(QQ:2237**1810))。
[网站服务器]
修复了 超时检测机制可能导致的内存泄露问题(感谢大小鱼)。
[2.7.0.6] 2019/12/14
优化了所有 UTF-8 相关内容的处理,包括以下部分(感谢 兴国软件网):
* 解析URL
* 解析参数
* 解析Cookie
[2.7.0.5] 2019/12/13
[网站服务器]
优化了 解析URL 内容为UTF-8编码时解析参数位置可能不准确的问题(感谢 兴国软件网)。
[存取列表]
优化了 到XLS 方法加入了中文路径支持。
优化了 从CSV载入/从CSV载入2/打开文件 等和CSV加载有关的方法。修复了加载内容为UTF-8时主键或内容可能黏连的问题。修复了尾部连续2项内容为空时不会写入最后一列内容的问题(感谢 银河世纪)。
[2.7.0.3] 2019/12/11
[文本处理]
修复了 Base64编码 长度计算引起的4整数倍越界导致程序奔溃的问题(感谢 郑雪飞、织梦)。
[网站服务器]
修复了 提交数据为JSON时编码格式跟服务端不一致的情况下,解析JSON可能导致的内存泄露问题(感谢 大小鱼、思而不索)。
修复了 取回服务器对象() 函数可能会奔溃的问题。易语言回收周期导致(感谢 银河世纪)。
[网站请求]
修复了 取Session值_到类型() 时取[存取列表]类型内容,可能导致的奔溃问题(感谢 SsssWaiWai)。
修复了 数据库_开始查询缓存() 的第二项参数【超时时间】定义错误的问题(感谢 银河世纪)。
[2.7.0.2] 2019/11/20
加入了 数据库缓存技术。
[ADODB数据库连接池]
加入了 绑定缓存对象 方法。可以指定数据库连接池对应的缓存对象,不调用或者设置为空,则使用 网站服务器 绑定的缓存对象。
加入了 置缓存默认时间 方法。用于绑定查询数据时的默认缓存时间(单位:秒)。
[ADODB数据库连接]
加入了 开始查询缓存 方法。
* 绑定查询需要的缓存信息设定接下来查询使用缓存技术。本方法只对下一次 查询 有关方法有效。无论成功与否,在下次执行查询后将清除本设置。数据库查询成功,则数据会被写入到缓存中。调用本方法后使用 查询、查询头条、查询到自定义数组、查询头条到自定义 方法时,如果缓存中存在对应主键数据,则直接从缓存读取返回。如果缓存不存在则查询成功后,会自动写入到缓存中。您可以使用“取消查询缓存”方法取消本缓存设置。也可以使用“删除查询缓存”删除对应的缓存数据。您可以通过绑定的主键,直接通过“通用缓存对象.删除”在外部删除缓存数据。
加入了 开始删除缓存 方法。
* 绑定需要删除的缓存主键。本方法只在下一次 执行() 方法成功时才会执行删除缓存操作。无论成功与否,在下次调用 执行() 方法后都将清除本设置。
加入了 取消查询缓存 方法。
* 删除“开始查询缓存/开始删除缓存”方法绑定的缓存设置
加入了 删除查询缓存 方法。
* 删除被查询缓存的缓存数据。作用等同于绑定的“通用缓存对象.删除”方法。
[网站请求]
加入了 数据库缓存相关的上下文方法。相关方法:
* 请求.数据库_开始查询缓存
* 请求.数据库_开始删除缓存
* 请求.数据库_取消查询缓存
* 请求.数据库_删除查询缓存
使用示例:
ID:变量为用户ID
用户键值表:取回的用户信息
查询:(第二次调用时将不会访问数据库)
连接.开始查询缓存(创建文本(“用户:{1}”,ID)).查询头条(用户键值表,创建文本(“SELECT * FROM user WHERE user_id = {1}”, ID))
执行:(执行成功后将自动删除主键“用户:1”的缓存)
连接.开始删除缓存(创建文本(“用户:{1}”,ID)).执行(“UPDATE user SET user_name = @user_name WHERE user_id = @user_id”, 创建键值表(“user_id”, ID, “user_name”, 新用户名))
[存取列表]
优化并修复了 主键更名 方法。只有完整的复数参数才会做更名操作(感谢 诸※葛※瑜)。
* 之前版本如果第三个参数被强制补全为空的情况下,只更改一个主键名会失败
优化了 查找 方法。查找时将依赖于传入数据类型来做匹配(感谢 桐人)。
* 原版本的智能推导模式是判断是否为数值文本,如果为数值文本则按照数值进行匹配,如果超出数值范围溢出则可能会导致匹配到错误项。
[2.7.0.1] 2019/11/19
[网站服务器]
加入了 置小数精度() 方法。可以设置服务器小数相关的内容输出精度。其中包括以下方法相关的内容:
* 渲染
* 写出成功/写出失败/写出结果
优化了 上下文对象绑定处理。可在“初始化函数”外绑定上下文相关对象(连接池、对象映射、缓存)等,尊重用户在任意时刻主观或者被动绑定上下文对象(感谢 q)。
[存取对象]
JSON输出有关的方法都加入了 小数精度 参数:
* 对象.到JSON()
* 对象.取JSON值()
[2.7.0.0] 2019/11/17
[网站服务器]
加入了 订阅初始化完毕函数() 方法。订阅一个回调函数,此函数将在执行完“初始化函数”后被调用。通常“初始化完成函数”被回调时,意味着所有服务器相关的(包括上级以及下级模块)资源全部都初始化完毕。
加入了 订阅关闭函数() 方法。订阅一个回调函数,此函数将在网站/模块被关闭时执行。当网站启动失败时,如果网站/模块执行过“初始化函数”时,也会被触发。
加入了 显式绑定默认上下文对象功能,相关方法:
* 服务器.上下文_绑定数据库连接池(): 绑定默认的数据库连接池对象
* 服务器.上下文_绑定对象映射中心(): 绑定默认的对象映射中心对象
* 服务器.上下文_绑定缓存对象(): 绑定默认的缓存对象
加入了 共享对象 功能。共享对象相关方法都是线程安全的。共享对象可以用于在容器和模块(或者DLL)之间对象传递。支持所有的 复合对象 类型的对象变量共享。包括E2EE中的所有 数据类型。也支持任何其他支持库中的复合类型对象,不支持易语言基础数据类型。使用共享对象功能请注意做好线程安全处理。相关方法:
* 服务器.共享对象_置对象(): 共享对象
* 服务器.共享对象_取对象(): 取回共享对象
* 服务器.共享对象_删除对象(): 删除共享对象
* 服务器.共享对象_清空对象(): 清空所有共享对象和共享变量
* 服务器.共享对象_还原变量(): 还原共享变量原始内容。还原“取共享对象”时传递变量的原始值。此变量通常跟“取共享对象”方法配对使用
重命名 反馈模型 设置相关的方法名称。相关方法:
* 置反馈模型关键字: 反馈模型_置关键字
* 置反馈模型默认值: 反馈模型_置默认值
[网站请求]
修复了 GET/POST参数中最后一个参数的“=”后为空时,可能(产生异常被内部捕获)不触发视图函数的问题(感谢 SsssWaiWai)。
* 新解析算法尾部验证的问题
同步 共享对象 功能。功能和服务器对象中的“共享对象”方法一致。相关方法:
* 请求.共享对象_置对象()
* 请求.共享对象_取对象()
* 请求.共享对象_删除对象()
* 请求.共享对象_清空对象()
* 请求.共享对象_还原变量()
加入了 缓存对象 上下文。相关方法:
* 请求.缓存_取字节集
* 请求.缓存_取文本
* 请求.缓存_置字节集
* 请求.缓存_置文本
* 请求.缓存_批量取字节集
* 请求.缓存_批量取文本
* 请求.缓存_是否存在
* 请求.缓存_删除
* 请求.缓存_清空
* 请求.缓存_计次加
* 请求.缓存_计次减
* 请求.缓存_置过期时间
* 请求.缓存_置键值表
* 请求.缓存_取键值表
* 请求.缓存_置列表
* 请求.缓存_取列表
[存取列表]
修复了 查询() 方法中 LIKE 等指令无法匹配的问题。
修复了 到JSON() 方法中包含字节集时可能会丢失引号后的内容的问题。
[存取键值表]
修复了 到JSON() 方法中包含字节集时可能会丢失引号后的内容的问题。
[存取查询器]
修复了 条件() 中的 LIKE 等指令无法匹配的问题(感谢 荭枫、银河世纪、KalinTsao等)。
* 扩展语法对语法树处理流程做了处理。语法树节点后编译时,文本变量重置过文本内容为原始节点内容,带入了“%”导致无法匹配。由于LIKE等语法节点预处理过,这里针对预处理过的文本节点树增加了赋值状态检测,避免预处理内容被覆写。
[2.6.1.3] 2019/11/15
[存取列表]
加入了 查找() 方法。查找指定值在列表中的位置。
加入了 取交集() 方法。获取和指定列表的交集结果。
加入了 取差集() 方法。获取和指定列表的差集结果。
加入了 取并集() 方法。获取和指定列表的并集结果。
[RAS加解密]
优化了 创建密钥对() 方法。当[公钥变量]或[私钥变量]传入内容长度为256时,则作为公/私钥HEX文本载入对应的秘钥。
[2.6.1.2] 2019/11/14
[网站]
修复了 写常规日志/写错误日志 中包含转义符“%xx”时可能奔溃的问题(感谢 醉太极)。
[网站请求]
修复了GET/POST等类型请求的参数包含“=”等未进行转义字符的情况下可能解析不到准确的对应参数的问题(感谢 醉太极)。
* 请求本身不符合HTTP约定。
[2.6.1.1] 2019/11/13
[存取键值表]
优化了 子列表添加() 方法。当查询到的对象类型不为存取列表时,则自动将对象转换为存取列表。如果表达式指向的列表不存在,则自动创建存取列表(感谢 JimStone、兴国软件网)。
修复了 子列表删除() 方法。行为保持和存取列表删除一致。
* 之前的索引从1开始可能会奔溃
[数据库]
修复了 查询到自定义数组 在对象映射中心使用JSON类型的配置时,可能会产生奔溃的问题(感谢 SsssWaiWai)。
* 此原因是由于JSON类型的加载机制中没有计算对象尺寸导致
[2.6.1.0] 2019/11/12
[网站请求]
优化了 置Session值() 方法。支持所有易语言基础参数和存取键值表、列表。
加入了 取Session值_到类型() 方法。
[存取对象]
修复了 对象池极值可能导致的内存不降问题。
[2.6.0.3] 2019/11/06
[网站请求]
加入了 取整数参数() 方法。将参数取回为长整数型。
加入了 取小数参数() 方法。将参数取回为双精度小数型。
修复了 验证参数() / 验证所有参数() 方法。此方法之前的版本中,如果路径中包含变量可能不会跳过视图表单验证器(感谢 SsssWaiWai)。
[模板渲染器]
重构了 模板更新检测算法。新的算法检测更加科学快捷。
[数据库]
修复了 非自增ID的关联表在使用“保存对象”方法时可能返回[假]的问题。
[验证器]
修复了 非自动生成(通过工具等情况)的验证器配置加载时,“验证项名称”和索引中的验证项名称不匹配可能导致规则索引加载不准确的问题。
[对象映射]
修复了 映射对象无法正确匹配验证规则的问题。
[模板编辑器]
加入了 强制保存方法。当打开模板文件不存在时,可自动创建模板目录和文件。
[2.6.0.2] 2019/10/22
[网站客户端]
修复了新客户端对象可能复用之前的Cookie/Session的问题(感谢 小迷糊)。
加入了 重置全部() 方法。可重置当前对象的所有状态(包括session/cookie等)。
优化了 请求方法中的[自定义请求头]参数处理。[自定义请求头]的参数优先级高于全局请求头,如果同名则优先使用此参数中的请求头。注意此功能大小写敏感。
[2.6.0.1]
[数据库]
加入了 对象映射验证器 支持。可直接对字段绑定验证规则。
* 此功能需要配合最新的[E2EE控制中心]来配置验证规则([功能] > [验证器] > [对象映射验证器])。
* 在保存对象到数据库时,将自动通过配置的验证规则来验证对象数据,验证失败时返回详细的验证错误原因。
保存对象/保存对象_键值表() 方法加入了[错误原因]参数(请求.数据库_保存对象/数据库_保存对象_键值表()方法都做了同步)。可用于接收[对象映射验证器]的验证结果。
[WebSocket客户端]
修复了 阻塞式连接失败时可能产生资源泄露的问题。
[2.6.0.0] 2019/10/21
加入了【标签对】概念。在“服务器.订阅视图函数()”方法时,可以使用“标签对()”函数创建结对的【标签对】做为标签使用。
注意:
1.【标签对】的格式为文本“[主键]:[值]”(不包括中括号)。所以所有符合此特征的文本做为视图/全局函数的标签时,都将默认为【标签对】。例如您设置视图函数的标签为文本“导航:管理”,那么他会自动被当成是【标签对】类型的标签。
2. 添加【标签对】类型的标签时,将自动生成名称为标签对[主键]的标签。例如添加【标签对】标签“导航:管理”,那么系统会自动生成标签“导航”到对应的视图/全局函数中。
3.【标签对】是有序的,顺序跟订阅时的参数位置有关。在使用同一个【标签对】的[主键]添加多个标签时,在处理函数中通过“请求.取标签对值列表”方法返回的列表,是按照订阅时的先后顺序排序的。
[网站服务器]
订阅视图函数和全局函数时,[标签]参数加入了[存取列表]类型的支持。可使用存取列表传入函数的“标签”属性。并且支持[文本型]和[存取列表]多类型参数同时存在时,并行添加到“标签”属性中。相关方法:
* 订阅视图函数
* 订阅全局函数
* 订阅后置全局函数
[对象工厂]
加入了 标签对() 函数。用于快速组装【标签对】文本,可用于“请求.订阅视图函数”的【标签】参数。
[网站请求]
加入了【标签对】相关处理方法。以下是方法列表。
* 取标签对值:通过[主键]获取标签对对应的[值]文本。
* 取标签对值列表:通过[主键]获取标签对对应的[值]列表。
* 是否存在标签对:通过[主键]判断是否存在标签对。
[网站响应]
优化了 二级以上网页模板嵌套时的检测更新机制。当多级别模板嵌套重新检测更新时,不会重新加载模板。
* 原来的机制在超过2秒并且嵌套级别超过2层后,会重新加载所有相关模板。
[数据库]
修复了 保存对象/保存对象_键值表() 方法。
* 影响范围:2.5.7.5 ~ 2.5.8.0 版本。
* 由于对象映射加入了[自增ID]属性,重新处理过预处理SQL,当对象存在一对一映射且对象的“自增ID”属性都为[真]时,生成的预处理插入SQL会存在重复插入ID字段,从而导致出现保存失败的情况。
===================================================================================
【标签对】使用说明:
订阅视图函数(&管理,,, 标签对("导航", "首页"), 标签对("导航", "管理"))
在 管理() 视图函数中,可以使用:
请求.取标签对值列表("导航") >> ["首页", "管理"]。
请求.取标签对值("导航") >> "首页"
请求.是否存在标签对("导航") >> 真
您可以直接在全局函数中订阅“导航”,即可拦截所有主键为“导航”的标签对请求。
===================================================================================
[2.5.8.0] 2019/10/14
[存取对象]
修复了 到Base64() 方法返回空文本的问题(感谢 小渣渣)。
[存取列表]
修复了 从文本分割() 在静态编译环境下,数值类型转换时可能奔溃的问题(感谢 哈喽)。
[2.5.7.5] 2019/10/11
优化了 模板编辑器 数据中心的检测机制。编辑模式时启动更快。
[对象映射中心]
格式化名称()方法 加入了[是否修复属性]参数。可以将字段的类型强制转换为配置设置的类型,主键不存在时强制赋值为默认值。
[数据库]
加入了 [自增ID] 处理。默认所有对象都是自增ID。此设置需要配合最新版本的[控制中心],对映射对象配置是否为[自增]属性。
[数据库连接]
优化了 保存对象_键值表() 方法。当键值表中数据类型或主键不存在时,将自动转换类型或填充为默认值,保证行为和 保存对象() 方法完全一致。
保存对象/保存对象_键值表()方法 加入了[保存模式]参数。可以指定保存操作的类型自动处理、修改和添加。
加入了 是否在事务中() 方法。返回当前连接是否正在执行事务过程中。
加入了 是否锁定连接() 方法。返回当前连接是否被锁定。
优化了 取分页数据到模板格式() 方法。当返回数据为空时也会返回分页信息。
[网站请求]
“数据库_”系列方法同步为上方[数据库]所有相关处理。
[网站响应]
修复了 模板过滤器 格式化时间() 方法。当时间无效或者为1970-01-01的阈值时也不会奔溃。
[网站服务器]
加入了 置反馈模型关键字() 方法。可以重新定义调用“响应.写出成功/写出失败/写出结果”方法写出结果时,结果对应的主键名称。
[2.5.7.3]
易语言插件模式下加入了[开启/关闭 视图函数生成]菜单。
模板编辑器初始化时检测初始化程序是否存在。
* 不存在时不会弹出“文件不存在”信息框
[存取列表]
加入了 从CSV载入2() 方法。对CSV格式兼容的更好。
[路径处理]
修复了 路径_取运行目录() 函数可能会被 通用对话框 重新定向的问题(感谢 银河世纪)。
[对象工厂]
加入了 取主键路径() 方法,可以按照级别自动生成 键值表/列表 寻址路径。
修复了 创建验证码文本() 函数可能产生重复的问题。
优化了 创建验证码文本() 函数加入了中文等多字节文本的支持。
[2.5.7.2]
[数据库]
修复了来源类型为GBK但目标数据类型为UNICODE时可能转换内容为空文本的问题。
[网站服务器]
修复了 清空SESSION时,特殊使用场景下清空执行了跳转操作时,可能session沿用之前的内容的问题(感谢 丑人多作怪)。
[2.5.7] 2019/09/21
[网站服务器]
修复了 Cookie中包含多项未进行URL编码的UTF-8、GBK、字节集等多字节编码时可能导致解析失败的问题。
* 之前版本可能会因为此问题,间接导致无法正确处理SESSION,丢失用户登录信息等情况。
修复了 OPTIONS请求处理时路径长度为1或者路径为“*”时可能导致奔溃的问题(感谢 思而不索)。
* 当存在黑客恶意扫描时可能会触发此问题导致服务器出现问题
优化了 浏览器缓存处理机制。在页面返回304等环境下也能正确响应浏览器缓存设置了。
[网站响应]
加入了 发送文件 方法时的[是否缓存]属性。如果设置为[假],则本次发送的文件响应协议头中,不包含和浏览器缓存相关的响应头(禁用浏览器缓存)。
[数据验证器]
修复了 部分验证规则无法准确匹配的问题(UNICODE改造导致)。
[2.5.6.2]
优化了 静态编译时的E2EE库加载流程。程序启动效率有明显提升,占用内存更小。加载顺序:
* 检测【运行目录】下是否存在“E2EECore.xxx.dll/E2EE.dll/E2EE.fne”文件,并尝试加载。
* 检测【临时目录】下是否存在对应版本的E2EE支持库文件,并尝试加载。
* 释放支持库到【临时目录】下并执行加载操作。
* 释放支持库到【运行目录】下并执行加载操作。
* 全部失败则弹出对应的错误提示和解决方法信息,同时终止执行。
修复了E2EE的GZip压缩可能在Java环境下解压失败的问题(感谢 银河世纪)。
[消息发布中心]
修复了 多线程环境下的问题。
修复了 键值表等类型的支持(感谢 银河世纪)。
[2.5.6.1]
加入了 输出调试的一组函数:
* 输出调试: 输出调试文本内容,功能基本和“调试输出”一致
* 输出调试格式: 输出调试文本内容,调试的输出格式和使用方法跟“创建文本”完全一致
* 配置输出调试: 配置 输出调试() 函数的输出格式
[2.5.6]
修复了 URL解码 时中文或者UTF-8中的内容为%中文等情况可能失败的问题(感谢 KKO、思而不索、银河世纪)。
修复了 内核部分URL解码部分内存处理函数版本不一致导致的奔溃问题(感谢 KKO、思而不索、银河世纪)。
修复了 XSS脚本过滤 时可能产生的替换位置不对的问题(感谢 丑人多作怪)。
修复了 URL编码_到编码 参数接收不对的问题(感谢 银河世纪)。
[WebSocket]
加入了 设置包最大尺寸的方法。
* 初始化前调用 服务器/客户端.置包尺寸 设置单包的最大尺寸。
关闭了 控制台模式时 frame payload 时显示所有数据内容的日志(KalinTsao)。
[2.5.5]
修复了 取宽文本长度() 函数的问题。
* [宽文本双字节]参数无效的问题。
* 特殊数据时可能文本判断越界的问题。
[存取队列]
修复了 到JSON() 文本判断越界导致程序崩溃的潜在问题。
[存取键值表]
修复了 到JSON() 文本判断越界导致程序崩溃的潜在问题。
[服务器响应]
修复了 网站为“UTF-8”编码时,渲染模板可能需要加空格才能显示的问题。
[通用缓存对象]
修复了 计次加/计次减 在持久化后数据载入可能无效的问题。
[网站客户端]
增强了 置进度函数 方法。在使用时加入了[增强进度函数]参数。在下载时可以接收并使用“标识”参数来区分不同的网站客户端对象。
加入了 置标识/取标识 方法。标识在产生时是唯一的。[标识]是用来区分不同的客户端时使用的,可以用于下载回调函数等场合。
加入了 取消请求/是否已取消 方法。当执行下载文件或者设置了进度回调函数时,可以撤销当前请求。
[数据库连接]
优化了 异常处理 时的连接回收机制。在大部分场景下遇到异常时,连接将被自动回收。
优化了 连接异常日志信息。错误时会输出更详细的错误信息日志。
[2.5.3] 2019-07-23
修复了 创建文本_预编译 的一个BUG。
[网站服务器]
加入了 CORS 跨域功能的支持。使用时可以用“跨域请求”开头的配置项指定跨域设置。
加入了 [OPTIONS] 类型请求的支持。
加入了 [HEAD] 类型请求的支持。
修复了 中文服务器名称可能导致无法访问的问题(感谢 银河世纪)。
修复了 文本编码转换某些场景下可能失败的问题(感谢 大小鱼)。
[网站客户端]
修复了 执行PUT数据 和 执行PUT文件 方法(感谢 银河世纪)。
* 使用时请根据需求设置“Content-Type”请求头。
[存取队列]
修复了 多个线程超时阻塞取值时可能超时无效的问题(感谢 红叶叶)。
[存取键值表]
修复了 JSON功能生成时可能无法输出名称的问题。
[2.5.2] 2019-07-18
[网站服务器]
修复了 新的URL编码函数的一个溢出问题。
加入了 KeepAlive 的配置项“保持连接时间”。
* 单位为 秒。
* 为 0 则禁用 KeepAlive 功能。
[存取键值表/存取列表]
加入了 打包对象/解包对象 方法。
* 打包对象() 方法可以将键值表和列表对象直接收入内存(当前对象会自动变成空对象)。
* 解包对象() 方法可以从打包产生的对象地址载入对象到当前对象中。
[存取列表]
修复了 查询 方法中文本比较条件时可能失败的问题(感谢 炫狐科技 陈兴华)。
[存取查询器]
修复了 文本比较条件时可能失败的问题(感谢 炫狐科技 陈兴华)。例如:name = '文本'
[网站客户端]
优化了 清空请求头 方法。使用后将清除所有公共请求头部(包括“User-Agent”)。
去除了 订阅后置xx 等两个多余方法。
[2.5.1] 2019-07-17
加入了 Base64解码 函数中的[是否去除空白]参数。
[网站服务器]
修复了 非Multipart模式的POST数据接收尺寸超过64K可能失败的问题。
[服务器响应]
修复了 置SessionID在某些特殊环境下使用时可能Session会被清空的问题(感谢 银河世纪)。
[网站客户端]
优化了 超时处理机制。在多线程环境使用代理等情况下,也能很好的完成超时处理(感谢 龙鹏林)。
[RAS加解密/加解密对象]
修复了 所有传入Base64的参数中包含空白文本(空白、换行或制表符)时可能导致编码/解码失败的情况(感谢 KKO)。
* Base64 实际内容不应该包含空格换行等,但实际使用为了好看,很多时候可能会有换行等符号,所以加入了自动处理。
[文本过滤器]
修复了 创建按参数 的文本数组参数内容为空时会奔溃的问题(感谢 银河世纪)。
优化了 文本过滤器效率,使用了新的流技术。
[2.5.0] 2019-07-13
重构了 网站流程处理机制。
重构了 编码引擎的转换机制,使用了新的流技术。
加入了 新的文本长度统计“strlen”替代函数,效率比原版高很多(感谢 被封七号)。
[存取键值表/存取列表]
修复了 核心存储对象设置文本可能导致多线程奔溃的问题(感谢 龙鹏林)。此问题主要由于C++语法的歧义引起。
[网站服务器]
修复了 模块化运行时的渲染路径错误的问题。
修复了 304状态页模板恢复为空。
加入了 请求/响应 对象池(请求和响应对象大部分场景下将自动复用)。
[网站客户端]
加入了 客户端对象池(大部分时候复用)。
优化了 超时处理机制。使用了CURL内置的select超时机制,比外置超时技术更稳定。。
修复了 上个版本因为流对象可能导致的多线程冲突问题(感谢 龙鹏林)。
[2.3.5] 2019-07-09
修复了上个版本中核心流对象的一个尺寸选择的问题。
修复了 Base64 编码可能包含多余字符的问题。
优化了 Base64 编码函数。要编码的数据允许文本和字节集。
优化了 编码系统的效率。编码系统大量使用了新的流技术。
键值表和列表对象重新启用了内存池,主要用于内部对象中的文本和字节集对象的处理。
[网站服务器]
修复了 取参数 某些时候无法获取参数内容的问题(感谢 荭枫)。
加入了 置日志回调 方法。可以接收服务器内部的日志内容,控制日志是否继续(感谢 大小鱼)。
重构了 HTTP协议处理流程。
加入了以下配置项:
* [逻辑型] 日志-启用: log-enabled
* [逻辑型] 日志-网络日志-开启: log-network-enable
* [整数型] 提交参数尺寸: request-param-maxsize。单位为 KB。
[网站请求]
优化了 内部请求头处理效率。
加入了 取原始请求头 方法。可以获取原始的请求头文本。
[消息发布中心]
修复了 内存泄露的问题(感谢 银河世纪、凌动运维)。
[存取列表]
优化了 到CSV 方法。允许用户指定和数据表头不同的输出表头,用于一些输出时名称需要昵称的场景。
加入了 到XLS 方法。可以直接通过二进制处理的方式生成Excel文件,允许指定部分自定义格式。使用方法跟 到CSV基本一致。
修复了 从文本分割 时特殊场景下可能内存越界导致的奔溃问题(感谢 银河世纪)。
[2.3.3] 2019-07-04
加入了 URL编码_从编码/URL解码_到编码 函数。可以指定URL编解码的来源和目标编码。
优化了 Base64编码/解码 处理。重写了新的算法,Base64编码效率提高了34倍,解码效率提高了40倍。
优化了 文本/字节集 等做为返回值时的处理。新的处理针对申请内存失败等情况加入了异常捕获,避免内存申请导致的程序奔溃的问题(对应的返回结果可能会为空文本/字节集/逻辑[假])。
重构了 流对象 使用新的无锁队列技术实现了内部内存池,大大提高了文本和数据处理等相关效率,比STL标准库中的流对象效率高3倍。
用到新技术的相关方法效率至少提升了1倍以上,主要有以下函数/方法:
* HTML关键字编码/HTML关键字解码
* 创建文本()
* 存取键值表.到JSON()
* 存取键值表.到字节集()
* 存取键值表.到Base64()
* 存取列表.到JSON()
* 存取列表.到字节集()
* 存取列表.到Base64()
* 存取列表.到CSV()
[网站服务器]
修复了接收JSON格式数据时,提交编码和服务器编码不一致产生的解析JSON参数长度可能不准确的问题(感谢 大小鱼)。
修复了 SSL启动时 [签名文件]参数为空时无法正常启动的问题。
优化了 SSL启动时 的启动流程和增强了相关提示信息。
[网站请求]
修复了“数据库_”开头方法在服务器未绑定连接池时奔溃的问题(感谢 大小鱼)。
修复了模板渲染时[值]为负数无法判断的问题(感谢 SsssWaiWai)。
加入了 取所有请求头_到参数 方法。
[数据验证器]
加入了手机号19x开头的号码段支持(感谢 大小鱼)。
[存取列表]
修复了 取文本() 为小数时某些情况下可能会阻塞线程的问题。
加入了 置JSON值/取JSON置 方法。可以直接设置列表项内容为从JSON文本解析的结果,或直接获取列表项到JSON文本。
加入了 到数组 / 从数组载入 方法。可以将列表转换为易语言数组,将数组转换为列表。
加入了 到表格文本 方法。可指定行列分隔符来生成文本。
加入了 查询 方法。可以直接使用【存取查询器】表达式直接查询当前列表并返回结果或替换搜索结果到当前列表。
加入了 置键值表/置列表 的【是否交换内容】参数。
* 可以直接将内容中对应结果和当前指定的变量交互数据内容从而减少内存复制产生的效率问题。
* 如果指定位置的内容和当前要设置对象的类型不一致或不存在。则会先创建对应类型的对象之后执行内容交换操作,所以通常只要索引有效结果一定成功。
加入了 从网络载入 的扩展参数,包括 超时时间、提交参数(POST) 和 自定义请求头。
优化了 从文本分割 方法。
* 加入了【主键名称】参数。可以指定列名称。
* 加入了【内容包含表头】参数。可以指定内容中的第一行是否为表头文本。
[存取键值表]
修复了 取文本() 为小数时某些情况下可能会阻塞线程的问题。
加入了 置键值表/置列表 的【是否交换内容】参数。
* 可以直接将内容中对应结果和当前指定的变量交互数据内容从而减少内存复制产生的效率问题。
* 如果指定位置的内容和当前要设置对象的类型不一致或不存在。则会先创建对应类型的对象之后执行内容交换操作,所以通常只要索引有效结果一定成功。
加入了 置JSON值/取JSON置 方法。可以直接设置键值表的值内容为从JSON文本解析的结果,或直接获取值内容到JSON文本。
加入了 从网络载入 的扩展参数,包括 超时时间、提交参数(POST) 和 自定义请求头。
[网页内容解析器]
加入了 迭代器模式。使用方法(取值相关方法【索引】属性留空即可):
解析器.选择("tr")
判断循环首(解析器.到下一个())
解析器.取文本()
解析器.取内部文本()
判断循环尾()
加入了 选择栈模式。使用方法:
解析器.选择("tr")
如果 (解析器.选择下级(1, "td") <> -1)
解析器.取文本(1) ' // 获取第一个tr下的第一个td的内容
解析器.到上级文本() ' // 获取完成后返回到上个级别的选择状态
如果结束()
加入了 取数量/首记录前/到下一条() 方法。
[WebSocket客户端]
加入了 客户端标识功能,在多客户端公用事件时,可使用事件子程序的[标识]参数来区分不同的客户端。
加入了 初始化_标识 方法。初始化当前客户端并绑定带有“标识”参数的事件。本方法跟“初始化”方法属于互斥关系,使用时根据具体使用场景决定使用本方法还是“初始化”方法。当您需要多个客户端绑定相同事件时,调用本方法绑定的事件可以便于您区分不同的客户端对象。在使用前您可以通过“取标识”方法获取对象的唯一ID(每个客户端创建时会有唯一的ID),也可以通过“置标识”绑定您指定的标识值。
加入了 取标识/置标识 方法。可以获取和绑定当前客户端进行“标识”信息。
加入了 取回消息文本_宽文本 方法。可以获取消息文本到“宽文本”。可以通过支持库“文本处理”类别下的“宽文本”相关的函数,或者 存取键值表、存取列表 等对象带有“宽文本”的方法对此文本进行处理。
[2.3.2] 2019-06-14
解决了2.3.1核心对象复制导致的随机奔溃问题。
[2.3.1] 2019-06-13
[E2EE定制版核心库]
修复了 URL编码/URL解码 兼容性问题(感谢 银河世纪)。
[存取键值表/存取列表]
修复了JSON解析长整数过长时超出长整数范围的问题,自动转成文本型。
修复了JSON解析双精度小数型数值过长导致奔溃的问题。
[网站客户端]
修复了CURL在Windows下超时无效导致阻塞的问题。
[2.3.0] 2019-04-28
加入了 创建文本_预编译 函数。
* 作用等同于 创建文本() 函数。
* 可对文本表达式进行预编译处理。
* 大部分场景下运行效率比易语言默认连接文本的效率要高。
修复了 宽文本转换为GBK等环境下,尾部为“\”导致转换失败的问题(感谢 银河世纪)。
修复了 文本编码转换 函数中编码不存在时出现奔溃的问题(感谢 小蜗牛龙鹏林)。
修复了 打包网站 命令在命令行模式下成功时也提示“输出文件失败”的问题(感谢 SsssWaiWai)。
修复了 路径_取后缀 文件没后缀而中间目录存在“.”时获取路径错误的问题(感谢 大小鱼)。
[网站服务器]
加入了 取模块路径() 。可以获取当前服务器在容器中的相对路径。
修复了 初始化_从打包数据 方法初始化网站,无法访问静态资源的问题(感谢 SsssWaiWai)。
网站配置加入了“禁用日志”/“log-disabled” 逻辑型 配置项。可以禁用日志输出。
[网站响应]
修复了 置SessionID 方法可能无效的问题。
修复了 取回响应数据 方法导致奔溃的问题(感谢 银河世纪)。
[存取键值表/存取列表]
优化了 从JSON载入 方法(感谢 御弟哥哥)。
* 载入的数据类型支持 文本 和 字节集 类型的数据。
* 第二个参数为了保留向上兼容性,参数类型从“逻辑型”更改为“通用型”,实际内容只支持“文本型”,其它类型将自动忽略。
* 第二个参数的意义更改为:来源数据的编码格式。主要用于兼容非GBK来源的数据,且增强Unicode即E2EE中“宽文本”的数据兼容。
[消息队列客户端]
优化了 所有方法的参数[错误]的处理。在执行方法前所有[错误]参数变量会先清空,避免用户未清空变量时误认为是上次的错误(感谢 YF 和 Devil)。
[消息发布中心]
修复了 发布消息 方法永远返回 假 的问题(感谢 荭枫)。
[RAS加解密]
修复了 签名/验证签名 方法的“待签名数据/待验签数据”参数,已改为通用型。
[存取查询器]
加入了 存取查询器 对象。目前 存取查询器 还不是非常完善,但基本能满足大部分场景。
[2.2.3] 2019-02-22
E2EE 2.0 命名【勇者】!
E2EE 2.2.3 将迎来E2EE历史上最稳定最可靠版本。
修复了 核心服务器 连接定时器回收对象失败,可能导致程序奔溃的问题(感谢 小蜗牛龙鹏林 的逼迫)。
加入了 线程异常终止时的环境恢复机制。在COM内部或者超时终止等E2EE内部环境导致线程奔溃的环境下,线程能够自动恢复为工作状态。
[网站服务器]
修复了 静态文件 时间检测缓存(304 If-Modified-Since)未起效的问题。
修复了 静态文件 浏览器缓存检测周期无效的问题。
修复了 免费版 启动时模板数量统计不准确导致启动失败的问题(感谢KKO)。
优化了 远程服务 功能。
修复了 多值模式下接收日期类型错误的问题。
加入了 远程服务编辑器 程序。
优化了 远程服务助手 程序。
[网站请求/网站响应]
修复了 获取SessionID无效的问题(感谢 六十五公斤)。
修复了 中文名称表单可能无法获取数据的问题。
[模板编辑器]
加入了【自动换行】设置。默认为【启用】状态。
加入了【生成易语言表单接收代码】功能。可将页面表单直接生成易语言 视图函数 中的 变量定义 和 取参数 相关代码。
优化了编辑器加载速度。
[存取键值表]
加入了 子列表删除 方法。
[2.2.2]
加入了 关闭数据执行保护 函数。用来关闭当前进程的数据执行保护功能(感谢 小蜗牛龙鹏林)。
[网站服务器]
优化了无法从反向代理请求头获取真实客户IP时的处理机制。当获取远程请求地址失败时,则跳过请求头而直接获取客户端的远程地址。
修复了在无网站配置等环境下,关闭服务器重新启动失败错误原因为“string too long”的问题(感谢 Grapes)。
[WebSocket客户端]
修复了停止可能会一直阻塞的问题(感谢 欲)。
[2.2.1]
加入了 取E2EE版本 函数。可以获取当前E2EE的版本号信息。
WebSocket服务器和客户端相关应用库升级为最新版。
[数据库]
查询头条修复了数据不存在时奔溃的问题(感谢 银河世纪)。
[WebSocket服务器]
修复了 获取用户地址 不准确的问题。同时加入了原始地址和IPv4的获取。
加入了 初始化_多服务端 方法。可通过绑定标记的方式,来做服务端区分。
加入了 多服务端 支持。通过 初始化_多服务端 定义的回调函数中,都加入了【标记】参数,可用来区分不同的服务端。
[邮件发送客户端]
修改了 分块模式 默认值为 假。避免新手使用时无附件的情况不知道设置,导致邮件发送后有些邮箱解析不了。
[通用缓存对象]
内存缓存功能 加入了 持久化支持。使用方法:创建内存缓存 时,【存储路径】参数不为空时有效。
[2.2.0]
重构了视图调用流程机制。统一了 [视图函数] 和 [全局函数] 的返回值作用,所有视图或全局函数需要遵循以下约定:
* 任何 [视图函数] 和 [全局函数] 返回 [假] 时,将直接终止任何后续逻辑的执行(请求将直接处理完成)。
* 任何 [视图函数] 和 [全局函数] 返回 [真] 时,继续执行后续逻辑。
* 任何 [视图函数] 和 [全局函数] 修改 [响应.响应状态] 为非 200 的情况。请求处理完成后:
* 执行对应作用域指定的[全局函数]和[后置全局函数](使用“#全局函数_状态页”指定作用域的全局函数)。
* [全局函数]执行后,[后置全局函数]执行前,将渲染[模板]目录下“<响应状态>.esp”文件。渲染的数据可通过“请求.属性表()”来指定。
修复了上一版本中虚拟磁盘系统可能无法读取内存文件的问题。
去掉了 Redis 功能。
加入了 Unicode 的支持。相关的方法如下:
创建宽文本
宽文本到文本
宽文本到编码
取宽文本长度
网站请求.取参数
网站请求.取多值参数
网站响应.写出宽文本
网站响应.写出结果_宽文本
网站响应.写出成功_宽文本
网站响应.写出失败_宽文本
存取键值表.取类型() 返回 96
存取键值表.创建消息_宽文本
存取键值表.取宽文本
存取键值表.置宽文本
存取键值表.置宽文本_编码
存取键值表.到JSON
存取列表.取宽文本
存取列表.置宽文本
存取列表.置宽文本_编码
存取列表.插入宽文本
存取列表.插入宽文本_编码
存取列表.添加宽文本
存取列表.添加宽文本_编码
【服务器辅助】和【对象工厂】分类下有关的文本方法被统一放入到新分类【文本处理】下。
[模板编辑器]
加入了 多编码支持。模板编辑器可以始终适配网站任意编码。使用全新编码兼容机制。
修改了 预览区域默认背景为白色。
修复了 某些情况下模板内容会变成乱码的问题。
加入了 搜索 功能。
[标签] 页加入了 自动表格生成(点击标签右边“表格”)。
[数据] 页加入了 【对象映射】类型。支持自动生成映射对象的 添加/修改 表单。
[网站服务器]
修复了 服务器启动时,模板加载失败引起的无法成功启动问题。
修复了 静态文件 无法被浏览器缓存的问题。
加入了 订阅后置全局函数() 功能。
* 触发条件跟 订阅全局函数() 一致。
* 触发时机在执行完[视图函数]之后执行。
* 如果[视图函数]返回 假,后置全局函数将不会被执行。
加入了 全局函数作用域的支持。订阅全局函数() 和 订阅后置全局函数() 时,标签参数可使用“#全局函数_”开头的常量来定义作用域(此方法代替以前的“#请求地址变量_”的作用),支持以下作用域:
#全局函数_所有请求 : 拦截【所有请求】到当前全局函数。
#全局函数_动态请求 : 拦截【所有视图函数】请求到当前全局函数
#全局函数_静态文件 : 拦截【所有静态文件】请求到当前全局函数
#全局函数_文件列表 : 拦截【所有文件列表】请求到当前全局函数( 请求.属性表() 可获取要渲染的目录列表等数据 )
#全局函数_动态模板页 : 拦截【所有动态模板页】请求到当前全局函数
#全局函数_状态页_404 : 拦截【所有响应状态为404】请求到当前全局函数
#全局函数_状态页 : 拦截指定【状态页】请求到当前全局函数。使用方法:创建文本(#全局函数_状态页, [响应状态]),例如拦截所有404:创建文本(#全局函数_状态页, 404)。也可以使用函数“全局函数_状态页()”来代替创建文本的用法
#全局函数_上传文件 :在文件上传前和上传后拦截。通过 服务器.订阅全局函数(#全局函数_上传文件) 将在上传前拦截,通过 服务器.订阅后置全局函数(#全局函数_上传文件) 将在上传成功后拦截,可以通过 请求.上传文件_取当前文件信息、上传文件_置当前文件路径、上传文件_跳过当前文件、上传文件_终止文件上传 等方法来获取和设置文件信息。
#全局函数_上传失败 :在文件上传失败时拦截。通过 服务器.订阅全局函数(#全局函数_上传文件) 将在上传前拦截,订阅后置全局函数时无效。
[使用方法]
服务器.订阅全局函数(&全局_所有请求, #全局函数_所有请求)
全局函数拦截的特定的状态页时,标签参数可以使用 全局函数标签_状态页() 方法对特定状态页进行拦截。例如:服务器.订阅全局函数(&拦截404,#全局函数标签_状态页(404))
订阅视图函数 方法的【标签】参数可使用 视图函数标签_绑定对象 方法。将请求和对象名称进行绑定处理。绑定后,请求中的所有用到对象名称的方法,都可以省略【对象名称】参数。
增强了 订阅视图函数 功能。现已允许同一个视图函数多次订阅。
增强了 订阅全局函数 功能。现已允许同一个全局函数多次订阅。
[网站请求]
是否存在参数() 加入了【是否判断值】参数。可以判断是否存在参数并且内容不为空。
取参数 和 取多值参数 方法加入了【是否宽文本】参数。可获取内容为宽文本内容。
加入了 数据库 和 对象映射 等相关对象的便捷数据处理方法。主要包含以下方法:
[数据库]
网站请求.数据库_取连接
网站请求.数据库_查询
网站请求.数据库_查询到自定义数组
网站请求.数据库_查询_到属性表
网站请求.数据库_查询头条
网站请求.数据库_查询头条到自定义
网站请求.数据库_查询头条_到属性表
网站请求.数据库_查询到分页
网站请求.数据库_执行
网站请求.数据库_保存对象
网站请求.数据库_保存对象_键值参数
网站请求.数据库_取回错误
[对象映射]
网站请求.对象映射_对象转自定义
网站请求.对象映射_自定义转对象
网站请求.对象映射_对象转数组
网站请求.对象映射_数组转对象
网站请求.对象映射_格式化名称
针对上传流程的精细化处理,加入了上传相关方法可以获取上传文件信息和控制上传处理过程。主要包含以下方法:
以下方法只能用于订阅全局函数 #全局函数_上传文件 中(后置全局函数无效):
网站请求.上传文件_取当前文件信息
网站请求.上传文件_置当前文件路径
网站请求.上传文件_跳过当前文件
网站请求.上传文件_终止文件上传
以下方法主要用于普通视图函数中:
网站请求.上传文件_取上传文件路径
网站请求.上传文件_取上传文件信息
网站请求.上传文件_取所有上传文件
?
[数据库]
[数据库连接池]
加入了 读写分离 的支持。
修复了 创建 方法总是返回 假 的问题。
[数据库连接]
加入了 保存对象_键值参数() 方法。作用跟“保存对象”方法一样,只是传入的[对象]参数可直接使用键值表。支持格式化传入键值表的主键名称,到不同场景下的命名。参数值支持以下场景:
* [-1] 不格式化
* [0] 原始名称
* [1] 字段名
* [2] 表单名
[对象映射中心]
修改了 自定义转对象() 和 数组转对象() 方法的参数。原来的[是否为昵称:逻辑型]参数改为了[名称类型:整数型]。可指定输出以下场景的命名:
* [0] 原始名称
* [1] 字段名
* [2] 表单名
加入了 格式化名称() 方法。可转换使用[对象映射]功能命名的[键值表]主键名,到以下场景的命名:
* [0] 原始名称
* [1] 字段名
* [2] 表单名
[数据参数支持的类型]
* 存取键值表: 转换主键名到对应场景
* 存取列表:转换 列表 下级键值表的主键名到对应场景
[存取键值表/存取列表]
加入了 从JSON载入/到JSON 对 UNICODE 的支持。可生成 \u 作为UNICODE转义的JSON内容。
到JSON 方法加入了【排序方式】参数。可指定【对象】类型的输出是否按照主键名进行正向/逆向排序。
取键数组 方法加入了【排序方式】参数。
[正则表达式PCRE]
加入了 命名标签 的支持。在调用“搜索”方法时可以加入匹配结果的命名。格式:(?<名称>(正则子表达式)) 例如:\s+(?<ago>(\w+))_(?<suffix>(\d+))
[2.1.0]
重构了 服务器底层网络处理和流程处理机制。
* 运行效率更高
* 框架更加灵活
* 实现数据传送精细化控制
为了实现稳定性改造,以下对象的相关方法调用方式做了改动:
* ADODB数据库连接池
* ADODB数据库连接
* ADODB数据库分页
[网站服务器]
优化了文件存在性判断逻辑。加入了文件状态瞬时缓存,有效提高静态文件(和静态缓存的文件)的传输效率。
[通用缓存对象]
修复了内存缓存 计次加/计次减 无法响应超时的问题(感谢 过客、特蕾西亚·范·阿斯特药)。
修复了 批量取文本 等批量可能会奔溃的问题(感谢 荭枫)
[网站客户端]
修复了 允许HTTP错误 参数无效的问题。400+/500+ 等类型的请求都可返回原始数据。
[2.0.2]
[网站服务器]
修复了 只存在 和 只调用 全局函数(或#请求地址变量_所有请求) 时写入Session无效的问题(感谢 大小鱼)。
[Redis客户端]
加入了 Redis 客户端。
[2.0.1]
修复了上个版本不支持2003的问题。
[消息发布中心]
加入了消息发布中心对象。
* 支持界面交互
* 支持分布式(RabbitMQ/Redis)
[网站服务器]
Session的ID信息加入了 HTTPOnly 属性(感谢 智慧人生)。
配置中使用“SESSION启用HTTPOnly”(逻辑型)来开启
Session的ID加入了格式校验机制。可配置
配置中使用“SESSION格式校验”(逻辑型)开启
修复了 防火墙_拉黑用户 在不存在IP时会失败的情况(感谢 疯狂大魔男)。
[数据验证器]
修复了 到JSON 输出可能为null的问题(感谢 月方)。
优化了 从JSON载入 时的参数兼容性。
[读写共享锁]
重写了 读写锁 机制。
* 全面取消 读写锁句柄的概念,使用过程中 结束读/结束写 不再需要传递任何参数。
[键值表/列表]
加入了 从网络加载 方法。可以直接从网站等地方加载键值表或列表数据。
* 支持编码设置和GET/POST。
* 支持手动指定 网络客户端。
[网站客户端]
修复了 上传时中文名可能会缺失的问题(需要提前设置客户端编码)。
加入了 上传文件使用字节集的方法。
* 使用方法:键值表设置参数时,表项使用 客户端.创建上传文件项_从字节集 方法。
[1.9.2]
[键值表/列表]
修复了 列表.到JSON 方法可能会产生内存泄露的问题(感谢 七分怒)。
* 1.8.7版本时对内存机制做重大修改时此处未修改成功。
修复了 使用(JSON式)表达式 赋值时列表中产生多余“null”空值的问题(感谢 月方等)。
[通用缓存对象]
内存缓存时修复了计次加和计次减时,文本包含0或9出现初始赋值失败的情况(感谢 Devil、郑雪飞)。
[消息队列客户端]
创建队列 方法加入了[创建参数]参数。可指定队列自定义参数(感谢 Devil)。
创建交换机 方法加入了[创建参数]参数。可指定交换机自定义参数。
订阅消息 方法加入了[预加载数]参数。可指定队列提前加载消息数量。
发布消息 方法加入了[消息属性]参数。可使用“#消息属性_”开头的常量做为主键指定消息相关属性。
取回消息 方法加入了[消息属性]参数。可取回消息相关的属性内容。
修复了 删除交换机 无效的问题。
加入了 创建队列 时空队列名的支持。队列名为空时,则认为是创建临时队列。创建临时队列成功后,绑定队列 和 订阅消息时,队列名为空则都默认指向新创建的临时队列。
[通用线程池对象]
优化了线程调度机制。当线程都处于阻塞状态时,线程数量未达到最大值将自动启用新的线程执行任务。
* 之前的机制是队列数量达到指定数时,才会自动启用新线程。
[数据验证器]
修复了 到JSON 方法时[规则参数]总是为“null”的问题(感谢 SoIdea、月方)。
* 当前调用 到JSON 方法时[规则参数]将始终输出为文本类型(非数组)
* 从JSON载入 方法中的[规则参数]同时支持 数组 和 文本型。
[邮件发送客户端]
修复了 邮件发送时间的时区永远为0的问题(感谢 XGSoft)。
[1.9.1]
修复了编码转换时的一个判断逻辑问题(感谢 郑雪飞)。
* 上次提高文本效率产生的
[1.9.0]
优化了文本空和非空判断机制相关效率提高了很多(感谢 被封七号)
修复了静态编译时动态加载DLL中调用E2EE时,卸载失败的问题。
[数据库]
取消了 线程自动初始化COM机制。
* 可靠性会有影响
[网站客户端]
加入了 取Cookie 方法。可以获取客户端关联的所有Cookie或指定域名下的Cookie数据。
[消息队列客户端]
修复了连接时用户名密码错误 或者其它情况下,出错直接奔溃的问题(感谢 SoIdea)。
[键值表]
加入了 是否为空值 方法。可判断对应主键内容是否为 空类型的数据(感谢 f2)。
加入了 连续置值 方法。作用跟 创建 方法差不多,不同的是不会清空原始结果内容。如果对应主键已经存在,则主键对应内容会被新内容覆盖。
[1.8.9.7]
修复了对Windows XP/Windows 2003的兼容。
[请求]
加入了 请求.载入() 方法。视图函数触发的函数中使用(包括 模板函数)。
[响应]
加入了 响应.载入() 方法。视图函数触发的函数中使用(包括 模板函数)。
[存取队列]
修复了 取回存取列表类型的对象时 结果为空的问题(感谢 银河世纪)。
[线程池]
修复了 程序窗口关闭时弹出错误的问题(感谢 XGSoft)。
[1.8.9.6]
优化了静态库加载机制。
[数据库]
优化了ADO对象初始化机制,任意多线程环境中能够自动初始化。
[键值表/列表]
所有“置值”方法加入了自动创建节点的功能。
键值表.置值(“//a.b.c”, 5) => 自动创建 { a: { b: { c: 5 } } }
JSON式寻址路径加入了以下转义符:
\r\n 换行
\t 制表符
\\ “\”本身
\. “.”符号(不再作为节点分隔符号)
例如:
“//a.b\.c” => { "a": { "b.c": xx } }
[1.8.9.5]
[数据库]
修复了 查询 和 查询到自定义 的[批量取值]模式时内存泄漏的问题(感谢 XGSoft/兴国软件网)。
[定时任务]
优化了检测机制,采用冗余处理保证不漏掉每一秒的任务。
修复了停止无效的问题(感谢 龙鹏林)。
[1.8.9.4]
[存取队列]
加入了 压入顶部 方法(感谢 Devil)。
[1.8.9.3]
[数据库]
连接.查询() 增加了“是否批量取值”参数。
[线程池]
重构线程池对象。功能更强更好使。
修复了取值只能取键值表的问题。
修复了停止时获取任务数变负数的问题(线程竞争引起的)。
[定时任务]
加入了定时任务对象和示例。
[1.8.9]
[存取队列]
加入了存取队列对象,可以当成线程安全的队列或栈使用。支持所有存取键值表和列表支持的数据类型(易语言基础数据类型和列表、键值表)
[加解密]
修复了解密失败时可能产生奔溃的问题(感谢 银河世纪、f2)。
[数据库]
连接.查询() 增加了“是否本地游标”参数。开启后获取量大的数据时效率飞起,具体用法参考参数说明(感谢 XGSoft)。
[键值表]
到表单文本 加入了排序功能。可以按照ASCII进行正向和反向排序。
加入了 到XML 和 从XML载入 方法。可生成XML和从XML加载键值表,生成XML支持按主键名称排序。
[消息队列客户端]
修复了键值表和列表类型数据取值引起的内存问题。
[1.8.8]
优化了Session机制。不会再产生大量空Session文件造成的堆叠,从而引起服务器启动缓慢的问题。
修复了使用E2EE无法弹出自动创建变量窗口的问题。
修复了回车创建视图函数时会生成一个同名空参数函数的问题。
[模板编辑器]
修复了上个版的模板编辑器无法加载的问题。
模板编辑器处理了预览部分背景色。默认为白色。
[网站服务器]
修复了模块路径以“/”挂载时,无法跳转的问题。
加入了[107 动态模块]示例。动态模块是从DLL动态加载服务器,属于正式版功能的一部分。
[存取列表]
修复了删除第二个参数为空等情况无法删除的问题(感谢 一缕阳光)。
[正则表达式]
加入了 取子项数() 方法。可获取表达式中子表达式的数量(感谢 荭枫)。
[1.8.7]
进一步提升了E2EE的稳定性。多线程等环境相比以前要稳定很多(跳过了易语言支持库SDK申请内存的巨坑)。
[列表]
加入了 分级取值的方法。可使用如下方式取值 列表.取文本(1, "server", "name")。修复了上个版本的序号取值总是第一个的问题。
[正则表达式PCRE]
加入了正则表达式PCRE版本。支持 匹配、搜索、提取、替换。多线程环境也能可靠的执行处理。
[消息队列客户端]
加入了消息队列客户端功能。主要针对RabbitMQ和ActiveMQ等标准AMQP服务器,对RabbitMQ最友好,使用前请先安装RabbitMQ。支持RabbitMQ等服务器的 队列、交换机、发布和订阅等常用功能。
[1.8.6]
[网站客户端]
加入了 置Cookie文件 方法。可多线程共享cookie数据。
[模板]
修复了选择类型的模板导致的奔溃问题
[列表]
加入了 分级取值的方法。可使用如下方式取值 列表.取文本(1, "server", "name")。
[键值表]
主键更名加入了容错处理。原始主键名称不存在时则跳过对应的更名操作,存在则进行实际更名。原来的处理方法是原主键名不存在则直接返回失败。
网站配置中加入了“允许代理地址”配置。类型为逻辑型(值可以设置为 真 / 假)。默认为 假。
开启后将不会拒绝以“http://”或“https://”开头类型的请求。关闭后,所有以这些关键字开头的请求都将被直接拒绝。
创建文本从时间 加入了容错机制,允许在格式不正确的时候也能执行格式化操作(感谢 烧饼帝)。
原因是微软的时间格式化函数不做任何容错且不抛出异常直接停止工作。https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
[1.8.5]
修复了编译后的一个重大问题导致栈奔溃的问题。
[1.8.3]
优化了 E2EE 内存中同进程库的加载机制,更加可靠。
E2EE程序在内存中永远只保留一个版本,无论何种方式调用E2EE,只要是同进程都使用外层服务器所使用的E2EE版本,不会进行重复加载。
[网站服务器]
重构了 取配置文本() 。剔除了英文命名,加入了获取JSON形式的文本。可通过参数 是否为JSON 获取。
加入了 取验证器(验证器文件)。可通过验证器文件名载入验证器。
优化了 服务器日志处理。当打开日志文件失败(日志文件为只读等情况)时,可顺利启动服务器。
[其它]
创建文本() 修复了“``”时无法转换为双引号的问题。
重新处理了 E2EE通用服务模块。
把网站做成服务时,请不要调用 网站.初始化() 方法。资源或者依赖路径的初始化,请放在“网站.订阅初始化函数”对应的回调函数中。
[1.8.2]
[数据库连接池]
加入了 输出执行SQL 和 执行时间 到日志的功能。对应的方法“是否输出SQL”和“置是否输出SQL”。可随时开启和关闭(线程安全)。
[网站服务器]
加入了 等待结束 方法。等待服务器运行直到停止或者结束。如果服务器在运行中,则此操作会一直等待并且会阻塞当前线程
加入了 清除页面缓存 方法。可通过请求相对路径,清除服务器上的 静态文件缓存 和 动态请求缓存 中的缓存数据。
修复了 大文件(2G以上) 获取尺寸无效的问题。这个是因为之前为网站打包工作做改造时,统一使用了32位数据长度的文件信息获取方法,32位有符号的数值无法描述2G以上的文件尺寸,会产生越界。
!!! 此功能影响到 网站打包 功能,所以可能需要新版的网站打包功能做支持。或者手动调用 网站打包 功能对网站进行打包。
[1.8.0]
SSL部分加入了苹果ATS(强制HTTPS)支持。开发小程序对接微信等方面更加友好。E2EE服务器现已支持PFS完全前向保密机制。
[网站服务器]
加入了 动态缓存页 请求数据缓存的功能。
修复了 文件上传尺寸过大等情况下,还能获取上传成功的消息状态。
上传 在配置中 最大上传尺寸 单位改成了 KB
上传 文件类型加入了白名单模式。
如果只限定范围内的文件类型,上传文件类型只要填写后缀即可,例如:jpg;gif;png;webp(此时只允许这几种后缀的文件上传)
如果允许上传大部分类型,而只限定不允许某些类型,则可以使用 * 来代替所有,之外的后缀都不允许。例如:*;exe;com;bat;msi(此时除了exe...msi之外的所有类型都允许上传)
修复了 某些情况下,静态缓存文件无法准确响应 gzip 的问题。
[服务器请求]
加入了 验证参数() / 验证所有参数() 功能。自动匹配和验证 远程服务/视图函数 的参数。响应验证器设置。
[存取键值表/存取列表]
修复了 键值表/列表 在某些特定环境下可能解析JSON或创建小数类型对象崩溃的问题(感谢 D-OWL)。
[对象工厂]
加入了 创建时间戳() / 载入时间戳() 功能。能够生成和载入秒或毫秒级的时间戳(感谢 Grapes)。
修复了 创建文本从时间() / 创建时间从文本() 中的国际时间转换问题。
重写了 创建文本从时间() 和 创建时间从文本()。不会再因为格式不匹配阻塞或者崩溃。
优化了 Base64解码 函数,可兼容包含换行等号空格等情况。
[网站客户端]
!!! 重要更新:返回信息头如果有多个,将不会再转换为存取列表,而是会不停的追加多行文本,一行表示一条数据。
修复了 键值表 作为POST参数时可能引起的访问失败问题。
加入了 自动跳转时,获取每次服务器返回的信息头。
修复了 代理设置无效的问题。可正常使用代理服务器。
[网页内容解析器]
修复了标签和属性中出现“-”和“_”无法完整解析名称的问题。
[加解密对象]
修复了 RSA 加解密签名时,设置输出小写十六进制文本始终为大写的问题(感谢 番茄)。
[数据验证器]
字母中文等验证条件加入了扩展字符支持。允许在字母等验证时可包含自定义字符“空格”“中划线”等。
[1.7.40]
[网站打包]
修复了 空文件 时打包阻塞的问题。
[模板引擎]
加入了 “否则”标签的支持。判断时支持成功和失败分别显示不同内容。
[服务器请求]
加入了 是否存在参数 方法。可以判断指定名称的参数是否存在。
[服务器响应]
修复了 响应.置模板渲染路径 无效的问题(感谢 向爸)。
* 很抱歉,这是批量修改支持库接收易语言传递参数的方式引起的第二个问题,给大家带来不便希望能够谅解。
* 易语言支持库取参数的方式很麻烦,所以我做了一组宏简化大量工作,前期的一些功能也都改造为新宏的支持。
* 因为取值方式的不同,所以都是一个一个根据逻辑做的修改,每一个都很认真的,但是命令太多,没办法覆盖测试所有功能。
[存取键值表/存取列表]
JSON处理完善了一些特殊情况下生成和导入失败的情况。目前为止已可以处理所有中文数据。
取数量() 加入了参数。可取下级内容的数量。(感谢 番茄)
[路径处理]
路径_合并() 加入了多参支持,允许2个以上参数的路径连接。
[网站客户端]
升级到了最新版的CURL。
加入了 chunk 数据的读取算法,可解析 chunk 编码格式的数据。
* 相关方法:置启用CHUNK解码() / 是否启用CHUNK解码()
加入了 取响应头文本()方法。可以获取原始响应头文本(无论成功还是失败)。
修复了 POST 等上传文件无文件名导致的上传无效的问题。
修复了 POST 上传等特殊场景下默认使用UNIX换行符产生的问题(感谢 D-OWL)。
修复了 置请求头()方法无效的问题。
修复了 执行POST()时参数为空引起的崩溃问题(感谢 智慧人生)。
[ADODB数据库连接]
修复了 读取字节集数据时,内存不释放一直上涨的问题(感谢 智慧人生);
[1.7.38]
修复了所有示例。兼容1.7之后的版本。
优化了 Memcached支持。将 libmemcached 的内存分配器改成了易语言统一申请内存的方式。
修复了URI解析过程的一个逻辑陷阱。兼容中文等情况的URI二次解析可能出现的问题。
修复了XML解析等情况下得到的文本内容超出预计范围的问题。
修复了 模板编辑器 的若干问题。
1. 标签[正常输出]为空的情况
2. 包含文件列表为空的情况
修复了 通过后缀名获取文件列表的一些场景下,后缀名包含“.”无法得到文件列表的情况。
[1.7.37]
服务器响应对象加入了标准反馈信息的支持(API)。如果您希望把您的视图做为远程调用函数,强烈建议使用这组方法来写出反馈结果。未来E2EE也会提供更加完善的远程调用机制,也会将此反馈模型做为标准协议提供更多功能的支持。
响应.写出结果()
响应.写出成功()
响应.写出失败()
[网站客户端]
修复了设置HTTP请求头后再次执行请求崩溃的问题。
修复了针对JSON和JS的自动编码转换无效的问题(神6、物联科技)。
HTTP中返回的协议头里的Content-Type中,网站客户端只转换了 txt/ 开头的MIME类型,JSON和JS的MIME是以 application 开头的,特地加入了针对这种情况的支持。
[存取键值表]
优化了 合并到() 方法。结果将以 合并到 左边的键值表为主,强制覆盖 目标 键值表中所有主键名称相同的主键和添加不存在的主键内容。
加入了 置为空值() 方法。可设置主键对应的内容为 空 值。
[存取列表]
加入了 置为空值() 方法。可设置指定位置的内容为 空 值。
[1.7.36]
修复了设置Session的ID某些场景下无效的问题(用户首次系统自动产生SessionID时无法再次手动设置等情况)。允许同一次请求执行多次Session的ID设置,只使用最后一次的设置。
[数据库分页]
修复了查询到分页实际的分页尺寸永远为10条的问题。为啥没有人告诉我这个问题!!!(感谢 左边的石头)
[通用缓存对象]
在取键值表和列表的数据之前,加入了对象清空操作。避免取到脏数据。
[WebSocket服务器]
加入了 取客户地址 方法。可以获取客户的IP地址。
[1.7.35]
[网页内容解析器]
加入了 取下级文本/取下级内部文本 方法,可对选择结果进行二次筛选。
对应的示例[717]做了更新。
[网站客户端]
修复了 某些特殊环境下GET不受控制得不到HTTP响应头的内容(不知道是不是盗版引起)。
渲染() 方法加入了列表的立即值输出。
例如:
列表名为“名称组”,值为 ["a", "b", "c", 1, 2, 3]
则页面上可以使用
{{#名称组}}
{{名称组}} <= 直接使用列表的变量名即可直接输出变量的值
{{/名称组}}
[存取键值表]
加入了 子列表添加() 命令。可以对 键值表 中的列表值,进行 添加值 的操作。
[1.7.34]
修复了URL处理中路径包含中文和特殊符号等可能无法正确定位文件的问题。
存取列表 加入了 排序() 方法。具体查看[009 基础对象测试]下的“列表排序”示例。可通过列表内容进行多种形式的排序。
存取键值表 加入了 子列表排序() 方法。作用等同于 列表.排序()。
WebSocket客户端 加入了 置请求头() 方法。可以设置连接到服务器之后提交给服务器的HTTP头内容。
升级到最新版的易语言支持库开发SDK。
[1.7.33]
修复了 URL 解码时遇到的长度极值问题。之前的算法超过127位长度无法获取参数数据。
[1.7.32]
修复了URLEncoded类型的表单提交时解码的问题。
优化了内部流程中URL解码部分的逻辑。
[1.7.31]
[ADODB数据库连接池]
加入了 测试连接 方法。可以使用此方法测试指定数据库是否能够连接成功。
[存取键值表/存取列表]
JSON处理 修复了某些特殊文本(全角文本或字符)加载失败的问题。
[请求对象]
修复了 取参数()/取所有参数() 中包含 http:// 等关键字的参数解析失败的问题。
重构了URI解析算法。兼容性更好,效率更高。(实测平均每秒能够处理2000万次请求路径)
[数据库]
屏蔽了ADO查询到分页数据为空时,输出的错误信息内容。
[1.7.29]
改进了 静态编译 机制。
* 无论是静态编译EXE还是DLL,都能正确释放和调用原始库(因为是伪静态,机制等同于独立编译),不需要手动拷贝e2ee.fne到运行目录。
* 优化了原始库释放和调用流程,只有在临时目录无法使用且不存在原始库的情况下,才会释放原始库到运行目录。
修复了 文件列表 功能可能引起的崩溃问题(第三只眼)。
* 网站打包加入后,通用获取文件列表的接口遇到无后缀获取的情况,会导致空指针构造对象失败的问题。所有相关的文件和文件列表指令已经全部做了处理。
[1.7.28]
修复了 创建文本从时间 返回空白的问题(__{飛})
[1.7.27]
修复了线程池调用 URL编码/URL解码 可能会导致程序出错的问题(感谢 小蜗牛)。此问题是因为URL编码表延迟初始化引起。
修复了 通用缓存对象 使用内存时 设置过期时间失败的问题(感谢 kko)。
服务器辅助 中加入 GZIP压缩数据 和 GZIP解压数据 命令。
服务器辅助 中加入 LZMA压缩数据 和 LZMA解压数据 命令。(7Zip算法)
加入了 打包网站 和 解包网站 功能。
加入了 E2EE网站打包工具v1.0 工具辅助软件。
服务器加入了 服务器.读入文件() / 服务器.读入文本文件(),包括之前加入的 服务器.读配置文件() 都支持从打包的虚拟磁盘系统中直接读取文件内容。
优化了 WebSocket错误日志。防火墙等相关功能出现异常时,能直接输出具体错误入口和问题用户ip等信息。
建立了静态库自动构建流程,优化了静态库加载方案。新版的静态编译,E2EE库只占用2.4MB的空间,体积更小(7Zip的LZMA算法)。通过易语言“静态编译”生成的程序,不会再在运行目录释放“E2EECore.dll”,而是自动根据版本号释放到临时目录中。
[新增对象]
内存链接库:可直接从内存加载和调用动态链接库。
[1.7.20]
通用缓存对象的内存缓存重构为 内存池 技术。优化了LRU机制,早期更改的数据优先清理。
修复了默认404页面未设置传输编码造成的乱码问题。
修复了键值表和列表在某些情况下字节集数据转换文本可能产生崩溃的问题。
数据库连接对象加入了 锁定连接/解除锁定。可以锁定物理连接到当前连接对象。
数据库分页优化了分页机制,不再需要提供统计数量统计语句。
数据库分页优化了获取模板数据。模板数据中的分页列表可限制固定分页数量,自动追加分页列表本身的翻页内容。
重写了解析Cookie算法。(因为一些人的错误怪罪到我头上,白白重写了一遍,新算法测试的比较充分)
设置Cookie允许使用整数文本做为秒钟设置过期时间。如果过期时间为整数文本且大于0,则自动做为秒钟格式化GMT时间赋值给Cookie。
进一步增强了自动编码转换的功能。
修复了 是否手机用户() 判断可能产生崩溃的问题。原因是HTTP头不包含“User-Agent”时空指针调用引起的(yesit.cc)。
修复了 URL编码 等转换编码时指定编码无法转换的情况导致程序崩溃的问题(小蜗牛)。
修复了 创建二维码 参数错误时崩溃的问题(小蜗牛)。
加入了 文本编码转换() 命令。可使用 #文本编码格式_ 开头常量指定编码格式。
[服务器]
加入 读配置文件/写配置文件 方法。可读写网站[配置]目录下的文件。
[存取键值表]
加入 创建 方法。作用等同于 创建键值表(),执行本方法前数据会被清空。为了程序稳定性,建议尽量使用 创建 方法 替换 创建键值表() 函数。
修改 取键值表/取列表 为通过参数返回结果。(稳定性优化)
加入 表达式寻址操作。所有的数据读写可以使用JSON式路径操作,具体格式为“//” + 表达式。列表索引从1开始。具体格式可以参考JSON寻址格式:http://www.w3school.com.cn/json/json_syntax.asp 。如果您的主键名本身以“//”开头,请使用四个斜杠“////”做为起始来进行转义。JSON路径使用示例:
指向主键为“children”列表中的第一个元素://children[1]
其它示例://children[1].name;//cars.toyota.color;//jobs.tags[2]。
[存取列表]
加入 创建 方法。作用等同于 创建列表(),执行本方法前数据会被清空。为了程序稳定性,建议尽量使用 创建 方法 替换 创建列表() 函数。
修改 取键值表/取列表 为通过参数返回结果。(稳定性优化)
加入 表达式寻址操作。所有的数据读写可以使用JSON式路径操作,表达式中的列表索引从1开始。具体格式可以参考JSON寻址格式:http://www.w3school.com.cn/json/json_syntax.asp 。
示例:
[1] :指向列表第一项
[1].name :指向列表第一项下的键值表,对应的主键为 name 的值
[2].cars.toyota.color
[3].jobs.tags[2]
加入 CSV 格式的支持。相关方法:到CSV/从CSV载入。支持多种参数的CSV解析和生成。
[模板]
过滤器新增加两个命令:
HTML关键字编码()
HTML关键字解码()
[新增对象]
通用日志对象
XML文档对象
通用线程池对象
网站客户端
网页内容解析器
加解密对象
?
[1.6.10]
? 改进了WebSocket客户端。加入了wss的接口实现,将原始客户通讯对象改为接口模式。
? 进一步优化了HTTP头获取用户地址的功能。
[1.6.9.5]
修复了超长访问地址写入日志失败造成的崩溃问题。
修复了通过HTTP头获取用户地址失败的问题。此问题间接造成防火墙无拦截等情况。
问题描述:配置了[真实IP请求头]为X-Forwarded-For或X-Real-Ip时,从Nginx等反向代理软件中产生的请求,无法响应防火墙事件且 请求.取用户地址 为内网地址而非真实用户IP。
加入了[E2EE通用服务模块]。
* 将E2EE程序一句代码改造为系统服务。
* 内置服务管理功能。可安装、卸载、启动和关闭服务。
[模板]
修复了“_下标”和“_奇偶数”变量失效的问题(感谢 轻描●淡写~)。此问题是由目标模板编码引起的。
修复了“增减”过滤器在循环嵌套等情况下赋值失败的问题。此问题为变量作用域引起的。
[1.6.9.3]
模板编辑器升级到1.4。主要加入了变量搜索功能。
修复了模板编辑器无法加载资源的问题(感谢 剑侠情缘)。路由机制的优化跳过了编辑器模块,这个版本已经加上了编辑器模块。
[模板]
请求对象加入了 置模板渲染路径/取模板渲染路径。能够针对本次请求重置渲染模板文件。
[请求]
加入了判断请求是否来自手机的判断方法:请求.是否手机用户。
网站配置项加入了“手机UA表达式”配置项,可用来配置用于检测请求User-Agent的正则表达式。
[1.6.9.2]
修复了上个版本的路由机制问题(感谢 yes or no)。
问题描述:由于以前版本的路由路径为兼容正则表达式等,对路径做过预处理,导致在新的路由寻址机制中,包含“.”等的固定网址格式无法正确匹配,会导致请求这些路径时返回404错误。
修复了超过2G文件下载失败的情况(感谢 被封七号)。原因是文件尺寸超过整数最大值造成文件体积输出失败。
修复了邮件发送账号或密码为空导致的崩溃问题(感谢 心宇)。
完全兼容Apache的日志格式。可直接使用Apache日志分析工具对E2EE中的请求日志做分析处理。
[1.6.9]
重构了路由寻址机制。根据路由地址区分模块、域名、直接地址 和 正则,效率更高。
重写了GZip压缩算法。效率更高。
上传文件信息状态增加了“无上传文件”状态。
上传文件信息状态码为常量 #上传代码_无上传文件 时表示表单没有选择文件。
修复了多文件上传的问题(感谢[yes or no])。
原始问题表现为,在提交包含多文件的上传表单时,如果某些文件表单没有选择要上传的文件,可能会造成其他文件也上传失败。
修复了大文件在断点续传和浏览器下载等可能出现失败的情况(感谢 被封七号)。
具体症状使用迅雷下载无法顺利下载文件,或者使用chrome下载时总是卡住的情况。具体原因为流对象无阻塞时被忽略的情况。
[模板]
修复了模板数值判断永远失败的问题。可以进行准确的数值和变量判断运算。
[1.6.8]
加入通用日志对象(SoIdea)。
[通用日志对象]
多线程安全。
支持同时使用多日志适配器。可同时输出日志到控制台,易语言调试窗口,文件。
支持自定义日志格式。
支持的适配器类型:
* 文件适配器
* 回滚文件适配器
* Syslog适配器
* 系统日志适配器
* 调试日志适配器
* 易语言日志适配器
* 控制台适配器
支持日志输出类型:
* 信息日志
* 警告日志
* 错误日志
[模板]
加入了多条件支持。(碧水晾夏)
条件标签支持且或。
{{?a==b || a==c}}内容{{/a}}
{{?a==b && b==c}}内容{{/a}}
加入了过滤器支持。具体使用方式可以参考:http://www.jimstone.com.cn/e2ee/docs/ 的[模板和渲染]章节
使用方法:
{{标签 | 过滤函数([参数])}}
函数列表:
赋值([值内容])
增减([数量])
小数格式化([小数数量])
货币格式化([货币前缀])
时间格式化([格式化文本])
[存取键值表/存取列表]
修复了上个版本的JSON输出日期时间为空导致数据出错的问题。
[Cookie]
加入了Cookie设置时键值表多值的支持(yes or no)。允许一次设置多条Cookie项。
[请求]
加入了取所有请求头方法(海绵宝宝)。请求.取所有请求头()
[ADODB数据库连接]
优化了查询到自定义(碧水晾夏)。查询失败时清空自定义数据。
[1.6.7]
[服务器]
修复了路由并发时的函数调用引起的崩溃问题。
优化了路由最后一个级别的寻址,不会把网址中最后一个级别的变量定义,包含“/”的内容带进来了。
优化了编码自动转换部分。编码转换更加智能,指定编码转换失败时,编码系统会自动侦测编码类型,并且根据侦测结果做自动转换。
加入 是否运行() 方法可以判断服务器是否正在运行中。
[存取键值表/存取列表]
序列化和反序列化加入了长度和CRC自校验机制。
影响方法 存取键值表/存取列表 方法:
到字节集
从字节集载入
到Base64
从Base64载入
键值表加入 到表单文本() 方法。可将键值表直接生成请求用的表单文本
重写了JSON算法。JSON处理效率更高。实际测试应该是目前易语言所有JSON模块和支持库里效率最高的,键值表和列表具有原生JSON对象的序列和反序列化效率。
[邮件发送客户端]
加入内容分块模式(Multipart)的设置。该属性默认为真。发送的邮件内容能够指定是否以分块模式发送。对应的方法:
置分块模式
取分块模式
[1.6.6]
加入了多域名支持。使用方式:服务器.加载模块() 时[挂在路径]参数为 http://打头即可,例如:http://www.jimstone.com.cn/。(小蜗牛,谢友,碧水凉夏,SoIdea)
修复了多级容器时“_模块路径”变量不正确的问题。之前只关联到最后两个级别的相对路径。
修复了 目录列表 中的目录路径。之前的目录路径尾部不带“/”,会出现访问目录中的默认首页等文件时,页面文件加载失败的情况。(第三只眼)
加入了日志系统的英文名称日志文件名的支持。在英文风格时,日志文件名将自动使用英文命名。(子涵)
加入了 邮件发送客户端 对象。可发送HTML类型邮件,支持SMTP(s)-TLS类型的邮件发送,支持附件、别名 和 多收件人抄送人等功能。
[Session]
加入了把Session同步到Cookie的功能。使用方法,在配置中加入逻辑配置项:SESSION启用COOKIE同步。(KKO)
优化了 Session自动续约机制。超过3分钟后请求读取过Session网页时,会自动执行Session续约。
修复了Session过期时间不准确的问题。(谢友)
[通用缓存对象]
修复了内存过期后,使用 是否存在() 命令时依然返回真的问题。(谢友)
[模板]
模板编辑器变量等加入了“搜索”功能。(子涵)
修复了视图函数不存在模板文件而在全局函数中渲染崩溃的问题。(KKO)
修复了模板中引入多级文件时,引入文件不存在卡死的问题。(KKO)
修复只有一个字符等情况下渲染为空的情况。
[存取键值表/存取列表]
加入了JSON解析UNICODE的支持。可解析带\u的文本数据,并且自动转码。(SoIdea)
加入了 列表.取子列表() 功能 。能获取列表范围内的数据为新的列表。
修复了非字节集类型数据时调用 取字节集() 出错的问题。非字节集数据会被自动转换为文本型数据并返回文本转字节集之后的数据。(BrokenHeart)
[邮件发送客户端] (小蜗牛、心宇)
加入了 邮件发送客户端 对象。
兼容SMTP和SMTP(s)发送TLS类型的邮件。
支持附件功能。
支持HTML功能。
支持邮箱别名和多收件人、抄送人 和 密送人。
支持邮件回执功能。
[WebSocket]
服务端加入了 取请求路径 和 取请求头 方法。可获取原始HTTP中的 路径 和 请求头 数据。(碧水凉夏)
[示例]
修复了 留言本 默认Session机制为Memcached从而造成项目访问缓慢的问题。已将默认配置改为使用文件内存。(子涵)
[1.6] 更新说明
[网站服务器]
重写了 URL编码 和 URL解码 算法,效率提高了10倍。感谢 被封七号 提供的建议。新算法建立编解码索引表。对编码和不需要编码部分分别处理。
修复停止服务器可能会崩溃的问题。
修复服务器释放可能会崩溃的问题。
重构HTTP解析Multipart解析算法,解决Multipart类型内容过短无解析的问题。
修改日志系统 服务器.初始化() 之后便可正常使用。
加入Nginx等自定义地址列表获取原始客户IP地址的机制。能够获取Nginx等反向代理服务器中原始的用户地址信息。
加入了网站防火墙功能。防火墙为基础IP访问策略限制,能够有效防止普通的DDOS和CC攻击。可在[控制中心]中设置。
加入动态请求缓存机制。可对路由地址配置缓存机制。
加入静态文件请求缓存机制。可配置静态文件缓存时间和缓存内存大小。
重构了 Session系统,同时支持文件内存和Memcached。在多进程同端口时,结束第一个进程,第二个进程将共享被结束进程的Session信息。
优化了日志显示格式。
修复访问静态目录不带“/”时跳转404的问题。
修复访问模块不带“/”时自动匹配模块默认路径。例如:http://localhost/api 则 跳转到 api 模块对应的处理函数中。
修复 响应.取SessionID 命令。
加入文件上传限制。当文件超过尺寸或停用上传功能时,文件将不会写入磁盘。
加入了IPv6支持。绑定任意端口*时,加入[启用IPv6]配置就能通过IPv6启动网站,同时兼容IPv4。
优化了404返回。文件不存在时直接返回404页面内容而不做404请求的跳转。
加入了 请求.取线程句柄() 能过获取当前请求处理所在虚拟线程句柄。虚拟线程句柄从1开始,最大为您服务器的线程数设置。
加入了 网站服务器.取线程数量() 。在服务器启动后才能获取到真实线程数。
修复了缓存命中等情况下设置静态文件缓存时间的问题。文件过期检测时间静态文件是都会响应到。
修复了缓存对象取数据出现的内存未被回收的问题。此问题可能造成使用内存缓存对象,取数据时内存不停的缓慢增长。
加入 所有请求、静态文件、404等情况下自定义(预)处理。
使用方法:在订阅视图函数的路径参数中,使用 #请求地址变量_ 开头的常量。对应的视图函数返回“真”则表示请求已经处理,不再执行原始默认函数。
网站.订阅视图函数 (&视图_所有请求, #请求地址变量_所有请求, , )
网站.订阅视图函数 (&视图_静态请求, #请求地址变量_静态文件, , )
网站.订阅视图函数 (&视图_页面404, #请求地址变量_页面404, , )
优化了上传文件管理机制。当上传的文件未被使用时(未移动文件),在请求处理完成后将自动删除未使用的文件。
上传加入了 请求.取请求文件信息() 。可以获取上传文件的详细信息。
完善了上传文件信息。取所有上传文件() 和 取上传文件信息() 返回的内容中增加了 状态、代码 和 错误原因。
加入了 #上传主键_ 和 #上传代码_ 常量。
加入了防火墙事件和防火墙命令。防火墙事件在[网站服务器]和[WebSocket服务器]中通过“订阅防火墙事件”注册。网站服务器加入了“防火墙_拉黑用户”、“防火墙_取消拉黑”和“防火墙_是否拉黑”三个防火墙命令。
模板加入了session标签的注入。可直接在模板中使用 {{ _SESSION.名称 }} 进行变量注入
加入了 请求.属性表 注入到模板的功能。无论是否有渲染数据,在执行渲染时 请求 的属性表 都会被写入到模板中。
修复了无法接收JSON类型的数据的问题。现在可以正常接收POST的JSON数据。
修复了请求.取原始数据为空的问题。可获取提交的原始数据。
修复了GZIP压缩的问题。所有动态静态请求均正确响应动态GZIP压缩设置。
修复了静态文件缓存过期时间未正确响应的问题。静态文件缓存更新检测周期能够准确匹配设置。
加入了 服务器.取目录()/服务器.取文件路径()/服务器.移动文件() 三个服务器文件和路径处理方法。在上传等环境下使用更加方便。
修复了模板编码转换长度计算引起的网页生成不全的问题。
[存取键值表]
加入了二进制和文本序列化方法:加入 到字节集、从字节集载入、到Base64 和 从Base64载入 方法。
加入了 主键更名() 方法。可对键值表批量更改主键名称。
加入了 键值互换() 方法。可生成键值互换之后的新键值表。
[存取列表]
加入了二进制和文本序列化方法:加入 到字节集、从字节集载入、到Base64 和 从Base64载入 方法。
加入了 连接文本() 方法。可将当前列表直接通过连接文本输出为字符串。可以像 PHP 的 array().join(",")一样的方式连接列表所有条目。
加入了 主键更名() 方法。可对列表中的键值表直接批量更改主键名称。
[模板引擎]
重构模板引擎条件判断算法实现了 大于、小于、大于等于、小于等于等条件判断。
优化模板重载机制和模板渲染效率。模板渲染能够达到每秒5到10万次以上渲染次数。
修复了文件列表功能的支持。
修复模板编辑器的支持。
[对象映射中心]
修复ORM映射时内存申请尺寸的问题。在运行模式时某些情况下转换键值表到自定义数据结构,会导致程序挂掉,已彻底修复。
加入了对象映射多别名的支持。允许给字段名添加多个名称,同一个对象同时适用于从自定义名称表单项创建和映射到数据库对应字段。
[ADODB数据库连接池]
处理了连接池创建时没有映射中心会阻塞的问题。
连接池加入了[用户名]、[密码]、[是否UNICODE]和[连接初始化SQL]参数。
* [用户名]/[密码] 用于连接文本外设置用户名和密码
* [是否UNICODE] 用于所有的带参数SQL中的文本,用来确定是否为宽字符集存储(针对UTF8/UNICODE等字符集)
* [连接初始化SQL] 数据库连接创建成功后将自动执行此SQL
加入了数据库连接池超时重连机制。能够避免MySQL服务器超时,自动设置连接为sleep,从而无法在ADO连接中获取真实连接状态的问题。默认连接闲置时间超过1小时将自动释放连接。
修复了ADO连接池在未获得连接字符串的情况下初始化的池连接,可能造成的潜在偶然性崩溃问题。
加入了 ADO连接池 初始化时的连接检测。如果初始化时模板连接对象访问数据库失败,则连接池创建失败。
连接池加入了关键字符号的支持。不支持的数据库类型可自定义关键字符号。自定义关键字使用方式:ADODB数据库连接池.配置关键字符号 (“[”, “]”)
[ADODB数据库连接]
修复数据库操作中双精度小数和宽文本转换的问题。
优化了 ADO连接.执行(),加入了[更新行数]参数,能够获取实际数据更新的行数数量。
优化了 ADO连接查询和执行结果的判断处理。
加入了 ADO连接.查询() 增加了“字段信息”变量参数。只要SQL查询语句正确,无论是否存在值,都可以返回字段的名称和类型信息。
[WebSocket服务器]
加入了WebSocket服务器。
* 全面支持 RFC6455 规范
* 支持订阅通道和组播
* 支持给客户绑定任意属性
* 支持TLS(WSS)
* 线程安全
!!!由于现有的HTTP服务器没有实现HTTP2和多帧处理,所以暂时无法通过HTTP协议升级方式使用和HTTP服务器相同的端口,必须开启独立的WebSocket服务器端口。
加入了WebSocket防火墙功能。
优化了 WebSocket服务器 对象。修复了__stdcall引起的特殊场景下调用子程序错误的问题。修复了对象释放和服务器 停止() 方法等引起的问题。
[WebSocket客户端]
加入了 WebSocket客户端。全面支持 RFC6455 规范。
[通用缓存对象]
加入缓存接口和内存缓存的实现。
[全文索引引擎/全文索引文档]
加入了全文索引引擎的支持。支持Solr的常用操作和查询。
[数据验证器]
加入了验证器对象。可以用于数据验证表单验证等场景。
[文本过滤器]
加入了 文本过滤器 对象。可以进行文本批量替换或者非法关键字过滤等场景。
[示例项目]
新增示例:
加入WebSocket在线聊天室示例。
* 支持多房间
* 加入 在线用户数和用户列表 显示
* 加入 @用户 功能
* 加入 用户退出 消息推送
* 修复了不同用户同名时当前用户高亮色相同的问题
* 加入聊天记录持久化存储
加入HTTPS服务器(SSL)示例项目。
加入文件列表示例项目。
加入了 通用缓存对象 和 使用测试示例。通用缓存对象支持 内存缓存 和 Memcached分布式缓存。
[JimStoneCMS 和 调用示例]
加入了MySQL版本的支持。可在MySQL和SQLite之间无缝切换。
[对象工厂]
修复 创建列表() 函数文本参数内存被覆盖的问题。
修复 创建列表/创建键值对() 双精度小数和日期时间型类型无法匹配的问题。
加入了 创建验证码图像()功能。可以生成较复杂的验证码图片,适合大部分需要验证码的场景。普通的I7电脑上处理能力大概每秒能生成1100次左右的验证码图片。
加入了 创建验证码文本() 功能。可通过模板生成任意半角字符组成的任意长度验证码。
修复了创建键值表的潜在逻辑问题。在创建某些键值对失败时不会再出现崩溃的问题。
加入创建二维码和验证码的示例。
加入了 创建GUID文本() 函数可生成标准的UUID/GUID。
修复了创建文本()某些场景下出现乱码的问题。优化了效率输出文本更快。
[路径处理]
加入了 路径处理相关函数。支持针对路径和文件的各种处理和常规操作。
* 路径合并
* 路径取名称
* 路径取后缀名
* 路径取上级路径
* 路径取上级名称
* 路径是否为文件
* 路径是否为目录
* 路径格式化
* 路径复制目录
* 路径是否绝对路径
* 路径是否属于目录
* 路径取目录列表
* 路径取文件列表
* 路径取所有文件
* 路径创建多级目录
[其它]
加入了静态编译的支持(伪静态)。
合并个人版和高级版。E2EE将只保留一个版本。
加入了“请求头_”、“响应头_”、“配置项_”、“英请求头_”、“英响应头_”开头的五种类型的常量。
修复了随机数在同一秒内某些情况下产生重复的问题。影响主要为 创建验证码文本() 在循环等环境下会出现重复的问题。
修复了长时间运行时忽然替换新版本产生的崩溃问题。
[1.3]
模板编辑器:
优化模板编辑器运行机制。编辑器运行周期不依赖于服务器的重启。
加入快捷键(快捷键说明请参考官方文档)
加入服务器配置、请求参数和Cookies动态注入为模板变量的功能
加入编辑模式浏览器自动切换功能。通过修改服务器.置编辑模式 的状态更改,浏览器会自动切换到编辑/正常运行模式。(可在编辑器配置中关闭此功能)
加入编辑器配置。
编辑器允许手动更改效果渲染视图更新周期。
加入SQL存储过程动态传参:
所有数据库查询和执行的第二个参数更改为参数变量。相关的参数引用请往后做偏移处理(第二个参数前加个“,”)。
SQL参数可绑定数据类型。
加入“宽文本型”参数绑定。
加入快速SQL功能:
模板编辑器中可直接将SQL绑定到模板,SQL参数可直接注入为所有模板支持的相关变量。
模板功能:
修复条件判断中“!”开头的标签配对问题,允许使用取反{{?!变量}}{{/变量}}做条件判断。
加入变量和变量的等于判断。
优化 请求.取请求路径 命令加入[是否包含参数]参数。
修复 数据库连接.查询头条到自定义 命令。
数据库分页对象加入 取分页数据到模板格式() 方法。主要是方便生成统一格式的分页结果便于模板中使用。
重构了ORM对象映射保存机制。ORM加入宽文本支持。
服务器 对象加入 是否编辑模式 和 置编辑模式。随时在编辑和最终效果之间切换。
修复 ORM中逻辑型尺寸计算。
修复视图订阅标签检测问题。
SESSION保存机制优化为完成业务处理后统一保存。
重构了 MULTIPART 解析。
加入了 JSON/XML 等格式POST提交的支持。JSON会被自动映射为参数。
加入了 URL编码/解码的支持。详情见 请求.URL编码/URL解码 或 URL编码/URL解码。支持自定义编码格式。
加入了 时间和文本互转函数。命令 创建文本从时间/创建时间从文本。
修复了 ORM映射和数据库处理中的日期时间型转换格式混乱的问题。
加入了 请求.取发送数据 命令,可以获取用户发送的原始POST数据。
加入了 JimStoneCMS 内容管理系统。可用于正式项目使用。
[1.2]
加入模板编辑器
加入服务器编辑模式(使用 服务器.启动()第二个参数为真是开启编辑模式)
加入创建文本函数
加入创建二维码函数
加入日志监视工具1.0