[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+(?(\w+))_(?(\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