跟兄弟连学PHP

跟兄弟连学PHP
作者:
高洛峰
语言:
中文
类型:
EPUB
页数:
861页
大小:
92.77 MB
出版社:
电子工业出版社
出版时间:
2015-11-30
ISBN:
9787121278013
分类:

内容简介

本书是畅销书《细说PHP(第2版)》升级版。
PHP是当前开发Web应用系统最理想的工具,它易于使用、功能强大、成本低廉、高安全性、开发速度快且执行灵活,应用非常广泛。
全书以实用为设计目标,包含PHP开发最主流的各项技术,对每一个知识点都进行了深入详细的讲解,并附有大量的 实例代码,图文并茂,系统地介绍了PHP的相关技术及其在实际Web开发中的应用。

本书是《细说PHP》第三版,全书共6个部分,分为32个章节,每章都是PHP独立知识点的总结。
内容涵盖了动态网站开发的前端技术(HTML5)、企业现在主流应用版本PHP 5.4为主的语法、PHP的常用功能模块和实用技巧、MySQL数据库的设计与应用、PHP 面向对象的程序设计思想、数据库抽象层PDO、Smarty模板技术、Web开发的设计模式、自定义PHP技术框架最新版BroPHP 2.0、重新开发包括完整流程的极具参考价值的Web项目(BroShop)等内容。
每章都有大量的实用示例及详尽的注释,以加速读者的理解和学习,同时为每章的技术点设置了大量的自测试题。
最重要的是本书全部内容都有精心录制的配套教学视频覆盖,视频中真人出镜、师生互动、讲解生动、操作性强,并且多数技术概念以微电影形式穿插在视频中进行讲解说明。

对于PHP应用开发的新手而言,本书不失为一本好的入门教材,内容既实用又全面,所有实例都可以在开发中直接应用,并辅以大量的视频教程,使读者轻松掌握所学知识。
另外,本书也适合有一定基础的网络开发人员和网络爱好者,以及大中专院校的师生阅读与参考。
不仅可以作为PHP开发的学习用书,还可以作为从事Web开发的程序员的参考用书和必备手册。
对于行家来说,本书也是一本难得的参考手册,读者必将从中获益。

作者简介

兄弟连IT教育,成立于2006年,中国PHP培训领导者,九年专注PHP教育,所发布的PHP视频教程,出版的PHP图书,开设的PHP培训班,推动了国内PHP技术发展,培养了众多的PHP程序员,堪称PHP程序员的黄埔军校。

兄弟连以“优秀的教学、严格的管理、职业素质课贯穿始终”而闻名,现已开设PHP、UI、HTML5、Java/Android、iOS、Linux等众多课程,分别在北京、上海、广州、沈阳、扬州、苏州、郑州、济南设立校区,今后会陆续在成都、西安、武汉等地建设校区,每年有数十万名学员受益于兄弟连的职业培训、教学视频、网络公开课、院校讲座、出版书籍。

我们相信,我们不仅仅是老师,更是学员的梦想守护者与职场引路人。

目录

第1部分 Web开发入门篇
第1章 LAMP网站构建 2
1.1 介绍Web给你认识 2
1.1.1 Web应用的优势 3
1.1.2 Web 2.0时代的互联网 4
1.1.3 Web开发标准 6
1.1.4 认识脚本语言 7
1.2 动态网站开发所需的Web构件 7
1.2.1 客户端浏览器 8
1.2.2 超文本标记语言(HTML) 9
1.2.3 层叠样式表(CSS) 10
1.2.4 客户端脚本编程语言JavaScript 11
1.2.5 Web服务器 11
1.2.6 服务器端编程语言 12
1.2.7 数据库管理系统 13
1.3 几种主流的Web应用程序平台 14
1.3.1 Web应用程序开发平台对比分析 14
1.3.2 动态网站开发平台技术比较 15
1.4 HTTP协议与Web的关系 16
1.4.1 HTTP协议概述 16
1.4.2 HTTP协议结构 18
1.4.3 HTTP请求消息 18
1.4.4 HTTP响应消息 19
1.4.5 URL概述 20
1.5 Web的工作原理 20
1.5.1 情景1:服务器不带应用程序服务器
和数据库 21
1.5.2 情景2:带应用程序服务器的Web
服务器 22
1.5.3 情景3:浏览器访问服务器端的数据库 23
1.6 LAMP网站开发组合概述 23
1.6.1 Linux操作系统 23
1.6.2 Web服务器Apache 24
1.6.3 MySQL数据库管理系统 24
1.6.4 PHP后台脚本编程语言 25
1.6.5 LAMP的发展趋势 27
1.6.6 Web的未来发展 28
1.7 如何学习PHP 28
1.7.1 确定学习的目标 29
1.7.2 PHP学习线路图 29
1.7.3 坚持动手实验 31
1.7.4 要事为先的原则 31
1.7.5 Bug解决之道 32
1.7.6 看教学视频,让学习变得简单 33
1.7.7 优秀的Web程序员是怎样练成的 33
1.8 小结 35
本章必须掌握的知识点 35
本章需要了解的内容 35
第2章 HTML的设计与应用 36
2.1 网页制作概述 36
2.1.1 HTML基础 36
2.1.2 简单HTML实例制作 37
2.2 HTML语言的语法 38
2.2.1 HTML标签和元素 38
2.2.2 HTML语法不区分字母大小写 38
2.2.3 HTML标签属性 39
2.2.4 HTML颜色值的设置 39
2.2.5 HTML文档注释 39
2.2.6 HTML代码格式 39
2.2.7 HTML字符实体 40
2.3 HTML文件的主体结构 40
2.4 HTML文档头部元素 41
2.4.1 元素 41<br /> 2.4.2 <base>元素 41<br /> 2.4.3 <link>元素 42<br /> 2.4.4 <meta>元素 42<br /> 2.5 HTML文档主体标记 43<br /> 2.6 文字版面的编辑 43<br /> 2.6.1 格式标签 44<br /> 2.6.2 文本标签 45<br /> 2.7 创建图像和链接 47<br /> 2.7.1 插入图片 47<br /> 2.7.2 建立锚点和超链接 48<br /> 2.8 使用HTML表格 48<br /> 2.9 HTML框架结构 51<br /> 2.10 HTML表单设计 53<br /> 2.11 小结 57<br /> 本章必须掌握的知识点 57<br /> 本章需要了解的内容 58<br /> 本章需要拓展的内容 58<br /> 本章的学习建议 58<br /> 第3章 层叠样式表 59<br /> 3.1 CSS简介 59<br /> 3.2 CSS规则的组成 60<br /> 3.2.1 CSS注释 61<br /> 3.2.2 长度单位 62<br /> 3.2.3 颜色单位和URL值 62<br /> 3.3 在HTML文档中放置CSS的几种方式 63<br /> 3.3.1 内联样式表 63<br /> 3.3.2 嵌入一张样式表 63<br /> 3.3.3 链接到一张外部的样式表 63<br /> 3.4 CSS选择器 64<br /> 3.4.1 HTML选择器 64<br /> 3.4.2 类选择器 64<br /> 3.4.3 ID选择器 65<br /> 3.4.4 关联选择器 65<br /> 3.4.5 组合选择器 65<br /> 3.4.6 伪元素选择器 66<br /> 3.5 CSS常见的样式属性和值 66<br /> 3.5.1 字体属性 66<br /> 3.5.2 颜色属性 67<br /> 3.5.3 背景属性 67<br /> 3.5.4 文本属性 68<br /> 3.5.5 边框属性 68<br /> 3.5.6 鼠标光标属性 70<br /> 3.5.7 列表属性 70<br /> 3.5.8 综合实例 71<br /> 3.6 小结 73<br /> 本章必须掌握的知识点 73<br /> 本章需要了解的内容 73<br /> 本章需要拓展的内容 73<br /> 本章的学习建议 74<br /> 第4章 DIV+CSS网页标准化布局 75<br /> 4.1 DIV+CSS对页面布局的优势 75<br /> 4.2 “无意义”的HTML元素div和span 76<br /> 4.3 W3C盒子模型 76<br /> 4.4 和页面布局有关的CSS属性 78<br /> 4.5 盒子区块框的定位 79<br /> 4.5.1 相对定位 80<br /> 4.5.2 绝对定位 80<br /> 4.6 使用盒子模型的浮动布局 81<br /> 4.6.1 设置浮动 81<br /> 4.6.2 行框和清理 82<br /> 4.7 DIV+CSS的兼容性问题 84<br /> 4.7.1 不同浏览器解释盒子模型的差异 85<br /> 4.7.2 设置浏览器去遵循W3C标准 86<br /> 4.8 使用盒子模型设计页面布局 87<br /> 4.8.1 居中设计 87<br /> 4.8.2 设置两列浮动的布局 88<br /> 4.8.3 设置三列浮动的布局 89<br /> 4.8.4 设置多列浮动的布局 90<br /> 4.9 DIV+CSS网站首页布局示例 91<br /> 4.9.1 HTML文件的设计 91<br /> 4.9.2 CSS文件设计 93<br /> 4.10 小结 95<br /> 本章必须掌握的知识点 95<br /> 本章需要了解的内容 95<br /> 本章需要拓展的内容 95<br /> 本章的学习建议 95<br /> 第5章 HTML5与CSS3的应用 96<br /> 5.1 现在是用HTML5的时候 96<br /> 5.2 HTML5语法的改变 97<br /> 5.2.1 HTML5中的标记方法 97<br /> 5.2.2 HTML5做到了与之前版本的兼容 98<br /> 5.2.3 HTML5语法改变的简单示例 99<br /> 5.3 HTML5新增和废除的元素 99<br /> 5.3.1 新增的结构元素 99<br /> 5.3.2 HTML5表单增加的新特性 101<br /> 5.3.3 新增多媒体播放元素 104<br /> 5.3.4 新增的其他元素 105<br /> 5.3.5 废除的元素 106<br /> 5.4 HTML5新增和废除的属性 106<br /> 5.5 HTML5的高级功能介绍 108<br /> 5.6 CSS3概述 109<br /> 5.6.1 CSS3在选择器上的支持 109<br /> 5.6.2 CSS3在样式上的支持 109<br /> 5.6.3 CSS3对于动画的支持 109<br /> 5.6.4 在实际开发中该如何使用CSS3 110<br /> 5.7 CSS3中的样式选择器 110<br /> 5.7.1 基本选择器 110<br /> 5.7.2 多元素的组合选择器 111<br /> 5.7.3 属性选择器 111<br /> 5.7.4 结构性伪类选择器 112<br /> 5.8 CSS3的样式属性 113<br /> 5.8.1 使用CSS3属性前的准备 114<br /> 5.8.2 边框属性 114<br /> 5.8.3 背景属性 115<br /> 5.8.4 文本属性 116<br /> 5.8.5 用户界面属性 117<br /> 5.8.6 动画属性 117<br /> 5.8.7 多列布局属性 118<br /> 5.8.8 渐变属性 118<br /> 5.8.9 透明属性 119<br /> 5.8.10 旋转属性 119<br /> 5.8.11 服务器端字体属性 119<br /> 5.9 使用HTML5中的新增元素来构建<br /> 网页 120<br /> 5.10 LESS CSS框架简介 124<br /> 5.11 响应式布局 125<br /> 5.11.1 响应式布局的优缺点 125<br /> 5.11.2 响应式布局该怎么设计 126<br /> 5.11.3 响应式布局实例 126<br /> 5.11.4 Media Queries的使用方法 128<br /> 5.11.5 在移动设备上设置原始大小显示 132<br /> 5.11.6 响应式网站的内容设计 132<br /> 5.11.7 响应式网站的设计流程 134<br /> 5.12 Web前端CSS框架Bootstrap介绍 134<br /> 5.12.1 Bootstrap的主要功能 135<br /> 5.12.2 Bootstrap的页面布局和排版 135<br /> 5.12.3 页面下拉菜单 135<br /> 5.12.4 Bootstrap的优点和不足 136<br /> 5.13 小结 137<br /> 本章必须掌握的知识点 137<br /> 本章需要了解的内容 137<br /> 本章需要拓展的内容 137<br /> 本章的学习建议 137<br /> 第2部分 PHP基础篇<br /> 第6章 从搭建你的PHP开发环境开始 139<br /> 6.1 几种常见的PHP环境安装方式 139<br /> 6.1.1 Linux系统下源代码包方式安装<br /> 环境 139<br /> 6.1.2 在Windows系统上安装Web<br /> 工作环境 140<br /> 6.1.3 搭建学习型的PHP工作环境 140<br /> 6.2 环境安装对操作系统的选择 140<br /> 6.2.1 选择网站运营的操作系统 141<br /> 6.2.2 选择网站开发的操作系统 141<br /> 6.3 安装集成PHP开发环境 141<br /> 6.3.1 安装前准备 142<br /> 6.3.2 安装步骤 142<br /> 6.3.3 环境测试 143<br /> 6.4 改变文档根目录www的位置 145<br /> 6.5 phpMyAdmin的配置与应用 146<br /> 6.5.1 HTTP身份验证模式 146<br /> 6.5.2 Cookie身份验证模式 147<br /> 6.5.3 config身份验证模式 147<br /> 6.5.4 修改MySQL默认的访问权限 148<br /> 6.6 小结 149<br /> 本章必须掌握的知识点 149<br /> 本章需要了解的内容 149<br /> 本章需要拓展的内容 149<br /> 第7章 PHP的基本语法 150<br /> 7.1 PHP在Web开发中的应用 150<br /> 7.1.1 就从认识PHP开始吧 150<br /> 7.1.2 PHP都能做什么 151<br /> 7.2 第一个PHP脚本程序 153<br /> 7.3 PHP语言标记 156<br /> 7.3.1 将PHP代码嵌入HTML中的位置 157<br /> 7.3.2 解读开始和结束标记 157<br /> 7.4 指令分隔符“分号” 158<br /> 7.5 程序注释 159<br /> 7.6 在程序中使用空白的处理 160<br /> 7.7 变量 161<br /> 7.7.1 变量的声明 161<br /> 7.7.2 变量的命名 162<br /> 7.7.3 可变变量 164<br /> 7.7.4 变量的引用赋值 164<br /> 7.8 变量的类型 165<br /> 7.8.1 类型介绍 165<br /> 7.8.2 布尔型(boolean) 166<br /> 7.8.3 整型(integer) 167<br /> 7.8.4 浮点型(float或double) 167<br /> 7.8.5 字符串(string) 168<br /> 7.8.6 数组(array) 170<br /> 7.8.7 对象(object) 171<br /> 7.8.8 资源类型(resource) 171<br /> 7.8.9 NULL类型 172<br /> 7.8.10 伪类型介绍 172<br /> 7.9 数据类型之间相互转换 173<br /> 7.9.1 自动类型转换 173<br /> 7.9.2 强制类型转换 174<br /> 7.9.3 类型转换细节 174<br /> 7.9.4 变量类型的测试函数 175<br /> 7.10 常量 176<br /> 7.10.1 常量的定义和使用 176<br /> 7.10.2 常量和变量 177<br /> 7.10.3 系统中的预定义常量 177<br /> 7.10.4 PHP中的魔术常量 177<br /> 7.11 PHP中的运算符 178<br /> 7.11.1 算术运算符 179<br /> 7.11.2 字符串运算符 181<br /> 7.11.3 赋值运算符 181<br /> 7.11.4 比较运算符 182<br /> 7.11.5 逻辑运算符 183<br /> 7.11.6 位运算符 184<br /> 7.11.7 其他运算符 187<br /> 7.11.8 运算符的优先级 188<br /> 7.12 表达式 189<br /> 7.13 小结 190<br /> 本章必须掌握的知识点 190<br /> 本章需要了解的内容 190<br /> 本章需要拓展的内容 190<br /> 第8章 PHP的流程控制结构 191<br /> 8.1 分支结构 191<br /> 8.1.1 单一条件分支结构(if) 192<br /> 8.1.2 双向条件分支结构(else子句) 193<br /> 8.1.3 多向条件分支结构(elseif子句) 193<br /> 8.1.4 多向条件分支结构(switch语句) 195<br /> 8.1.5 巢状条件分支结构 197<br /> 8.1.6 条件分支结构实例应用(简单计算器) 197<br /> 8.2 循环结构 199<br /> 8.2.1 while语句 200<br /> 8.2.2 do…while循环 202<br /> 8.2.3 for语句 203<br /> 8.3 特殊的流程控制语句 205<br /> 8.3.1 break语句 205<br /> 8.3.2 continue语句 206<br /> 8.3.3 exit语句 207<br /> 8.4 PHP的新版特性——goto语句 207<br /> 8.5 小结 209<br /> 本章必须掌握的知识点 209<br /> 本章需要了解的内容 209<br /> 第9章 PHP的函数应用 210<br /> 9.1 函数的定义 210<br /> 9.2 自定义函数 211<br /> 9.2.1 函数的声明 211<br /> 9.2.2 函数的调用 213<br /> 9.2.3 函数的参数 214<br /> 9.2.4 函数的返回值 215<br /> 9.3 函数的工作原理和结构化编程 216<br /> 9.4 PHP变量的范围 217<br /> 9.4.1 局部变量 217<br /> 9.4.2 全局变量 218<br /> 9.4.3 静态变量 220<br /> 9.5 声明及应用各种形式的PHP函数 220<br /> 9.5.1 常规参数的函数 221<br /> 9.5.2 伪类型参数的函数 222<br /> 9.5.3 引用参数的函数 222<br /> 9.5.4 默认参数的函数 223<br /> 9.5.5 可变个数参数的函数 225<br /> 9.5.6 回调函数 226<br /> 9.6 递归函数 230<br /> 9.7 使用自定义函数库 231<br /> 9.8 PHP匿名函数和闭包 232<br /> 9.9 小结 233<br /> 本章必须掌握的知识点 233<br /> 本章需要了解的内容 233<br /> 本章需要拓展的内容 233<br /> 第10章 PHP中的数组与数据结构 234<br /> 10.1 数组的分类 234<br /> 10.2 数组的定义 236<br /> 10.2.1 直接赋值的方式声明数组 236<br /> 10.2.2 使用array()语言结构新建数组 238<br /> 10.2.3 多维数组的声明 238<br /> 10.3 数组的遍历 240<br /> 10.3.1 使用for语句循环遍历数组 241<br /> 10.3.2 使用foreach语句遍历数组 242<br /> 10.3.3 联合使用list( )、each( )和while<br /> 循环遍历数组 245<br /> 10.3.4 使用数组的内部指针控制函数遍<br /> 历数组 247<br /> 10.4 预定义数组 248<br /> 10.4.1 服务器变量:$_SERVER 249<br /> 10.4.2 环境变量:$_ENV 250<br /> 10.4.3 URL GET变量:$_GET 250<br /> 10.4.4 HTTP POST变量:$_POST 251<br /> 10.4.5 request变量:$_REQUEST 252<br /> 10.4.6 HTTP文件上传变量:$_FILES 252<br /> 10.4.7 HTTP Cookies:$_COOKIE 252<br /> 10.4.8 Session变量:$_SESSION 252<br /> 10.4.9 Global变量:$GLOBALS 253<br /> 10.5 数组的相关处理函数 253<br /> 10.5.1 数组的键/值操作函数 253<br /> 10.5.2 统计数组元素的个数和唯一性 256<br /> 10.5.3 使用回调函数处理数组的函数 257<br /> 10.5.4 数组的排序函数 261<br /> 10.5.5 拆分、合并、分解和接合数组 265<br /> 10.5.6 数组与数据结构 267<br /> 10.5.7 其他有用的数组处理函数 269<br /> 10.6 操作PHP数组需要注意的一些细节 271<br /> 10.6.1 数组运算符号 271<br /> 10.6.2 删除数组中的元素操作 272<br /> 10.6.3 关于数组下标的注意事项 272<br /> 10.7 小结 273<br /> 本章必须掌握的知识点 273<br /> 本章需要了解的内容 273<br /> 本章需要拓展的内容 273<br /> 第11章 PHP面向对象的程序设计 274<br /> 11.1 面向对象的介绍 274<br /> 11.1.1 类和对象之间的关系 275<br /> 11.1.2 面向对象的程序设计 275<br /> 11.2 如何抽象一个类 276<br /> 11.2.1 类的声明 276<br /> 11.2.2 成员属性 277<br /> 11.2.3 成员方法 278<br /> 11.3 通过类实例化对象 279<br /> 11.3.1 实例化对象 280<br /> 11.3.2 对象类型在内存中的分配 281<br /> 11.3.3 对象中成员的访问 282<br /> 11.3.4 特殊的对象引用“$this” 284<br /> 11.3.5 构造方法与析构方法 286<br /> 11.4 封装性 288<br /> 11.4.1 设置私有成员 289<br /> 11.4.2 私有成员的访问 290<br /> 11.4.3 __set()、__get()、__isset()和__unset()<br /> 4个方法 292<br /> 11.5 继承性 297<br /> 11.5.1 类继承的应用 297<br /> 11.5.2 访问类型控制 299<br /> 11.5.3 子类中重载父类的方法 301<br /> 11.6 常见的关键字和魔术方法 303<br /> 11.6.1 final关键字的应用 303<br /> 11.6.2 static关键字的使用 304<br /> 11.6.3 单态设计模式 305<br /> 11.6.4 const关键字 307<br /> 11.6.5 instanceof关键字 307<br /> 11.6.6 克隆对象 307<br /> 11.6.7 类中通用的方法__toString() 309<br /> 11.6.8 __call()方法的应用 309<br /> 11.6.9 自动加载类 311<br /> 11.6.10 对象串行化 312<br /> 11.7 抽象类与接口 315<br /> 11.7.1 抽象类 315<br /> 11.7.2 接口技术 316<br /> 11.8 多态性的应用 318<br /> 11.9 PHP 5.4的Trait特性 320<br /> 11.9.1 Trait的声明 320<br /> 11.9.2 Trait的基本使用 320<br /> 11.10 PHP 5.3版本以后新增加的命名空间 323<br /> 11.10.1 命名空间的基本应用 323<br /> 11.10.2 命名空间的子空间和公共空间 325<br /> 11.10.3 命名空间中的名称和术语 326<br /> 11.10.4 别名和导入 326<br /> 11.11 面向对象版图形计算器 328<br /> 11.11.1 需求分析 328<br /> 11.11.2 功能设计及实现 329<br /> 11.11.3 类的组织架构 334<br /> 11.12 小结 335<br /> 本章必须掌握的知识点 335<br /> 本章需要了解的内容 336<br /> 本章需要拓展的内容 336<br /> 第12章 字符串处理 337<br /> 12.1 字符串的处理介绍 337<br /> 12.1.1 字符串的处理方式 337<br /> 12.1.2 字符串类型的特点 338<br /> 12.1.3 双引号中的变量解析总结 338<br /> 12.2 常用的字符串输出函数 339<br /> 12.3 常用的字符串格式化函数 342<br /> 12.3.1 去除空格和字符串填补函数 342<br /> 12.3.2 字符串大小写的转换 343<br /> 12.3.3 和HTML标签相关的字符串<br /> 格式化 344<br /> 12.3.4 其他字符串格式化函数 348<br /> 12.4 字符串比较函数 349<br /> 12.4.1 按字节顺序进行字符串比较 349<br /> 12.4.2 按自然排序进行字符串比较 350<br /> 12.5 小结 351<br /> 本章必须掌握的知识点 351<br /> 本章需要拓展的内容 351<br /> 第13章 正则表达式 352<br /> 13.1 正则表达式简介 352<br /> 13.2 正则表达式的语法规则 353<br /> 13.2.1 定界符 354<br /> 13.2.2 原子 354<br /> 13.2.3 元字符 356<br /> 13.2.4 模式修正符 359<br /> 13.3 与Perl兼容的正则表达式函数 360<br /> 13.3.1 字符串的匹配与查找 360<br /> 13.3.2 字符串的替换 363<br /> 13.3.3 字符串的分割和连接 368<br /> 13.4 文章发布操作示例 370<br /> 13.5 小结 375<br /> 本章必须掌握的知识点 375<br /> 本章需要了解的内容 375<br /> 本章需要拓展的内容 375<br /> 第3部分 PHP常用功能模块篇<br /> 第14章 PHP的错误和异常处理 377<br /> 14.1 错误处理 377<br /> 14.1.1 错误报告级别 378<br /> 14.1.2 调整错误报告级别 378<br /> 14.1.3 使用trigger_error()函数代替die()<br /> 函数 380<br /> 14.1.4 自定义错误处理 380<br /> 14.1.5 写错误日志 382<br /> 14.2 异常处理 384<br /> 14.2.1 异常处理实现 385<br /> 14.2.2 扩展PHP内置的异常处理类 385<br /> 14.2.3 捕获多个异常 387<br /> 14.3 小结 389<br /> 本章必须掌握的知识点 389<br /> 本章需要了解的内容 389<br /> 第15章 PHP的日期和时间 390<br /> 15.1 UNIX时间戳 390<br /> 15.1.1 将日期和时间转变成UNIX<br /> 时间戳 390<br /> 15.1.2 日期的计算 392<br /> 15.2 在PHP中获取日期和时间 392<br /> 15.2.1 调用getdate()函数取得日期/时间<br /> 信息 392<br /> 15.2.2 日期和时间格式化输出 393<br /> 15.3 修改PHP的默认时区 394<br /> 15.4 使用微秒计算PHP脚本执行时间 395<br /> 15.5 日历类 396<br /> 15.6 小结 400<br /> 本章必须掌握的知识点 400<br /> 本章需要了解的内容 400<br /> 本章需要拓展的内容 400<br /> 本章的学习建议 400<br /> 第16章 文件系统处理 401<br /> 16.1 文件系统概述 401<br /> 16.1.1 文件类型 401<br /> 16.1.2 文件的属性 402<br /> 16.2 目录的基本操作 405<br /> 16.2.1 解析目录路径 405<br /> 16.2.2 遍历目录 406<br /> 16.2.3 统计目录大小 408<br /> 16.2.4 建立和删除目录 409<br /> 16.2.5 复制目录 409<br /> 16.3 文件的基本操作 410<br /> 16.3.1 文件的打开与关闭 410<br /> 16.3.2 写入文件 412<br /> 16.3.3 读取文件内容 413<br /> 16.3.4 访问远程文件 415<br /> 16.3.5 移动文件指针 416<br /> 16.3.6 文件的锁定机制 417<br /> 16.3.7 文件的一些基本操作函数 420<br /> 16.4 文件的上传与下载 421<br /> 16.4.1 文件上传 421<br /> 16.4.2 处理多个文件上传 424<br /> 16.4.3 文件下载 425<br /> 16.5 设计经典的文件上传类 426<br /> 16.5.1 需求分析 426<br /> 16.5.2 程序设计 427<br /> 16.5.3 文件上传类代码实现 427<br /> 16.5.4 文件上传类的应用过程 432<br /> 16.6 小结 433<br /> 本章必须掌握的知识点 433<br /> 本章需要了解的内容 434<br /> 本章需要拓展的内容 434<br /> 本章的学习建议 434<br /> 第17章 PHP动态图像处理 435<br /> 17.1 PHP中GD库的使用 435<br /> 17.1.1 画布管理 436<br /> 17.1.2 设置颜色 437<br /> 17.1.3 生成图像 438<br /> 17.1.4 绘制图像 438<br /> 17.1.5 在图像中绘制文字 440<br /> 17.2 设计经典的验证码类 443<br /> 17.2.1 设计验证码类 443<br /> 17.2.2 应用验证码类的实例对象 446<br /> 17.2.3 表单中应用验证码 446<br /> 17.2.4 实例演示 447<br /> 17.3 PHP图片处理 447<br /> 17.3.1 图片背景管理 447<br /> 17.3.2 图片缩放 449<br /> 17.3.3 图片裁剪 450<br /> 17.3.4 添加图片水印 451<br /> 17.3.5 图片旋转和翻转 453<br /> 17.4 设计经典的图像处理类 455<br /> 17.4.1 需求分析 455<br /> 17.4.2 程序设计 456<br /> 17.4.3 图像处理类代码实现 456<br /> 17.4.4 图像处理类的应用过程 461<br /> 17.5 小结 463<br /> 本章必须掌握的知识点 463<br /> 本章需要了解的内容 463<br /> 本章需要拓展的内容 463<br /> 第4部分 数据库开发篇<br /> 第18章 MySQL数据库概述 465<br /> 18.1 数据库的应用 465<br /> 18.1.1 数据库在Web开发中的重要地位 466<br /> 18.1.2 为什么PHP会选择MySQL作为<br /> 自己的黄金搭档 466<br /> 18.1.3 PHP和MySQL的合作方式 466<br /> 18.1.4 结构化查询语言SQL 467<br /> 18.2 MySQL数据库的常见操作 468<br /> 18.2.1 MySQL数据库的连接与关闭 468<br /> 18.2.2 创建新用户并授权 469<br /> 18.2.3 创建数据库 469<br /> 18.2.4 创建数据表 470<br /> 18.2.5 数据表内容的简单管理 471<br /> 18.3 小结 472<br /> 本章必须掌握的知识点 472<br /> 第19章 MySQL数据表的设计 473<br /> 19.1 数据表(Table) 473<br /> 19.2 数据值和列类型 474<br /> 19.2.1 数值类的数据列类型 474<br /> 19.2.2 字符串类的数据列类型 475<br /> 19.2.3 日期和时间类的数据列类型 476<br /> 19.2.4 NULL值 477<br /> 19.2.5 类型转换 477<br /> 19.3 数据字段属性 477<br /> 19.4 数据表对象管理 478<br /> 19.4.1 创建表(CREATE TABLE) 478<br /> 19.4.2 修改表(ALTER TABLE) 479<br /> 19.4.3 删除表(DROP TABLE) 480<br /> 19.5 数据表的类型及存储位置 481<br /> 19.5.1 MyISAM数据表 481<br /> 19.5.2 InnoDB数据表 481<br /> 19.5.3 如何选择InnoDB还是MyISAM<br /> 表类型 481<br /> 19.5.4 数据表的存储位置 482<br /> 19.6 数据表的默认字符集 482<br /> 19.6.1 字符集 483<br /> 19.6.2 字符集支持原理 483<br /> 19.6.3 创建数据对象时修改字符集 484<br /> 19.7 创建索引 484<br /> 19.7.1 主键索引(PRIMARY KEY) 484<br /> 19.7.2 唯一索引(UNIQUE) 485<br /> 19.7.3 常规索引(INDEX) 486<br /> 19.7.4 全文索引(FULLTEXT) 486<br /> 19.8 规范化 487<br /> 19.8.1 起点 487<br /> 19.8.2 第一范式 488<br /> 19.8.3 第二范式 489<br /> 19.8.4 第三范式 490<br /> 19.8.5 规范化理论 491<br /> 19.9 数据库的设计技巧 492<br /> 19.9.1 数据库的设计要求 492<br /> 19.9.2 命名的技巧 492<br /> 19.9.3 数据库具体设计工作中的技巧 493<br /> 19.10 小结 493<br /> 本章必须掌握的知识点 493<br /> 本章需要了解的内容 493<br /> 本章需要拓展的内容 493<br /> 第20章 SQL语句设计 494<br /> 20.1 操作数据表中的数据记录(DML) 494<br /> 20.1.1 使用INSERT语句向数据表中添加<br /> 数据 494<br /> 20.1.2 使用UPDATE语句更新数据表中已<br /> 存在的数据 495<br /> 20.1.3 使用DELETE语句删除数据表中不<br /> 需要的数据记录 496<br /> 20.2 通过DQL命令查询数据表中的数据 497<br /> 20.2.1 选择特定的字段 497<br /> 20.2.2 使用AS子句为字段取别名 498<br /> 20.2.3 DISTINCT关键字的使用 498<br /> 20.2.4 在SELECT语句中使用表达式的列 499<br /> 20.2.5 使用WHERE子句按条件检索 499<br /> 20.2.6 根据空值(NULL)确定检索条件 501<br /> 20.2.7 使用BETWEEN AND进行范围<br /> 比较查询 501<br /> 20.2.8 使用IN进行范围比对查询 501<br /> 20.2.9 使用LIKE进行模糊查询 501<br /> 20.2.10 多表查询(连接查询) 502<br /> 20.2.11 嵌套查询(子查询) 504<br /> 20.2.12 使用ORDER BY对查询结果排序 505<br /> 20.2.13 使用LIMIT限定结果行数 505<br /> 20.2.14 使用统计函数 506<br /> 20.2.15 使用GROUP BY对查询结果<br /> 分组 507<br /> 20.3 查询优化 508<br /> 20.4 小结 509<br /> 本章必须掌握的知识点 509<br /> 本章需要拓展的内容 509<br /> 本章的学习建议 509<br /> 第21章 PHP访问MySQL的扩展函数 510<br /> 21.1 PHP访问MySQL数据库服务器<br /> 的流程 510<br /> 21.2 在PHP脚本中连接MySQL服务器 512<br /> 21.2.1 在PHP程序中选择已创建的数据库 513<br /> 21.2.2 执行SQL命令 513<br /> 21.2.3 在PHP脚本中处理SELECT查询<br /> 结果集 515<br /> 21.3 设计完美分页类 517<br /> 21.3.1 需求分析 517<br /> 21.3.2 程序设计 517<br /> 21.3.3 完美分页类的代码实现 518<br /> 21.3.4 分页类的应用过程 522<br /> 21.4 管理books表实例 525<br /> 21.4.1 需求分析 525<br /> 21.4.2 程序设计 526<br /> 21.5 PHP的mysqli扩展介绍 533<br /> 21.5.1 启用mysqli扩展模块 533<br /> 21.5.2 mysqli扩展接口的应用概述 534<br /> 21.6 小结 535<br /> 本章必须掌握的知识点 535<br /> 本章需要了解的内容 535<br /> 本章需要拓展的内容 535<br /> 本章的学习建议 535<br /> 第22章 数据库抽象层PDO 536<br /> 22.1 PDO所支持的数据库 536<br /> 22.2 PDO的安装 537<br /> 22.3 创建PDO对象 538<br /> 22.3.1 以多种方式调用构造方法 539<br /> 22.3.2 PDO对象中的成员方法 541<br /> 22.4 使用PDO对象 542<br /> 22.4.1 调整PDO的行为属性 542<br /> 22.4.2 PDO处理PHP程序和数据库之间的<br /> 数据类型转换 542<br /> 22.4.3 PDO的错误处理模式 543<br /> 22.4.4 使用PDO执行SQL语句 544<br /> 22.5 PDO对预处理语句的支持 546<br /> 22.5.1 了解PDOStatement对象 546<br /> 22.5.2 准备语句 547<br /> 22.5.3 绑定参数 548<br /> 22.5.4 执行准备好的查询 549<br /> 22.5.5 获取数据 550<br /> 22.5.6 大数据对象的存取 554<br /> 22.6 PDO的事务处理 554<br /> 22.6.1 MySQL的事务处理 555<br /> 22.6.2 构建事务处理的应用程序 555<br /> 22.7 小结 557<br /> 本章必须掌握的知识点 557<br /> 本章需要了解的内容 557<br /> 本章需要拓展的内容 557<br /> 第5部分 PHP开发高级篇<br /> 第23章 MemCache管理与应用 559<br /> 23.1 MemCache概述 559<br /> 23.1.1 初识MemCache 559<br /> 23.1.2 MemCache在Web中的应用 560<br /> 23.2 memcached的安装及管理 562<br /> 23.2.1 Linux下安装MemCache软件 562<br /> 23.2.2 Windows下安装MemCache软件 562<br /> 23.2.3 memcached服务器的管理 563<br /> 23.3 使用Telnet作为memcached的客户端<br /> 管理 564<br /> 23.3.1 连接memcached服务器 564<br /> 23.3.2 基本的memcached客户端命令 564<br /> 23.3.3 查看当前memcached服务器的运行<br /> 状态信息 565<br /> 23.3.4 数据管理指令 565<br /> 23.4 PHP的memcached管理接口 566<br /> 23.4.1 安装PHP中的MemCache应用程序<br /> 扩展接口 567<br /> 23.4.2 MemCache应用程序扩展接口 568<br /> 23.4.3 MemCache的实例应用 573<br /> 23.5 memcached服务器的安全防护 574<br /> 23.6 小结 574<br /> 本章必须掌握的知识点 574<br /> 本章需要了解的内容 575<br /> 本章需要拓展的内容 575<br /> 第24章 会话控制 576<br /> 24.1 为什么要使用会话控制 576<br /> 24.2 会话跟踪的方式 577<br /> 24.3 Cookie的应用 577<br /> 24.3.1 Cookie概述 578<br /> 24.3.2 向客户端计算机中设置Cookie 578<br /> 24.3.3 在PHP脚本中读取Cookie的资料<br /> 内容 580<br /> 24.3.4 数组形态的Cookie应用 580<br /> 24.3.5 删除Cookie 581<br /> 24.3.6 基于Cookie的用户登录模块 581<br /> 24.4 Session的应用 583<br /> 24.4.1 Session概述 583<br /> 24.4.2 配置Session 584<br /> 24.4.3 Session的声明与使用 585<br /> 24.4.4 注册一个会话变量和读取Session 585<br /> 24.4.5 注销变量与销毁Session 586<br /> 24.4.6 Session的自动回收机制 587<br /> 24.4.7 传递Session ID 588<br /> 24.5 一个简单的邮件系统实例 591<br /> 24.5.1 为邮件系统准备数据 591<br /> 24.5.2 编码实现邮件系统 592<br /> 24.5.3 邮件系统执行说明 594<br /> 24.6 自定义Session处理方式 595<br /> 24.6.1 自定义Session的存储机制 595<br /> 24.6.2 使用数据库处理Session信息 598<br /> 24.6.3 使用memcached处理Session信息 601<br /> 24.7 小结 604<br /> 本章必须掌握的知识点 604<br /> 本章需要了解的内容 604<br /> 本章需要拓展的内容 604<br /> 第25章 PHP的CURL功能扩展模块 605<br /> 25.1 CURL功能模块介绍 605<br /> 25.2 PHP的CURL功能扩展模块基本<br /> 用法 606<br /> 25.3 CURL相关的功能选项 607<br /> 25.4 通过CURL扩展获取页面信息 609<br /> 25.5 通过CURL扩展用POST方法发送<br /> 数据 610<br /> 25.6 通过CURL扩展进行文件上传 612<br /> 25.7 通过CURL模拟登录并获取数据 614<br /> 25.8 小结 615<br /> 本章必须掌握的知识点 615<br /> 本章需要拓展的内容 616<br /> 第26章 PHP的模板引擎Smarty 617<br /> 26.1 什么是模板引擎 617<br /> 26.2 自定义模板引擎 619<br /> 26.2.1 自定义模板引擎类 619<br /> 26.2.2 使用自己的模板引擎 621<br /> 26.2.3 应用自定义模板引擎的示例分析 623<br /> 26.3 选择Smarty模板引擎 626<br /> 26.4 安装Smarty及初始化配置 627<br /> 26.4.1 安装Smarty 628<br /> 26.4.2 初始化Smarty类库的默认设置 628<br /> 26.4.3 第一个Smarty的简单示例 631<br /> 26.5 Smarty的基本应用 633<br /> 26.5.1 PHP程序员常用的和Smarty相关<br /> 的操作 634<br /> 26.5.2 模板设计时美工的常用操作 635<br /> 26.6 Smarty模板设计的基本语法 636<br /> 26.6.1 模板中的注释 636<br /> 26.6.2 模板中的变量应用 636<br /> 26.6.3 模板中的函数应用 639<br /> 26.6.4 忽略Smarty解析 641<br /> 26.7 Smarty模板中的变量应用 641<br /> 26.7.1 从配置文件中读取变量 642<br /> 26.7.2 在模板中使用保留变量 645<br /> 26.8 Smarty模板中的变量调解器 647<br /> 26.8.1 变量调解器函数的使用方式 647<br /> 26.8.2 Smarty默认提供的变量调解器 648<br /> 26.8.3 自定义变量调解器插件 650<br /> 26.9 Smarty模板中的自定义函数 652<br /> 26.9.1 为Smarty模板扩充函数插件 652<br /> 26.9.2 为Smarty模板扩充块函数插件 654<br /> 26.10 Smarty模板中的内置函数 654<br /> 26.10.1 变量声明 655<br /> 26.10.2 流程控制 656<br /> 26.10.3 声明和调用模板函数 659<br /> 26.10.4 数组遍历 660<br /> 26.10.5 Smarty提供的其他内置函数 665<br /> 26.11 Smarty的模板继承特性 666<br /> 26.11.1 使用{extends}函数实现模板继承 666<br /> 26.11.2 在子模板中覆盖父模板中的部分<br /> 内容区域 667<br /> 26.11.3 合并子模板和父模板的{block}<br /> 标签内容 668<br /> 26.12 Smarty的缓存控制 669<br /> 26.12.1 在Smarty中控制缓存 670<br /> 26.12.2 每个模板多个缓存 671<br /> 26.12.3 为缓存实例消除处理开销 671<br /> 26.12.4 清除缓存 672<br /> 26.12.5 关闭局部缓存 673<br /> 26.13 小结 673<br /> 本章必须掌握的知识点 673<br /> 本章需要了解的内容 673<br /> 本章需要拓展的内容 673<br /> 第27章 MVC模式与PHP框架 674<br /> 27.1 MVC模式在Web中的应用 674<br /> 27.1.1 MVC模式的工作原理 674<br /> 27.1.2 MVC模式的优缺点 676<br /> 27.2 PHP开发框架 676<br /> 27.2.1 什么是框架 677<br /> 27.2.2 为什么要用框架 677<br /> 27.2.3 框架和MVC设计模式的关系 678<br /> 27.2.4 比较流行的PHP框架 679<br /> 27.3 划分模块和操作 680<br /> 27.3.1 为项目划分模块 680<br /> 27.3.2 为模块设置操作 681<br /> 27.4 小结 681<br /> 第28章 超轻量级PHP框架BroPHP 2.0 682<br /> 28.1 BroPHP框架概述 682<br /> 28.1.1 系统特点 683<br /> 28.1.2 环境要求 683<br /> 28.1.3 BroPHP框架源码的目录结构 684<br /> 28.2 单一入口 684<br /> 基于BroPHP框架的单一入口编写规则 684<br /> 28.3 部署项目应用目录 685<br /> 28.3.1 项目推荐的部署方式 686<br /> 28.3.2 URL访问 687<br /> 28.4 BroPHP框架的基本设置 689<br /> 28.4.1 默认开启 689<br /> 28.4.2 配置文件 690<br /> 28.4.3 内置函数 691<br /> 28.5 声明控制器(Control) 692<br /> 28.5.1 控制器的声明(模块) 692<br /> 28.5.2 操作的声明 693<br /> 28.5.3 页面跳转 694<br /> 28.5.4 重定向 695<br /> 28.6 设计视图(View) 696<br /> 28.6.1 视图与控制器之间的交互 696<br /> 28.6.2 切换模板风格 697<br /> 28.6.3 模板文件的声明规则 697<br /> 28.6.4 display()的新用法 698<br /> 28.6.5 模板中的几个常用变量应用 698<br /> 28.6.6 在PHP程序中定义资源位置 699<br /> 28.7 应用模型(Model) 699<br /> 28.7.1 BroPHP数据库操作接口的特性 700<br /> 28.7.2 切换数据库驱动 700<br /> 28.7.3 声明和实例化Model 701<br /> 28.7.4 数据库的统一操作接口 704<br /> 28.8 自动验证 721<br /> 28.9 缓存设置 724<br /> 28.9.1 基于memcached缓存设置 724<br /> 28.9.2 基于Smarty的缓存机制 724<br /> 28.10 调试模式 725<br /> 28.11 内置扩展类库 726<br /> 28.11.1 分页类Page 726<br /> 28.11.2 验证码类Vcode 728<br /> 28.11.3 图像处理类Image 729<br /> 28.11.4 文件上传类FileUpload 730<br /> 28.11.5 BroPHP 2.0新增加的文件缓存类<br /> FileCache 731<br /> 28.11.6 BroPHP 2.0新增加的无限分类处理<br /> 类CatTree 733<br /> 28.12 自定义功能扩展 736<br /> 28.12.1 自定义扩展类库 736<br /> 28.12.2 自定义扩展函数库 736<br /> 28.13 BroPHP 2.0数据库分离部署方案 737<br /> 28.13.1 数据分离方法 737<br /> 28.13.2 数据库连接配置 737<br /> 28.13.3 数据模型配置 738<br /> 28.14 BroPHP 2.0资源分布式部署 738<br /> 28.14.1 网站资源分布式部署方法 739<br /> 28.14.2 部署上传的文件资源 739<br /> 28.14.3 部署缩略图的资源位置 740<br /> 28.14.4 将公共资源和单个应用中的资源<br /> 分离部署 740<br /> 28.14.5 将临时和缓存文件分离部署 741<br /> 28.15 BroPHP 2.0主程序与Web目录分离 741<br /> 28.16 小结 742<br /> 本章必须掌握的知识点 742<br /> 本章需要了解的内容 742<br /> 第6部分 项目开发篇<br /> 第29章 B/S结构软件开发流程 744<br /> 29.1 软件开发过程的划分 744<br /> 29.2 需求开发 745<br /> 29.2.1 需求分析流程 746<br /> 29.2.2 需求分析说明 746<br /> 29.2.3 输出 747<br /> 29.3 系统设计 747<br /> 29.3.1 系统设计流程 748<br /> 29.3.2 系统设计说明 748<br /> 29.4 编码测试 750<br /> 29.4.1 编码与测试流程 750<br /> 29.4.2 编码说明 751<br /> 29.4.3 结果测试说明 752<br /> 29.5 试运行 754<br /> 29.5.1 软件试运行流程 754<br /> 29.5.2 软件试运行说明 755<br /> 29.6 实施 755<br /> 29.6.1 软件实施流程 756<br /> 29.6.2 软件实施说明 756<br /> 29.7 验收 757<br /> 29.7.1 软件验收流程 757<br /> 29.7.2 软件验收说明 758<br /> 29.7.3 验收标准 759<br /> 29.8 服务与维护 759<br /> 29.8.1 责任人 759<br /> 29.8.2 收集信息 759<br /> 29.8.3 维护分析 760<br /> 29.8.4 软件维护 760<br /> 29.8.5 改进 760<br /> 29.8.6 输出 760<br /> 29.9 项目管理 760<br /> 29.9.1 软件项目的计划 761<br /> 29.9.2 软件项目的组织 763<br /> 29.9.3 项目小组组织形式 763<br /> 29.10 项目参考 764<br /> 第30章 电子商城系统需求分析说明书 765<br /> 30.1 文档介绍 765<br /> 30.1.1 编写说明 766<br /> 30.1.2 项目背景 766<br /> 30.1.3 读者对象 766<br /> 30.1.4 参考资料 766<br /> 30.1.5 术语与缩写解释 767<br /> 30.2 任务概述 767<br /> 30.2.1 产品的描述 767<br /> 30.2.2 系统目标 768<br /> 30.2.3 系统功能结构 769<br /> 30.2.4 系统流程图 769<br /> 30.3 业务描述 773<br /> 30.3.1 后台登录管理 774<br /> 30.3.2 后台操作界面管理 775<br /> 30.3.3 商品列表管理 777<br /> 30.3.4 前台首页管理 780<br /> 30.3.5 前台商品管理 782<br /> 30.3.6 前台购物管理 785<br /> 30.4 系统运行环境 788<br /> 30.4.1 硬件环境 788<br /> 30.4.2 软件环境 789<br /> 30.5 需求设计评审 789<br /> 第31章 数据库设计说明书 790<br /> 31.1 引言 790<br /> 31.1.1 编写目的 790<br /> 31.1.2 背景 791<br /> 31.1.3 定义 791<br /> 31.1.4 参考文献 791<br /> 31.2 外部设计 791<br /> 31.2.1 标识符和状态 792<br /> 31.2.2 使用它的程序 792<br /> 31.2.3 约定 792<br /> 31.2.4 支持软件 792<br /> 31.3 结构设计 792<br /> 概念结构设计 793<br /> 31.4 逻辑结构设计 801<br /> 31.4.1 E-R图向关系模型的转化 801<br /> 31.4.2 确定关系模式 801<br /> 31.4.3 消除冗余 802<br /> 31.5 物理结构设计 802<br /> 31.5.1 设计数据表结构 803<br /> 31.5.2 创建数据表 808<br /> 31.5.3 数据表记录的输入 813<br /> 31.6 安全保密设计 813<br /> 31.6.1 完整性 813<br /> 31.6.2 数据库设计的其他问题 814<br /> 第32章 程序设计说明书 815<br /> 32.1 引言 815<br /> 32.1.1 编写目的 815<br /> 32.1.2 背景 816<br /> 32.1.3 定义 816<br /> 32.1.4 使用技术 816<br /> 32.1.5 参考文献 816<br /> 32.2 系统的结构 816<br /> 32.2.1 项目的目录结构 817<br /> 32.2.2 模块结构 817<br /> 32.2.3 程序结构 818<br /> 32.3 用户管理模块设计说明 822<br /> 32.3.1 功能 822<br /> 32.3.2 流程逻辑 822<br /> 32.3.3 接口 823<br /> 32.3.4 存储分配 823<br /> 32.3.5 注释设计 823<br /> 32.3.6 限制条件 823<br /> 32.3.7 测试计划 824<br /> 32.3.8 尚未解决的问题 824<br /> 32.3.9 获取添加用户的界面操作add() 824<br /> 32.3.10 用户数据入库的操作insert() 825<br /> 32.3.11 查询用户列表操作index() 826<br /> 32.3.12 获取修改用户的界面操作mod() 827<br /> 32.3.13 用户数据修改的操作update() 828<br /> 32.3.14 删除用户操作del() 828<br /> 附 录<br /> 附录A 编码规范 831<br /> A.1 绪论 831<br /> A.1.1 适用范围 831<br /> A.1.2 目标 831<br /> A.1.3 开发工具 832<br /> A.2 PHP的文件格式 832<br /> A.2.1 PHP开始和结束标记 832<br /> A.2.2 注释规范 833<br /> A.2.3 空行和空白 833<br /> A.2.4 字符串的使用 834<br /> A.2.5 命名原则 835<br /> A.2.6 语言结构 837<br /> A.2.7 其他规范细节 840<br /> A.3 MySQL设计规范 841<br /> A.3.1 数据表的设计 841<br /> A.3.2 索引设计原则 842<br /> A.3.3 SQL语句设计 843<br /> A.4 模板设计 843<br /> 附录B PHP的安全和优化 845<br /> B.1 网站安全Security 845<br /> B.1.1 安全配置PHP 846<br /> B.1.2 隐藏配置细节 849<br /> B.1.3 隐藏敏感数据 850<br /> B.1.4 清理用户数据 851<br /> B.1.5 数据加密 854<br /> B.2 网站优化Optimize 854<br /> B.2.1 PHP脚本级优化 854<br /> B.2.2 使用代码优化工具 856<br /> B.2.3 缓存加速 857<br /> B.2.4 HTTP加速 857<br /> B.2.5 启用GZIP内容压缩 857<br /> 附录C PHP 5.3~5.6新特性 858<br /> C.1 PHP 5.3中的新特性 858<br /> C.2 PHP 5.4中的新特性 859<br /> C.2.1 PHP 5.4中其他值得注意的改变 859<br /> C.2.2 PHP 5.4中其他改动和特性 860<br /> C.3 PHP 5.5中的新特性 860<br /> C.4 PHP 5.6中的新特性 861 </p> <div class="download-box mg-b" id="download-box" ref="downloadBox"> <div> <div class="down-ready"> <div class="download-list gujia" ref="gujia"> <div class="download-item"> <div class="download-thumb" style="'background-image: url();'"> </div> <div class="download-rights"> <div class="download-rights-title"><span class="gujia-bg"></span></div> <ul> <li><span class="gujia-bg"></span></li> <li><span class="gujia-bg"></span></li> <li><span class="gujia-bg"></span></li> <li><span class="gujia-bg"></span></li> <li><span class="gujia-bg"></span></li> <li><span class="gujia-bg"></span></li> </ul> </div> <div class="download-info"> <div class="download-rights-title"><span class="gujia-bg"></span></div> <ul> </ul> <div class="download-current"> <div class=""></div> </div> <div class="download-button-box"> <div class=""></div> <div class=""></div> <div class=""></div> </div> </div> </div> </div> </div> <div class="download-list" v-cloak> <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak> <div class="download-rights" v-cloak> <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span> <ul v-if="item.show_role"> <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''"> <div><span v-text="right.lv_name+':'"></span></div> <div v-if="right.type == 'money'">¥<span v-text="right.value"></span></div> <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div> <div v-if="right.type == 'free'">免费下载</div> <div v-if="right.type == 'comment'">评论并刷新后下载</div> <div v-if="right.type == 'login'">登录后下载</div> </li> </ul> </div> <div class="download-info"> <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div> <ul v-show="item.attrs.length >0"> <li v-for="attr in item.attrs"> <span class="download-attr-name">{{attr.name}}:</span> <span v-html="attr.value"></span> </li> </ul> <div class="download-current"> <span>您当前的等级为</span> <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span> <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span> <div class="" v-if="!item.current_user.can.allow"> <span v-if="item.current_user.can.type == 'login'"> 登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a> </span> <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'"> 小黑屋反思中,不准下载! </span> <span v-else-if="item.current_user.can.type == 'comment'"> 评论后刷新页面下载<a href="#respond">评论</a> </span> <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest"> <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>¥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span> 请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a> </span> <span v-else-if="item.current_user.can.type == 'full'" class="green"> 您今天的下载次数(<b v-text="item.current_user.can.total_count"></b>次)用完了,请明天再来 </span> <span v-else-if="item.current_user.can.type == 'credit'"> 支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a> </span> <span v-else-if="item.current_user.can.type == 'money'"> 支付<b v-text="'¥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a> </span> <span v-else> 您当前的用户组不允许下载<a href="https://www.zhihailib.com/sponsor" target="_blank">升级会员</a> </span> </div> <div class="" v-else> <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green"> 您已获得下载权限 </span> <span class="green" v-else> 您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次,今日剩余<b v-text="item.current_user.can.count"></b>次 </span> </div> </div> <div class="download-button-box"> <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button> </div> </div> </div> </div> </div> </div> <div class="post-note"><strong>免责申明</strong>:<br> 1. 本站分享的所有书籍均来源于自互联网,我们只进行收集整理,并不对书籍内容进行更改。<br> 2. 部分书籍中可能有书籍压制者放置的广告,这并不是本站所为,请注意甄别。<br> 3. 我们分享这些书籍,纯粹是出于知识分享的热情,以及对互联网分享精神的高度认同和践行,不以盈利为目的。<br> 4. 本站分享的所有书籍,仅供个人学习研究使用,请勿用于任何商业用途,否则产生的一切法律纠纷与本站无关。<br> 5. 如果这些书籍让你有所收获,在条件允许的情况下,请一定购买正版书籍,这是对创作者最好的支持。<br> 6. 如果您是此书籍的版权所有者,且您不希望此作品出现在本站,请联系我们,我们将在收到您的请求后48小时内予以删除。</div> <div class="support-section"> <div class="support-header"> <h3>📖 支持知识自由流动</h3> <p>每一本书的稳定访问,都离不开服务器、存储与带宽的长期维护。</p> </div> <div class="support-actions"> <a href="/points" class="support-card card-points" target="_blank"> <div class="card-icon">✨</div> <div class="card-content"> <h4>免费提升下载权限</h4> <p>通过签到、发布书籍、评论等方式</p> </div> <div class="card-arrow">→</div> </a> <a href="/sponsor" class="support-card card-sponsor" target="_blank"> <div class="card-icon">🔥</div> <div class="card-content"> <h4>成为赞助者</h4> <p>下载权限提升至 <strong>100次/天</strong></p> </div> <div class="card-arrow">→</div> </a> </div> </div> </div> <div class="content-footer post-content-footer" v-cloak> <div class="post-content-footer-in"> <div class="content-footer-poster"> <button class="poster-span b2tooltipbox" @click="openPoster()" data-title="海报分享"><i class="b2font b2-share-forward-fill "></i><b class="mobile-show">海报分享</b></button> <button @click="goComment()" class="mobile-hidden b2tooltipbox comment-span" data-title="去评论"><i class="b2font b2-chat-2-fill "></i></button> <button :class="['text favorite-button',{'sc':postData.favorites_isset},'b2tooltipbox']" @click="postFavoriteAc" data-title="收藏"><i class="b2font b2-star-fill "></i><b class="mobile-show">{{postData.favorites_isset ? '已收藏' : '收藏'}}</b></button> </div> <div class="content-footer-zan-cai b2tooltipbox" data-title="喜欢"> <span @click="vote('up')" :class="postData.up_isset ? 'picked' : ''"><i class="b2font b2-heart-fill "></i><b v-text="postData.up"></b></span> <span @click="vote('down')" :class="postData.down_isset ? 'picked mobile-show' : 'mobile-show'"><i class="b2font b2-dislike-fill "></i><b v-text="postData.down"></b></span> </div> </div> </div> <div class="post-tags-meat"><a class="b2-radius" href="https://www.zhihailib.com/tag/php%e8%af%ad%e8%a8%80"><span class="tag-img"><i class="b2font b2-price-tag-3-line "></i></span><span class="tag-text">PHP语言</span></a><a class="b2-radius" href="https://www.zhihailib.com/tag/%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1"><span class="tag-img"><i class="b2font b2-price-tag-3-line "></i></span><span class="tag-text">程序设计</span></a></div></article><div class="related-posts mg-t mg-b box b2-radius zhl-related"><div class="related-posts-title">相关书籍</div><div class="zhl-related-grid"><div class="zhl-related-item"><div class="book-cover-frame zhl-related-cover"><a href="https://www.zhihailib.com/book/81157" class="link-block"></a><picture class="picture" ><source type="image/webp" srcset="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_02f59e6deeb35f6284fdfc879dd324b6.webp" /><img class="book-cover-img" alt="SQL反模式 (图灵程序设计丛书 48)" src="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_02f59e6deeb35f6284fdfc879dd324b6.jpg"/></picture></div><h2 class="zhl-related-title"><a href="https://www.zhihailib.com/book/81157">SQL反模式 (图灵程序设计丛书 48)</a></h2></div><div class="zhl-related-item"><div class="book-cover-frame zhl-related-cover"><a href="https://www.zhihailib.com/book/80783" class="link-block"></a><picture class="picture" ><source type="image/webp" srcset="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_0e8a67823f59cd544ca98c58a8aca3a0.webp" /><img class="book-cover-img" alt="程序员修炼之道" src="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_0e8a67823f59cd544ca98c58a8aca3a0.jpg"/></picture></div><h2 class="zhl-related-title"><a href="https://www.zhihailib.com/book/80783">程序员修炼之道</a></h2></div><div class="zhl-related-item"><div class="book-cover-frame zhl-related-cover"><a href="https://www.zhihailib.com/book/81746" class="link-block"></a><picture class="picture" ><source type="image/webp" srcset="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_846d2c28b000fc4604766b74ae77c795.webp" /><img class="book-cover-img" alt="VC++深入详解(基于Visual Studio 2017)(第3版)" src="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_846d2c28b000fc4604766b74ae77c795.jpg"/></picture></div><h2 class="zhl-related-title"><a href="https://www.zhihailib.com/book/81746">VC++深入详解(基于Visual Studio 2017)(第3版)</a></h2></div><div class="zhl-related-item"><div class="book-cover-frame zhl-related-cover"><a href="https://www.zhihailib.com/book/81556" class="link-block"></a><picture class="picture" ><source type="image/webp" srcset="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_913e992696ce14b664dcac4698a46bca-scaled.webp" /><img class="book-cover-img" alt="白帽子讲Web扫描 (安全技术大系)" src="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_913e992696ce14b664dcac4698a46bca-scaled.jpg"/></picture></div><h2 class="zhl-related-title"><a href="https://www.zhihailib.com/book/81556">白帽子讲Web扫描 (安全技术大系)</a></h2></div><div class="zhl-related-item"><div class="book-cover-frame zhl-related-cover"><a href="https://www.zhihailib.com/book/81279" class="link-block"></a><picture class="picture" ><source type="image/webp" srcset="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_f3f975cee4875997f2c69c32c8bb3cc9.webp" /><img class="book-cover-img" alt="下厨房系列:主食变变变——84种米面做法全放送" src="https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w455_h634_g0_mark_f3f975cee4875997f2c69c32c8bb3cc9.jpg"/></picture></div><h2 class="zhl-related-title"><a href="https://www.zhihailib.com/book/81279">下厨房系列:主食变变变——84种米面做法全放送</a></h2></div></div></div><div class="comments-box"> <div id="comments" class="comments-area box b2-radius"> <div class="comments-title"> <div class="comment-info"> <span ref="commentCount" class="comment-count"> 0 条回复 </span> <span><b class="comment-auth-mod comment-auth">A</b><i>文章作者</i></span> <span><b class="comment-auth-mod comment-mod">M</b><i>管理员</i></span> </div> <div class="comment-tips" v-show="tips" v-cloak> <span v-if="!tips.url"><span v-text="tips.title"></span></span> <a :href="tips.url" v-else target="_blank"><span v-text="tips.title"></span></a> </div> </div><!-- .comments-title --> <div id="comment-form" class="comment-form"> <div id="respond" class="respond" ref="respond"> <div :class="b2token ? 'comment-overlay-hidden' : 'comment-overlay'" v-cloak> <div class="comment-overlay-login"> <p>您必须登录或注册以后才能发表评论</p> <button class="empty" @click="showLogin()">登录</button> </div> </div> <div class="com-info"> <img class="com-info-avatar avatar b2-radius" :src="data.avatar"> </div> <div class="com-form" ref="formData" data-commenter='{"name":"","user_email":"","avatar":"https:\/\/www.zhihailib.com\/wp-content\/themes\/b2\/Assets\/fontend\/images\/default-avatar.png"}'> <div id="com-form-title" :class="['com-form-title',{'b2-show':!data.link}]" v-cloak v-show="!b2token"> <div> <div class="" v-if="data.user_name" v-html="data.name+',欢迎您老朋友!'"></div> <div class="" v-else> <span v-if="!data.name" v-html="data.name+'欢迎您,新朋友,感谢参与互动!'"></span> <span v-else v-html="data.name+',感谢您的参与!'"></span> </div> </div> <div> <button class="text" @click="show.info = !show.info">{{show.info ? '确认修改' : '修改资料'}}</button> </div> </div> <div class="b2-radius"> <div :class="['com-form-input',{'b2-show':show.info}]" v-cloak> <input id="author" type="text" name="nickname" v-model="data.name" placeholder="称呼" @focus="focus = true" @blur="focus = false" autocomplete="new-password"> <input id="email" type="text" name="email" v-model="data.user_email" placeholder="邮箱" @focus="focus = true" @blur="focus = false" autocomplete="new-password"> </div> <div class="com-form-textarea" :id="drawing ? 'drawing-box' : ''" ref="_textarea_box"> <textarea v-show="!drawing" id="textarea" ref="textarea_box" placeholder="说说你的看法" @focus="focus = true;((data.name && data.user_email) || b2token ? show.info = false : show.info = true)" @blur="focus = false;((data.name && data.user_email) || b2token ? show.info = false : show.info = true)"></textarea> <div v-show="b2token && canImg"> <canvas id="sketchpad" v-show="drawing" v-cloak ref="sketchpad"></canvas> <div class="drawing-tools" v-show="drawing" v-cloak> <div> <div class="d-color"> <button :class="'text d-black '+(sketchpadOpt.color == '#121212' ? 'picked' : '')" @click="color('#121212')"></button> <button :class="'text d-red '+(sketchpadOpt.color == '#FF3355' ? 'picked' : '')" @click="color('#FF3355')"></button> <button :class="'text d-green '+(sketchpadOpt.color == '#71a257' ? 'picked' : '')" @click="color('#71a257')"></button> <button :class="'text d-yellow '+(sketchpadOpt.color == '#ff9900' ? 'picked' : '')" @click="color('#ff9900')"></button> </div> <div class="d-weight"> <button :class="'text '+(sketchpadOpt.penSize == '2' ? 'picked' : '')" @click="penSize(2)">细</button> <button :class="'text '+(sketchpadOpt.penSize == '5' ? 'picked' : '')" @click="penSize(5)">中</button> <button :class="'text '+(sketchpadOpt.penSize == '10' ? 'picked' : '')" @click="penSize(10)">粗</button> </div> </div> <div class="d-replay"> <button class="text" @click="undo" data-title="撤销"><i class="b2font b2-arrow-go-back-line "></i></button> <button class="text" @click="redo" data-title="重做"><i class="b2font b2-arrow-go-forward-line "></i></button> <button class="text" @click="animate" data-title="回放"><i class="b2font b2-magic-fill "></i></button> </div> </div> <div class="comment-type" v-cloak> <button :class="'text '+(!drawing ? 'picked' : '')" @click="drawing = false" data-title="文本"><i class="b2font b2-font-size-2 "></i></button> <button :class="'text '+(drawing ? 'picked' : '')" @click="drawing = true" data-title="涂鸦"><i class="b2font b2-brush-line "></i></button> </div> </div> </div> </div> <div class="com-form-button"> <div class="com-form-button-l" :id="drawing ? 'toolopt' :''"> <span @click.stop="show.smile = !show.smile;show.image = false" v-cloak><i :class="focus || show.smile ? 'b2font b2-emotion-laugh-line' : 'b2font b2-emotion-line'"></i></span> <div :class="['comment-smile-box',{'b2-show':show.smile}]" v-cloak @click.stop=""> <button class="text smily-button" @click="addSmile('😁')">😁</button><button class="text smily-button" @click="addSmile('😊')">😊</button><button class="text smily-button" @click="addSmile('😎')">😎</button><button class="text smily-button" @click="addSmile('😤')">😤</button><button class="text smily-button" @click="addSmile('😥')">😥</button><button class="text smily-button" @click="addSmile('😂')">😂</button><button class="text smily-button" @click="addSmile('😍')">😍</button><button class="text smily-button" @click="addSmile('😏')">😏</button><button class="text smily-button" @click="addSmile('😙')">😙</button><button class="text smily-button" @click="addSmile('😟')">😟</button><button class="text smily-button" @click="addSmile('😖')">😖</button><button class="text smily-button" @click="addSmile('😜')">😜</button><button class="text smily-button" @click="addSmile('😱')">😱</button><button class="text smily-button" @click="addSmile('😲')">😲</button><button class="text smily-button" @click="addSmile('😭')">😭</button><button class="text smily-button" @click="addSmile('😚')">😚</button><button class="text smily-button" @click="addSmile('💀')">💀</button><button class="text smily-button" @click="addSmile('👻')">👻</button><button class="text smily-button" @click="addSmile('👍')">👍</button><button class="text smily-button" @click="addSmile('💪')">💪</button><button class="text smily-button" @click="addSmile('👊')">👊</button> </div> <div class="" v-if="data.link && canImg" v-cloak> <label class="comment-img-button" @click.stop="show.smile = false" v-cloak> <i class="b2font b2-image-fill "></i> <input id="comment-img" type="file" ref="fileInput" accept="image/jpg,image/jpeg,image/png,image/gif" @change="getFile($event)"> </label> <div :class="['comment-image-box',{'b2-show':progress > 0 && show.smile == false}]" v-cloak @click.stop=""> <div v-if="commentData.imgUrl"> <img :src="commentData.imgUrl" class="comment-sub-img"> <div class="comment-sub-img-button"> <label for="comment-img">更换</label> <label @click="deleteImage()">删除</label> </div> </div> <div v-else="" class="comment-sub-img-msg"> <span v-text="progress+'%'" v-if="progress < 99"></span> <span v-else-if="progress > 99" v-text="'合法性检查中...'"></span> </div> </div> </div> </div> <div class="com-form-button-r"> <button class="text mg-r" @click="resetmove()" :disabled="subLocked || locked">取消回复</button> <button @click="submit()" :disabled="subLocked || locked" :class="[{'b2-loading':subLocked}]">提交</button> </div> </div> </div> </div> </div> <div class="comments-area-content"> <ol class="comment-list" ref="commentList"> <div class="none-comment" ref="noneComment">暂无讨论,说说你的看法吧</div> </ol><!-- .comment-list --> </div> <div class="b2-pagenav comment-nav b2-radius b2-hidden-always"> <page-nav ref="commentPageNav" paged="1" navtype="comment" pages="0" type="p" :box="selecter" :opt="opt" :api="api" @finish="finish" url="https://www.zhihailib.com/book/128916" title="跟兄弟连学PHP"></page-nav> </div> </div><!-- #comments --> </div> </div> <aside id="secondary" class="widget-area"> <div class="sidebar"> <div class="sidebar-innter widget-ffixed"> <section id="b2-widget-author-2" class="mobile-hidden widget b2-widget-author mg-b box b2-radius"><div class="b2-widget-title"><h2 class="widget-title"><span>馆藏来源</span><span class=""> <button @click="followingAc" class="text" v-if="following == 1" v-cloak>取消关注</button> <button @click="followingAc" v-else class="text"><i class="b2font b2-add-line "></i>关注</button> <button class="text" @click="dmsg()">私信</button> </span></h2></div><div class="b2-widget-box"> <div class="author-widget"> <div class="author-widget-content"> <div class="w-a-info"> <img src="https://www.zhihailib.com/wp-content/uploads/thumb/2025/12/fill_w192_h192_g0_mark_zhihailib-avatar_1_avatar_JUxcV34583.png" class="avatar b2-radius"/> <div class="w-a-name"> <a href="https://www.zhihailib.com/users/1" class="link-block"></a> <p>知海图书馆</p> <div class="w-a-lv"> <span class="lv-icon user-lv b2-lv7"><b>河图司</b><i>lv7</i></span> </div> </div> </div> <div class="w-a-count"> <div> <p>书籍</p> <span v-text="postCount">0</span> </div> <div> <p>评论</p> <span v-text="commentCount">0</span> </div> <div> <p>关注</p> <span v-text="followingCount">0</span> </div> <div> <p>粉丝</p> <span v-text="followersCount">0</span> </div> </div> <div class="w-a-post-list"> <div><a href="https://www.zhihailib.com/book/362021" target="_blank"><span class="b2-color">[书籍]</span> 科学素养文库·科学元典丛书(第2辑) 心理学原理 ((美)詹姆斯著;唐钺译)</a></div><div><a href="https://www.zhihailib.com/book/362019" target="_blank"><span class="b2-color">[书籍]</span> 科学素养文库·科学元典丛书(第2辑) 相对论的意义 ((美)爱因斯坦著;李灏译)</a></div><div><a href="https://www.zhihailib.com/book/362017" target="_blank"><span class="b2-color">[书籍]</span> 玻尔讲演录 ((丹)玻尔著)</a></div><div><a href="https://www.zhihailib.com/book/362015" target="_blank"><span class="b2-color">[书籍]</span> 行为主义 ([美] 约翰·布鲁德斯·华生)</a></div> </div> </div> <div class="widget-mission-footer b2-color"><a href="https://www.zhihailib.com/tastream/1" target="_blank">Ta的全部动态</a></div> </div></div></section><section id="b2-widget-html-2" class="mobile-hidden widget b2-widget-html mg-b box b2-radius"><div class="b2-widget-box"> <div class="html-widget"> <div class="html-widget-content"> <div style="background: linear-gradient(135deg, #4A90E2 0%, #357ABD 100%); border-radius: 8px; padding: 16px; margin: 5px 0; box-shadow: 0 2px 8px rgba(0,0,0,0.1);"> <div style="color: #FFD700; font-size: 12px; margin-bottom: 8px;">💰 限时福利</div> <div style="color: white; font-weight: bold; font-size: 16px; line-height: 1.3; margin-bottom: 8px;">书读累了想免费吃个外卖?</div> <div style="color: rgba(255,255,255,0.95); font-size: 13px; margin-bottom: 12px; line-height: 1.4;">18-30元无门槛红包每日可领</div> <a href="https://www.xiaoheiwoo.com/coupon-tutorial/" target="_blank" onmouseover="this.style.background='#f8f8f8';" onmouseout="this.style.background='white';" style="display: block; background: white; color: #4A90E2; text-align: center; padding: 10px; border-radius: 6px; text-decoration: none; font-weight: bold; font-size: 14px;          transition: all 0.5s ease;">立即领取→</a> </div> </div> </div> </div></section><section id="b2-widget-mission-4" class="mobile-hidden widget b2-widget-mission mg-b box b2-radius"><div class="b2-widget-box"> <div class="mission-widget" ref="missionWidget" data-count="6"> <div class="mission-gujia" ref="missiongujia"> <div class="user-w-qd"> <div class=""></div> </div> <div class="user-w-qd-list"> <div class="user-w-qd-list-title b2-radius"> <p><span></span></p> <p><span></span></p> </div> <div class="mission-today-list"> <ul> <li> <a href="#" class="user-link-block avatar-parent"><span></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a href="#"><p></p></a> <p><time></time></p> </div> <div class="user-mission-info-right"> <span class="user-credit"></span> </div> </div> </li> <li> <a href="#" class="user-link-block avatar-parent"><span></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a href="#"><p></p></a> <p><time></time></p> </div> <div class="user-mission-info-right"> <span class="user-credit"></span> </div> </div> </li> <li> <a href="#" class="user-link-block avatar-parent"><span></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a href="#"><p></p></a> <p><time></time></p> </div> <div class="user-mission-info-right"> <span class="user-credit"></span> </div> </div> </li> <li> <a href="#" class="user-link-block avatar-parent"><span></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a href="#"><p></p></a> <p><time></time></p> </div> <div class="user-mission-info-right"> <span class="user-credit"></span> </div> </div> </li> <li> <a href="#" class="user-link-block avatar-parent"><span></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a href="#"><p></p></a> <p><time></time></p> </div> <div class="user-mission-info-right"> <span class="user-credit"></span> </div> </div> </li> <li> <a href="#" class="user-link-block avatar-parent"><span></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a href="#"><p></p></a> <p><time></time></p> </div> <div class="user-mission-info-right"> <span class="user-credit"></span> </div> </div> </li> </ul> <div class="widget-mission-footer"><a href="https://www.zhihailib.com/mission" target="_blank">签到排行</a></div> </div> </div> </div> <div v-cloak v-if="data !== ''"> <div :class="['user-w-qd',{'cur':!data.mission.credit}]" @click="mission()" v-if="data !== ''"> <div class="" v-if="locked"><i class="b2font b2-gift-2-line "></i>幸运之星正在降临...</div> <div class="" v-else-if="data.mission.credit == ''"><i class="b2font b2-gift-2-line "></i>点击领取今天的签到奖励!</div> <div class="" v-else><i class="b2font b2-gift-2-line "></i>恭喜!您今天获得了<b>{{data.mission.credit}}</b>积分</div> </div> <div class="user-w-qd-list"> <div class="user-w-qd-list-title b2-radius"> <p :class="type == 'today' ? 'picked' : ''" @click="type = 'today'"><span>今日签到</span></p> <p :class="type == 'always' ? 'picked' : ''" @click="type = 'always'"><span>连续签到</span></p> </div> <div class="mission-today-list" v-cloak v-if="data.mission"> <template v-if="data.mission_today_list.data.length > 0"> <ul v-if="type === 'today'"> <li v-for="item in data.mission_today_list.data"> <a :href="item.user.link" class="user-link-block avatar-parent"><img :src="item.user.avatar" class="b2-radius avatar"><span v-if="item.user.user_title" v-html="item.user.verify_icon"></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a :href="item.user.link"><p v-text="item.user.name"></p></a> <p v-html="item.date"></p> </div> <div class="user-mission-info-right"> <span class="user-credit"><i class="b2font b2-coin-line "></i>{{item.credit}}</span> </div> </div> </li> </ul> <ul v-else> <li v-for="_item in data.mission_always_list.data"> <a :href="_item.user.link" class="user-link-block avatar-parent"><img :src="_item.user.avatar" class="b2-radius avatar"><span v-if="_item.user.user_title" v-html="_item.user.verify_icon"></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a :href="_item.user.link"><p v-text="_item.user.name"></p></a> <p v-html="_item.date"></p> </div> <div class="user-mission-info-right"> 连续{{_item.count}}天 </div> </div> </li> </ul> </template> <template v-else> <div style="padding: 20px;font-size: 12px;text-align: center;">没有签到数据</div> </template> <div class="widget-mission-footer"><a href="https://www.zhihailib.com/mission" target="_blank">签到排行</a></div> </div> </div> </div> </div> </div></section><section id="b2-widget-html-3" class="mobile-hidden widget b2-widget-html mg-b box b2-radius"><div class="b2-widget-box"> <div class="html-widget"> <div class="html-widget-content"> <div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 8px; padding: 16px; margin: 5px 0; box-shadow: 0 2px 8px rgba(0,0,0,0.1);"> <div style="color: #FFE66D; font-size: 12px; margin-bottom: 8px;">🔥 口袋学堂</div> <div style="color: white; font-weight: bold; font-size: 16px; line-height: 1.3; margin-bottom: 8px;">国外顶级英文课程下载</div> <div style="color: rgba(255,255,255,0.95); font-size: 13px; margin-bottom: 12px; line-height: 1.4;">Udemy · Coursera · edX · Skillshare...</div> <a href="https://www.koudaizy.com/" target="_blank" onmouseover="this.style.background='#f8f8f8';" onmouseout=this.style.background='white';" style="display: block; background: white; color: #667eea; text-align: center; padding: 10px; border-radius: 6px; text-decoration: none; font-weight: bold; font-size: 14px;            transition: all 0.5s ease;">查看详情 →</a> </div> </div> </div> </div></section><section id="b2-widget-comment-5" class="mobile-hidden widget b2-widget-comment mg-b box b2-radius"><div class="b2-widget-title"><h2 class="widget-title">最新评论</h2></div><div class="comment-widget-nav"><span :class="{'locked':prev || locked}" @click="prevAc()"><i class="b2font b2-arrow-left-s-line "></i>PREV</span><span :class="{'locked':next || locked}" @click="nexAc()">NEXT<i class="b2font b2-arrow-right-s-line "></i></span></div><div class="b2-widget-box"> <div class="comment-widget" id="comment-widget" ref="commentWidget" data-count="6" data-hidden="1"> <ul class="comment-gujia" ref="gujia"> <li> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <span></span> </div> <time></time> </div> <div class="widget-comment-contnet b2-radius jt"> <p></p> </div> <div class="widget-comment-post"> <span></span><a href="#"></a> </div> </li> <li> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <span></span> </div> <time></time> </div> <div class="widget-comment-contnet b2-radius jt"> <p></p> </div> <div class="widget-comment-post"> <span></span><a href="#"></a> </div> </li> <li> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <span></span> </div> <time></time> </div> <div class="widget-comment-contnet b2-radius jt"> <p></p> </div> <div class="widget-comment-post"> <span></span><a href="#"></a> </div> </li> <li> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <span></span> </div> <time></time> </div> <div class="widget-comment-contnet b2-radius jt"> <p></p> </div> <div class="widget-comment-post"> <span></span><a href="#"></a> </div> </li> <li> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <span></span> </div> <time></time> </div> <div class="widget-comment-contnet b2-radius jt"> <p></p> </div> <div class="widget-comment-post"> <span></span><a href="#"></a> </div> </li> <li> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <span></span> </div> <time></time> </div> <div class="widget-comment-contnet b2-radius jt"> <p></p> </div> <div class="widget-comment-post"> <span></span><a href="#"></a> </div> </li> </ul> <ul v-if="data != ''" v-cloak> <li v-for="item in data"> <div class="widget-comment-user"> <div class="widget-comment-user-left"> <a :href="item.user.link" target="_blank" class="link-block"></a> <img :src="item.user.avatar" class="b2-radius avatar"/> <span v-text="item.user.name"></span> </div> <span v-html="item.date"></span> </div> <div class="widget-comment-contnet b2-radius jt"> <p v-html="item.content"></p> <p v-if="item.comment_img" class="comment-img"><img :src="item.comment_img" class="b2-radius"></p> </div> <div class="widget-comment-post"> <span><b class="b2-color" v-text="item.post_type"></b>来自:</span><a :href="item.post.link" v-html="item.post.title"></a> </div> </li> </ul> </div> </div></section> </div> </div> </aside> </div> <!-- 登陆与注册组件 --> <div id="login-box"> <login-box ref="loginBox" :show="show" :allow-register="'1'" :check-type="'email'" :login-type="loginType" :login-text="'邮箱'" :invitation="'1'" :invitation-link="'https://github.com/harryfighting/zhihailib'" :invitation-text="'获取邀请码'" :img-box-code="imgCode" @close-form="close" @login-ac="loginAc" v-cloak></login-box> </div> <!-- 验证码组件 --> <div id="recaptcha-form"> <recaptcha-box :show="show" :type="type" @close-form="close" v-cloak></recaptcha-box> </div> <!-- 搜索组件 --> <div id="search-box"> <search-box :show="show" :search-type="searchType" @close="close" v-cloak></search-box> </div> <!-- 公告弹窗 --> <div id="gong-box"> <gg-box :show="show" @close="close" v-cloak></gg-box> </div> <!-- 私信弹窗 --> <div id="dmsg-box" @click.stop=""> <dmsg-box :show="show" :userid="userid" :type="select" @close="close" v-cloak></dmsg-box> </div> <!-- 扫码支付 --> <div id="scan-box" @click.stop=""> <scan-box :show="show" :data="data" @close="close" v-cloak></scan-box> </div> <!-- 支付检查 --> <div id="pay-check" @click.stop=""> <check-box :show="show" :title="title" :type="type" :payt="payType" @close="close" v-cloak></check-box> </div> <!-- 支付组件 --> <div id="ds-box" ref="dsmoney"> <ds-box :show="show" :money="money" :msg="msg" :user="user" :author="author" :data="data" :showtype="showtype" @close="close" @clean="clean" @change="change" v-cloak></ds-box> </div> <!-- 积分支付组件 --> <div id="credit-box" ref="creditbox"> <credit-box :show="show" :data="data" :user="user" @close="close" v-cloak></credit-box> </div> <!-- 财富页面组件 --> <div id="money-buy" ref="moneyBuy"> <money-buy :show="show" :data="data" :user="user" @close="close" v-cloak></money-buy> </div> <!-- 微信绑定组件 --> <div id="weixin-bind" ref="weixinBind"> <weixin-bind :show="show" :url="url" :msg="msg" @close="close" v-cloak></weixin-bind> </div> <!-- 公告弹窗 --> <div id="post-gg"> <post-gg :show="show" :title="title" :content="content" @close="close" v-cloak></post-gg> </div> <!-- 举报弹窗 --> <div id="jubao-box"> <jubao :show="show" :id-type="idType" :id="id" @close="close" v-cloak></jubao> </div> <!-- 关注公众号登录 --> <div id="mp-box"> <mp-box ref="b2mp" :show="show" :invitation="'1'" :invitation-link="'https://github.com/harryfighting/zhihailib'" :invitation-text="'获取邀请码'" @close="close" v-cloak></mp-box> </div> <!-- 社交强制绑定 --> <div id="binding-login" ref="bindLogin"> <bind-login :show="show" :type="type" @close="close" v-cloak ref="bindBox"></bind-login> </div> <!-- 海报组件 --> <div id="poster-box"> <poster-box :show="show" :data="data" @close-form="close" v-cloak></poster-box> </div> <div class="aside-container" @click.stop="" ref="asideContainer"> <div class="aside-bar"> <div class="bar-middle" v-cloak> <div class="bar-top" v-if="showBox" @click="showAc(false)" v-cloak> <div> ❯ </div> </div> <div class="gdd-quick-link-buy-vip"> <a target="_blank" href="https://www.zhihailib.com/sponsor"> <div class="gdd-quick-link-buy-vip__hover-block"> <img src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/images/vip-youce.svg"> <p>提升下载权限</p> </div> </a> <div class="gdd-quick-link-buy-vip__popover"> <div> <p class="gdd-quick-link-buy-vip__popover--title">赞助我们</p> <p class="gdd-quick-link-buy-vip__popover--desc">提升下载次数至100次/天</p> <a target="_blank" href="https://www.zhihailib.com/sponsor"><p class="gdd-quick-link-buy-vip__popover--btn">了解详情</p></a> </div> </div> </div> <div class="bar-normal"> <div :class="['bar-item',{'active':showType.user}]" @click="show('user')"> <i class="b2font b2-user-heart-line "></i> <span class="bar-item-desc">个人中心</span> </div> <div :class="['bar-item bar-mission',{'active':showType.mission}]" @click="show('mission')"> <i class="b2font b2-gift-2-line "></i> <span class="bar-item-desc">今日签到</span> </div> <div :class="['bar-item',{'active':showType.dmsg}]" @click="show('dmsg','https://www.zhihailib.com/directmessage')"> <b v-show="dmsg.count" class="bar-mark"></b> <i class="b2font b2-mail-send-line "></i> <span class="bar-item-desc" v-if="dmsg.count">有新私信</span> <span class="bar-item-desc" v-else>私信列表</span> </div> <!-- <div :class="['bar-item',{'active':showType.msg}]" @click="show('msg','https://www.zhihailib.com/message')"> <i class="b2font b2-notification-3-line "></i> <b v-show="msg.count" class="bar-mark" v-text="msg.count"></b> <span class="bar-item-desc" v-if="msg.count">有新消息</span> <span class="bar-item-desc" v-else>消息中心</span> </div> --> <div class="bar-item" @click="showSearch()"> <i class="b2font b2-search-line "></i> <span class="bar-item-desc">搜索</span> </div> </div> <div class="bar-footer"> <div class="bar-item" @click="chat"> <i class="b2font b2-customer-service-2-line1 "></i> <span class="bar-item-desc">客服</span> </div> <div class="bar-item bar-qrcode"> <i class="b2font b2-qr-code-fill "></i> <div class="bar-item-desc bar-qrcode-box"> <ul><li class="b2-radius"><img :src="getQrcode('https://www.zhihailib.com/book/128916')"><p>扫码打开当前页</p></li></ul> </div> </div> <div class="bar-item" @click="goTop"> <i class="b2font b2-rocket-2-line "></i> <span class="bar-item-desc">返回顶部</span> </div> </div> </div> </div> <div class="bar-user-info" ref="asideContent" v-cloak> <div class="bar-box bar-mission" v-if="showType.mission && mission.data !== ''"> <div v-cloak> <div :class="['bar-user-info-row bar-mission-action',{'cur':mission.data.mission.credit === ''}]" @click="mission.mission()" v-if="mission.data !== ''"> <div class="" v-if="mission.locked"><i class="b2font b2-coin-line "></i>幸运之星正在降临...</div> <div class="" v-else-if="!mission.data.mission.credit"><i class="b2font b2-coin-line "></i>点击领取今天的签到奖励!</div> <div class="" v-else><i class="b2font b2-coin-line "></i>恭喜!您今天获得了<b>{{mission.data.mission.credit}}</b>积分</div> </div> <div class="bar-user-info-row"> <div class="user-w-qd-list-title"> <p :class="mission.type == 'today' ? 'picked' : ''" @click="mission.type = 'today'">今日签到</p> <p :class="mission.type == 'always' ? 'picked' : ''" @click="mission.type = 'always'">连续签到</p> </div> <div class="mission-today-list" v-cloak> <ul v-if="mission.type === 'today'"> <li v-for="item in mission.data.mission_today_list.data"> <a :href="item.user.link" class="user-link-block avatar-parent"><img :src="item.user.avatar" class="b2-radius avatar"><span v-if="item.user.user_title" v-html="item.user.verify_icon"></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a :href="item.user.link"><p v-text="item.user.name"></p></a> <p v-html="item.date"></p> </div> <div class="user-mission-info-right"> <span class="user-money"><i class="b2font b2-coin-line "></i>{{item.credit}}</span> </div> </div> </li> </ul> <ul v-else> <li v-for="item in mission.data.mission_always_list.data"> <a :href="item.user.link" class="user-link-block avatar-parent"><img :src="item.user.avatar" class="b2-radius avatar"><span v-if="item.user.user_title" v-html="item.user.verify_icon"></span></a> <div class="user-mission-info"> <div class="user-mission-info-left"> <a :href="item.user.link"><p v-text="item.user.name"></p></a> <p v-html="item.date"></p> </div> <div class="user-mission-info-right"> 连续{{item.count}}天 </div> </div> </li> </ul> </div> </div> <div class="bar-user-info-row" style="padding:5px 10px"> <a href="https://www.zhihailib.com/mission">查看所有</a> </div> </div> </div> <div class="bar-box" v-if="showType.coupon"> <div class="bar-user-info-row"> <div class="new-dmsg-title">我的优惠劵</div> </div> <div class="bar-user-info-row aside-carts-list" v-if="coupon.count > 0"> <ul> <li v-for="item in coupon.data"> <div class="shop-coupon-item"> <div :class="'stamp b2-radius ' + couponClass(item)"> <div class="par"> <p v-if="couponClass(item) == 'stamp01'" v-text="'限制商品'"></p> <p v-else-if="couponClass(item) == 'stamp02'" v-text="'限制商品分类'"></p> <p v-else v-text="'不限制使用'"></p> <sub class="sign">¥</sub><span v-text="item.money"></span><sub>优惠劵</sub> <div class="coupon-date"> <div> <div class="" v-if="item.expiration_date.expired">使用时效:<span>无法使用</span></div> <div class="coupon-desc" v-else-if="item.expiration_date.date != 0">使用时效:<p><span v-text="item.expiration_date.expired_date"></span>之前</p></div> <div class="coupon-desc" v-else>使用时效:永久有效</div> </div> </div> </div> <i class="coupon-bg"></i> </div> <div class="coupon-info b2-radius" v-show="showCouponInfo !== [] && showCouponInfo[item.id] == true" v-cloak> <div class="shop-coupon-title"> <div class="coupon-title"><span>优惠劵ID: </span><span class="coupon-id" v-text="item.id"></span> </div> <span class="close-coupon-info" @click="couponMoreInfo(item.id)">×</span> </div> <div class=""> <span class="coupon-title" v-if="couponClass(item) == 'stamp01'">限制以下商品使用:</span> <span class="coupon-title" v-else-if="couponClass(item) == 'stamp02'">限制以下商品分类使用:</span> <span class="coupon-title" v-else>不限制使用:</span> <div class="" v-if="couponClass(item) == 'stamp01'"> <a :href="it.link" target="_blank" v-for="it in item.products" ><img :src="it.image" :title="it.name"/></a> </div> <div class="" v-else-if="couponClass(item) == 'stamp02'"> [<a :href="ct.link" target="_blank" v-for="ct in item.cats">{{ct.name}}</a>] </div> <div class="" v-else> 所有商品和商品类型均可使用 </div> </div> </div> </div> <div class="bar-coupon-button"> <button class="text" @click="deleteCoupon(item.id)">删除</button> <button class="text" @click="couponMoreInfo(item.id)">详情</button> </div> </li> </ul> </div> <div class="bar-user-info-row aside-cart-empty" v-else v-cloak> 没有优惠劵可用! <p><i class="b2font b2-notification-badge-line "></i></p> </div> </div> <div class="bar-box" v-if="showType.cart"> <div class="bar-user-info-row"> <div class="new-dmsg-title">购物车</div> </div> <div class="bar-user-info-row aside-carts-list" v-if="carts.count > 0"> <ul> <li v-for="item in carts.data"> <div class="aside-carts-title"> <img :src="item.thumb" class="b2-radius"> <div> <a :href="item.link" v-html="item.title"></a> <template v-if="item.desc.length > 0"> <div v-for="(_item,i) in item.desc" class="shop-item-desc"> <span v-text="_item.name"></span>: <span v-text="_item.value"></span> </div> </template> </div> </div> <div class="aside-carts-price"> <div class="aside-carts-price-left"><span v-text="'¥'+item.price.current_price"></span>×<span v-text="item.count"></span></div> <div class="aside-carts-delete" @click="deleteCarts(item.id)">删除</div> </div> </li> </ul> </div> <div class="bar-user-info-row aside-cart-empty" v-else v-cloak> 购物车空空如也! <p><i class="b2font b2-notification-badge-line "></i></p> </div> <div class="bar-user-info-row bar-dmsg-write"> <a class="text" href="javascript:void(0)" @click="deleteCarts('all')">清空购物车</a> <a href="https://www.zhihailib.com/carts">前往结算</a> </div> </div> <div class="bar-box" v-if="showType.dmsg && dmsg.count > 0"> <div class="bar-user-info-row"> <div class="new-dmsg-title" v-if="dmsg.count">您有新的私信</div> <div class="new-dmsg-title" v-else>没有新私信</div> </div> <div class="bar-user-info-row"> <ul v-if="dmsg.data.length > 0" class="bar-dmsg-list"> <li v-for="item in dmsg.data" @click="jumpTo('https://www.zhihailib.com/directmessage/to/'+item.from.id)"> <img class="avatar b2-radius" :src="item.from.avatar"> <div class="new-dmsg-content"> <h2 v-text="item.from.name"></h2> <div class="b2-radius jt" v-html="item.content"></div> </div> </li> </ul> </div> <div class="bar-user-info-row bar-dmsg-write"> <a class="text" @click="b2Dmsg.show = true;b2Dmsg.select = 'select'" href="javascript:void(0)"><i class="b2font b2-quill-pen-line "></i>写新私信</a> <a href="https://www.zhihailib.com/directmessage">查看全部</a> </div> </div> <div class="bar-box" v-if="showType.user"> <template v-if="b2token"> <div class="bar-user-info-row"> <div class="user-w-avatar"> <a :href="userData.link" class="avatar-parent"><img :src="userData.avatar" v-if="userData.avatar" class="avatar b2-radius"/></a> </div> <div class="user-w-name"> <a :href="userData.link"><h2 v-text="userData.name"></h2><span v-html="userData.verify_icon" v-if="userData.verify"></span></a> <div class="user-w-lv"> <div v-html="userData.lv.vip.icon" v-if="userData.lv.vip.icon"></div><div v-html="userData.lv.lv.icon" v-if="userData.lv.lv.icon"></div> </div> </div> <div class="user-w-tj"> <div> <p>书籍</p> <span v-text="userData.post_count"></span> </div> <div> <p>评论</p> <span v-text="userData.comment_count"></span> </div> <div> <p>关注</p> <span v-text="userData.following"></span> </div> <div> <p>粉丝</p> <span v-text="userData.followers"></span> </div> </div> </div> <div class="bar-user-info-row my-order-button"> <a :href="userData.link"><i class="b2font b2-user-heart-line "></i>个人中心</a> </div> <div class="bar-user-info-row my-order-button"> <a :href="userData.link+'/orders'"><i class="b2font b2-file-list-2-line "></i>我的订单</a> </div> <div class="bar-user-info-row"> <div class="bar-user-info-row-title"><a href="https://www.zhihailib.com/task"><span>任务</span><span>❯</span></a></div> <div class="user-w-rw"> <div class="bar-user-next-lv"> <div class="bar-lv-bar" :style="'width:'+userData.task+'%'"></div> <span>今日任务完成</span> <span v-text="userData.task+'%'"></span> </div> </div> </div> <div class="bar-user-info-row"> <div class="bar-user-info-row-title"><a href="https://www.zhihailib.com/gold"><span>升级</span><span>❯</span></a></div> <div class="user-w-rw"> <div class="bar-user-next-lv"> <div class="bar-lv-bar" :style="'width:'+userData.lv.lv.lv_ratio+'%'"></div> <span v-text="userData.lv.lv.name+'→'+userData.lv.lv.lv_next_name"></span> <span v-text="userData.lv.lv.lv_ratio+'%'"></span> </div> </div> </div> <div class="bar-user-info-row"> <div class="bar-user-info-row-title"><a href="https://www.zhihailib.com/gold"><span>财富</span><span>❯</span></a></div> <div class="user-w-gold"> <div class="user-money"><a href="https://www.zhihailib.com/gold"><span>¥</span><b>余额:{{userData.money}}</b></a></div> <div class="user-credit"><a href="https://www.zhihailib.com/gold"><span><i class="b2font b2-coin-line "></i></span><b>积分:{{userData.credit}}</b></a></div> </div> </div> </template> </div> </div> </div> <script type="application/ld+json"> { "@context": "https://ziyuan.baidu.com/contexts/cambrian.jsonld", "@id": "https://www.zhihailib.com/book/128916", "appid": "否", "title": "跟兄弟连学PHP", "images": ["https://www.zhihailib.com/wp-content/uploads/thumb/2025/02/fill_w720_h480_g0_mark_a0bb1362dfb65c9ba643ee2e69c59963.jpg"], "description": "EPUB / 高洛峰 / 电子工业出版社 / 2015-11-30 / 本书是畅销书《细说PHP(第2版)》升级版。PHP是当前开发Web应用系统最理想的工具,它易于使用、功能强大、成本低廉、高安全性…", "pubDate": "2025-02-27T22:53:39", "upDate": "2025-02-27T22:53:39" } </script> </div> <style> :root{ --f-accent:#3a86e0; /* 强调色=网站蓝(链接悬停) */ --f-heading:#1a2431; /* 深色标题 */ --f-text:#5a6472; /* 正文链接 */ --f-muted:#93a0af; /* 次要文字 */ --f-border:#e6e9ed; /* 分隔线/描边 */ } .zhl-footer{color:var(--f-text);border-top:1px solid var(--f-border);font-size:13px;line-height:1.9;} .zhl-footer a{color:var(--f-text);text-decoration:none;transition:color .15s ease;} .zhl-footer a:hover{color:var(--f-accent);} .zhl-footer-inner{max-width:1200px;margin:0 auto;padding:48px 24px 32px;display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:32px;} .zhl-footer .zhl-col h4{color:var(--f-heading);font-size:14px;font-weight:600;margin:0 0 14px;letter-spacing:.3px;} .zhl-footer .zhl-col ul{list-style:none;margin:0;padding:0;} .zhl-footer .zhl-col li{margin:0 0 12px;} .zhl-brand .zhl-logo{font-size:32px;font-weight:700;color:var(--f-heading);letter-spacing:.5px;line-height:1.4;} .hero-title .blue{color:#2196F3;display:inline-block;animation:gentle-float 3s ease-in-out infinite;} .hero-title .dark{color:#555;display:inline-block;animation:gentle-float 3s ease-in-out infinite;} @keyframes gentle-float{0%,100%{transform:translateY(0);}50%{transform:translateY(-4px);}} .zhl-brand .zhl-desc{margin:12px 0 14px;color:var(--f-muted);max-width:300px;} .zhl-badge{display:inline-block;background:rgba(58,134,224,.08);border:1px solid var(--f-border);color:var(--f-accent);font-size:13px;padding:3px 10px;border-radius:20px;} .zhl-social{margin-top:16px;display:flex;gap:10px;} .zhl-social a{width:36px;height:36px;border:1px solid var(--f-border);border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--f-muted);} .zhl-social a:hover{border-color:var(--f-accent);color:var(--f-accent);} .zhl-social svg{width:18px;height:18px;fill:currentColor;} .zhl-cats ul{columns:2;column-gap:20px;} .zhl-footer-bottom{border-top:1px solid var(--f-border);} .zhl-footer-bottom .inner{max-width:1200px;margin:0 auto;padding:16px 24px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;color:#5a6472;font-size:13px;} .zhl-footer-bottom a{color:#5a6472;} .zhl-footer-bottom .sep{margin:0 8px;color:var(--f-border);} .zhl-lang{display:inline-flex;align-items:center;vertical-align:middle;} .zhl-lang > div{display:inline-block !important;vertical-align:middle;} @media (max-width:900px){ .zhl-footer-inner{grid-template-columns:1fr 1fr;gap:28px;} } @media (max-width:560px){ .zhl-footer-inner{grid-template-columns:1fr;} .zhl-footer-bottom .inner{flex-direction:column;align-items:flex-start;} } </style> <footer id="colophon" class="zhl-footer"> <div class="zhl-footer-inner"> <!-- 品牌 --> <div class="zhl-col zhl-brand"> <div class="zhl-logo" style="letter-spacing: 2px;"><span style="color: #2196F3">知海</span><span style="color: #555;">图书馆</span></div> <p class="zhl-desc">最大的免费中文电子图书馆,全网收录、海量珍藏,随时随地、畅快下载,书海无涯,免费启航。</p> <span class="zhl-badge">馆藏书籍 174,688 本</span> <div class="zhl-social"> <a href="https://github.com/harryfighting/zhihailib" target="_blank" rel="noopener" title="GitHub" aria-label="GitHub"><svg viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0016 8c0-4.42-3.58-8-8-8z"/></svg></a> <a href="https://music.youtube.com/@zhihailib" target="_blank" rel="noopener" title="YouTube" aria-label="YouTube"><svg viewBox="0 0 24 24"><path d="M23.5 6.2a3 3 0 0 0-2.1-2.1C19.5 3.6 12 3.6 12 3.6s-7.5 0-9.4.5A3 3 0 0 0 .5 6.2 31 31 0 0 0 0 12a31 31 0 0 0 .5 5.8 3 3 0 0 0 2.1 2.1c1.9.5 9.4.5 9.4.5s7.5 0 9.4-.5a3 3 0 0 0 2.1-2.1A31 31 0 0 0 24 12a31 31 0 0 0-.5-5.8zM9.6 15.6V8.4l6.2 3.6-6.2 3.6z"/></svg></a> <a href="https://space.bilibili.com/3546861275187629" target="_blank" rel="noopener" title="哔哩哔哩" aria-label="哔哩哔哩"><svg viewBox="0 0 24 24" style="width:22px;height:22px"><path d="M18.2 4.6a.8.8 0 0 1 0 1.13L16.9 6.5h.6A2.9 2.9 0 0 1 20.4 9.4v6.7a2.9 2.9 0 0 1-2.9 2.9h-11a2.9 2.9 0 0 1-2.9-2.9V9.4A2.9 2.9 0 0 1 6.5 6.5h.6L5.8 5.73A.8.8 0 1 1 6.93 4.6L8.83 6.5h6.34l1.9-1.9a.8.8 0 0 1 1.13 0zM6.5 8.4a1 1 0 0 0-1 1v6.7a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V9.4a1 1 0 0 0-1-1h-11zM9 11a1 1 0 0 1 1 1v1.2a1 1 0 1 1-2 0V12a1 1 0 0 1 1-1zm6 0a1 1 0 0 1 1 1v1.2a1 1 0 1 1-2 0V12a1 1 0 0 1 1-1z"/></svg></a> <a href="https://www.ximalaya.com/zhubo/536960037" target="_blank" rel="noopener" title="喜马拉雅" aria-label="喜马拉雅"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><circle cx="12" cy="12" r="1.6" fill="currentColor" stroke="none"/><path d="M8.5 8.5a5 5 0 0 0 0 7"/><path d="M15.5 8.5a5 5 0 0 1 0 7"/><path d="M6 6a8 8 0 0 0 0 12"/><path d="M18 6a8 8 0 0 1 0 12"/></svg></a> </div> </div> <!-- 热门分类(SEO 内链核心) --> <div class="zhl-col zhl-cats"> <h4>热门分类</h4> <ul> <li><a href="https://www.zhihailib.com/book/zhongtu-i">文学·小说</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-k">历史·传记</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-b">哲学·心理</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-f">经济·管理</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-t">科技·计算机</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-o">科普·自然</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-c">社会科学</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-d">政治·法律</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-g">文化·教育</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-j">艺术·设计</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-r">医疗·健康</a></li> <li><a href="https://www.zhihailib.com/book/zhongtu-z">综合·其他</a></li> </ul> </div> <!-- 快捷入口 --> <div class="zhl-col"> <h4>快捷入口</h4> <ul> <li><a href="https://www.zhihailib.com/collection">专题精选</a></li> <li><a href="https://www.zhihailib.com/circle/wishlist">求书 / 心愿单</a></li> <li><a href="https://www.zhihailib.com/points">积分说明</a></li> <li><a href="https://www.zhihailib.com/links">电子书工具</a></li> <li><a href="https://www.zhihailib.com/donate">支持我们</a></li> <li><a href="https://www.zhihailib.com/upload-book">发布书籍</a></li> </ul> </div> <!-- 帮助与合规 --> <div class="zhl-col"> <h4>帮助与说明</h4> <ul> <li><a href="https://www.zhihailib.com/about-us">关于我们</a></li> <li><a href="https://www.zhihailib.com/requests">联系我们</a></li> <li><a href="https://www.zhihailib.com/help">帮助中心</a></li> <li><a href="https://www.zhihailib.com/disclaimer">免责声明 / 侵权下架</a></li> <li><a href="https://www.zhihailib.com/privacy-policy">隐私政策</a></li> <li><a href="https://www.zhihailib.com/sitemap.xml">网站地图</a></li> </ul> </div> </div> <!-- 底栏 --> <div class="zhl-footer-bottom"> <div class="inner"> <div>© <a href="https://www.zhihailib.com">ZhihaiLib</a> Since 2023<span class="sep">|</span><a href="mailto:support@zhihailib.com" style="text-decoration:underline;">support@zhihailib.com</a></div> <div><span class="zhl-lang"><div class="gtranslate_wrapper" id="gt-wrapper-81463970"></div></span></div> </div> </div> </footer> <div id="mobile-footer-menu" class="mobile-footer-menu mobile-show footer-fixed" ref="footerMenu" v-show="show"> <div class="mobile-footer-left"> <a href="https://www.zhihailib.com"><span><i class="b2font b2-home-heart-line"></i></span><b>首页</b></a><a href="https://www.zhihailib.com/wishlist"><span><i class="b2font b2-heart-add-line"></i></span><b>心愿</b></a><a href="https://www.zhihailib.com/circle"><span><i class="b2font b2-shield-user-line"></i></span><b>圈子</b></a> </div> <div class="mobile-footer-center"> <button @click="postPoBox.show = true"><span><i class="b2font b2-add-line b2-radius "></i></span></button> </div> <div class="mobile-footer-right"> <a href="https://www.zhihailib.com/vips"><span><i class="b2font b2-hand-heart-line"></i></span><b>赞助</b></a><a href="https://www.zhihailib.com/donate"><span><i class="b2font b2-hearts-line"></i></span><b>捐赠</b></a><a href="javascript:void(0)" onclick="window.event.cancelBubble = true;b2AsideBar.showAc(true)"><span v-if="!msg"><i class="b2font b2-user-heart-line "></i></span><span v-else v-cloak><i class="b2font b2-notification-3-line "></i></span><b id="footer-menu-user">我的</b><b class="footer-new-msg" v-show="msg" v-cloak></b></a> </div> </div> <div id="post-po-box" class="post-po-box"> <div :class="['post-box-content',{'show':show}]" @click="show = false"> <div class="po-post-in b2-radius" v-cloak> <div class="po-post-icons"> <div> <button @click.stop="go('https://www.zhihailib.com/upload-book','write')"> <span class="po-post-icon"><i class="b2font b2-quill-pen-line "></i></span> <span class="po-post-title">发布书籍</span> </button> </div> <div> <button @click.stop="go('https://www.zhihailib.com/create-circle','create_circle')"> <span class="po-post-icon"><i class="b2font b2-donut-chart-fill "></i></span> <span class="po-post-title">创建圈子</span> </button> </div> <div> <button @click.stop="go('https://www.zhihailib.com/circle','create_topic')"> <span class="po-post-icon"><i class="b2font b2-chat-smile-3-line "></i></span> <span class="po-post-title">发表话题</span> </button> </div> <div> <button @click.stop="go('https://www.zhihailib.com/link-register','link')"> <span class="po-post-icon"><i class="b2font b2-xitongdaohang "></i></span> <span class="po-post-title">发布导航</span> </button> </div> <div class="po-verify"> <button @click.stop="go('https://www.zhihailib.com/requests','request')"> <i class="b2font b2-clipboard-line "></i><span>提交工单</span> </button> </div> </div> <div class="po-close-button"> <button @click.stop="show = false"><i class="b2font b2-close-line "></i></button> </div> </div> </div> </div> <form id="wechataction" name="wechataction" action="" method="post"> <input type="submit" value="ok" style="display:none;"> </form> </div> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/b2child/*","/wp-content/themes/b2/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script type="text/javascript" id="vue-js-extra"> /* <![CDATA[ */ var b2_global = {"is_home":"","is_front_page":"","is_weixin":"","site_name":"\u77e5\u6d77\u56fe\u4e66\u9986","site_separator":"-","page_title":"\u7b2c{#}\u9875","login":"\u003Cdiv :class=\"['modal',{'show-modal':show}]\" v-cloak\u003E\n \u003Cdiv class=\"modal-content login-box-content b2-radius\"\u003E\n \u003Cdiv class=\"box login-box-top\"\u003E\n \u003Cspan class=\"close-button\" @click=\"close(0)\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"login-logo\"\u003E\u003Cimg src=\"https://www.zhihailib.com/wp-content/uploads/2025/12/zhihailib-logo.webp\" /\u003E\u003C/div\u003E\n \u003Cform @submit.stop.prevent=\"loginSubmit\"\u003E\n\n \u003Cdiv class=\"invitation-box\" v-show=\"invitation != 0 && (loginType == 2 && !invitationPass)\"\u003E\n \u003Ci class=\"b2font b2-gift-2-line \"\u003E\u003C/i\u003E\n \u003Cp class=\"invitation-des\"\u003E\u4f7f\u7528\u9080\u8bf7\u7801\uff0c\u60a8\u5c06\u83b7\u5f97\u4e00\u4efd\u7279\u6b8a\u7684\u793c\u7269\uff01\u003C/p\u003E\n \u003Cp class=\"invitation-tips\"\u003E\u8bf7\u8f93\u5165\u9080\u8bf7\u7801\u003C/p\u003E\n \u003Cdiv class=\"invitation-input\"\u003E\u003Cinput type=\"text\" id=\"invitation-code2\" name=\"invitation_code\" v-model=\"data.invitation_code\" autocomplete=\"off\"\u003E\u003C/div\u003E\n \u003Cdiv class=\"invitation-button\"\u003E\n \u003Cdiv\u003E\u003Ca :href=\"invitationLink\" target=\"__blank\"\u003E{{invitationText}}\u003C/a\u003E\u003C/div\u003E\n \u003Cdiv\u003E\n \u003Cb class=\"empty text button\" v-show=\"invitation == 1\" @click.stop.prevent=\"invitationPass = true;showLuo = true\"\u003E\u8df3\u8fc7\u003C/b\u003E\n \u003Cbutton :class=\"['button',{'b2-loading':locked}]\" :disabled=\"locked\" \u003E\u63d0\u4ea4\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"login-box-in\" v-show=\"!(invitation != 0 && (loginType == 2 && !invitationPass)) && loginSocialType == 0\"\u003E\n \u003Cdiv class=\"login-title\"\u003E\n \u003Cspan v-if=\"loginType == 1\"\u003E\u003Cb class=\"repass-tips\" v-if=\"repass\"\u003E\u5bc6\u7801\u4fee\u6539\u6210\u529f\uff0c\u8bf7\u767b\u5f55\u003C/b\u003E\u003Cb v-else\u003E\u767b\u5f55\u003C/b\u003E\u003C/span\u003E\n \u003Ctemplate v-else-if=\"allowRegister == 1 && loginType == 2\"\u003E\n \u003Cspan\u003E\u6ce8\u518c\u003C/span\u003E\n \u003C/template\u003E\n \u003Cspan v-else-if=\"loginType == 3\"\u003E\u627e\u56de\u5bc6\u7801\u003C/span\u003E\n \u003Cspan v-else-if=\"loginType == 4\"\u003E\u8bf7\u8f93\u5165\u60a8\u7684\u65b0\u5bc6\u7801\u003C/span\u003E\n \u003C/div\u003E\n\n \u003Clabel class=\"login-form-item\" v-show=\"loginType == 2\"\u003E\n \u003Cinput type=\"text\" name=\"nickname\" tabindex=\"1\" v-model=\"data.nickname\" :class=\"data.nickname ? 'active' : ''\" spellcheck=\"false\" autocomplete=\"off\"\u003E\n \u003Cspan\u003E\u003Cb\u003E\u6635\u79f0\u003C/b\u003E\u003C/span\u003E\n \u003C/label\u003E\n\n \u003Clabel class=\"login-form-item\" v-show=\"loginType != 4\"\u003E\n \u003Cinput type=\"text\" name=\"username\" tabindex=\"2\" v-model=\"data.username\" :class=\"data.username ? 'active' : ''\" spellcheck=\"false\" autocomplete=\"off\"\u003E\n \u003Cspan v-if=\"loginType == 3\"\u003E\u003Cb\u003E\u767b\u5f55\u624b\u673a\u53f7\u6216\u90ae\u7bb1\u003C/b\u003E\u003C/span\u003E\n \u003Cspan v-else\u003E\u003Cb\u003E\u767b\u5f55{{loginText}}\u003C/b\u003E\u003C/span\u003E\n \u003Cp class=\"login-box-des\" v-show=\"loginType == 2 && (checkType == 'luo' || checkType == 'text')\"\u003E\u7528\u4f5c\u767b\u5f55\uff1a\u5b57\u6bcd\u6216\u6570\u5b57\u7684\u7ec4\u5408\uff0c\u6700\u5c116\u4f4d\u5b57\u7b26\u003C/p\u003E\n \u003Cp class=\"login-box-des\" v-show=\"loginType == 2 && (checkType != 'luo' && checkType != 'text')\"\u003E\u7528\u4f5c\u767b\u5f55\u003C/p\u003E\n \u003C/label\u003E\n\n \u003Clabel class=\"login-form-item\" v-show=\"checkType == 'luo' && showLuo && loginType != 3 && loginType != 4\"\u003E\n \u003Cdiv class=\"check-code-luo\"\u003E\u003Cdiv class=\"l-captcha\" data-site-key=\"\" data-width=\"100%\" data-callback=\"getResponse\"\u003E\u003C/div\u003E\u003C/div\u003E\n \u003C/label\u003E\n\n \u003Clabel :class=\"['login-form-item login-check-input',{'show':(((loginType == 2 || loginType == 3) && data.username && checkType != 'luo') || (checkType == 'luo' && loginType == 3))}]\"\u003E\n \u003Cinput type=\"text\" name=\"checkCode\" tabindex=\"3\" v-model=\"data.img_code\" :class=\"data.img_code ? 'active' : ''\" spellcheck=\"false\" v-if=\"checkType == 'text' && loginType != 3\" autocomplete=\"off\"\u003E\n \u003Cinput type=\"text\" name=\"checkCode\" tabindex=\"3\" v-model=\"data.code\" :class=\"data.code ? 'active' : ''\" spellcheck=\"false\" autocomplete=\"off\" v-else\u003E\n \u003Cspan\u003E\u003Cb\u003E\u9a8c\u8bc1\u7801\u003C/b\u003E\u003C/span\u003E\n \u003Cdiv class=\"check-code-img\" v-if=\"checkType == 'text' && loginType != 3\" @click=\"changeCode\"\u003E\n \u003Cimg :src=\"codeImg\" v-if=\"codeImg\"/\u003E\n \u003Ci class=\"recaptcha-load\" v-else\u003E\u003C/i\u003E\n \u003C/div\u003E\n \n \u003Cb id=\"CaptchaId\" class=\"login-eye button text\" @click.stop.prevent=\"!SMSLocked && count == 60 && checkType != 'tencent' ? sendCode() : ''\" v-else\u003E{{count \u003C 60 ? count+'\u79d2\u540e\u53ef\u91cd\u53d1' : '\u53d1\u9001\u9a8c\u8bc1\u7801'}}\u003C/b\u003E\n \u003C/label\u003E\n\n \u003Clabel class=\"login-form-item\" v-show=\"loginType != 3\"\u003E\n \u003Cinput name=\"password\" :type=\"eye ? 'text' : 'password'\" tabindex=\"4\" v-model=\"data.password\" :class=\"data.password ? 'active' : ''\" autocomplete=\"off\" spellcheck=\"false\"\u003E\n \u003Cspan\u003E\u003Cb v-if=\"loginType == 4\"\u003E\u65b0\u5bc6\u7801\u003C/b\u003E\u003Cb v-else\u003E\u5bc6\u7801\u003C/b\u003E\u003C/span\u003E\n \u003Cb class=\"login-eye button text\" @click.stop.prevent=\"eye = !eye\"\u003E\u003Ci :class=\"['b2font',eye ? 'b2-eye-fill' : 'b2-eye-off-fill']\"\u003E\u003C/i\u003E\u003C/b\u003E\n \u003C/label\u003E\n\n \u003Clabel class=\"login-form-item\" v-show=\"loginType == 4\"\u003E\n \u003Cinput name=\"repassword\" :type=\"eye ? 'text' : 'password'\" tabindex=\"5\" v-model=\"data.confirmPassword\" :class=\"data.confirmPassword ? 'active' : ''\" autocomplete=\"off\" spellcheck=\"false\"\u003E\n \u003Cspan\u003E\u003Cb\u003E\u91cd\u590d\u65b0\u5bc6\u7801\u003C/b\u003E\u003C/span\u003E\n \u003Cp class=\"login-box-des\" v-show=\"loginType == 4\"\u003E\u6700\u5c116\u4f4d\u5b57\u7b26\u003C/p\u003E\n \u003C/label\u003E\n\n \u003Cdiv class=\"forget-pass-info\" v-if=\"loginType == 3\"\u003E\u8bf7\u586b\u5199\u60a8\u6ce8\u518c\u65f6\u4f7f\u7528\u7684\u624b\u673a\u53f7\u7801\u6216\u90ae\u7bb1\uff0c\u53d1\u9001\u9a8c\u8bc1\u7801\u4ee5\u540e\uff0c\u8bf7\u5728\u624b\u673a\u53f7\u7801\u6216\u90ae\u7bb1\u4e2d\u67e5\u770b\uff0c\u5e76\u586b\u5199\u5230\u6b64\u5904\uff01\uff08\u9a8c\u8bc1\u78013\u5206\u949f\u6709\u6548\u671f\uff09\u003C/div\u003E\n \u003Cdiv class=\"site-terms\" v-if=\"loginType == 2 && allowRegister == 1\"\u003E\n \u003Clabel\u003E\u003Cinput type=\"checkbox\" name=\"xieyi\" v-model=\"$store.state.xieyi\"/\u003E\u6211\u5df2\u540c\u610f \u003Ca href=\"https://www.zhihailib.com/terms-of-service\" target=\"_blank\"\u003E\u7528\u6237\u534f\u8bae\u003C/a\u003E \u548c \u003Ca href=\"https://www.zhihailib.com/privacy-policy\" target=\"_blank\"\u003E\u9690\u79c1\u653f\u7b56\u003C/a\u003E\u003C/label\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"login-bottom\"\u003E\n \u003Cbutton v-if=\"loginType == 1\" :class=\"locked ? 'b2-loading' : ''\" :disabled=\"locked\"\u003E\u5feb\u901f\u767b\u5f55\u003C/button\u003E\n \u003Cbutton :class=\"locked ? 'b2-loading' : ''\" v-if=\"loginType == 2 && allowRegister == 1\" :disabled=\"locked || !$store.state.xieyi\"\u003E\u5feb\u901f\u6ce8\u518c\u003C/button\u003E\n \u003Cbutton v-if=\"loginType == 3\" :class=\"locked ? 'b2-loading' : ''\" :disabled=\"locked\"\u003E\u4e0b\u4e00\u6b65\u003C/button\u003E\n \u003Cbutton v-if=\"loginType == 4\" :class=\"locked ? 'b2-loading' : ''\" :disabled=\"locked\"\u003E\u63d0\u4ea4\u003C/button\u003E\n \u003C/div\u003E\n \u003Cdiv :class=\"loginType == 3 || loginType == 4 || (invitationPass && loginType == 2) ? 'login-tk-forget login-tk' : 'login-tk'\"\u003E\n \u003Cp v-if=\"loginType == 4\"\u003E\u003Ca href=\"javascript:void(0)\" @click=\"loginAc(3)\"\u003E\u8fd4\u56de\u4fee\u6539\u003C/a\u003E\u003C/p\u003E\n \u003Cp v-if=\"loginType == 2 && invitationPass\"\u003E\u9080\u8bf7\u7801\u9519\u4e86\uff1f\u003Ca href=\"javascript:void(0)\" @click=\"invitationPass = false;showLuo = false\"\u003E\u4fee\u6539\u003C/a\u003E\u003C/p\u003E\n \u003Cp class=\"login-p\" v-if=\"(loginType == 1 || loginType == 3) && allowRegister == 1\"\u003E\u003Ca v-if=\"loginType == 1\" href=\"javascript:void(0)\" @click=\"loginAc(3)\"\u003E\u5fd8\u8bb0\u5bc6\u7801\uff1f\u003C/a\u003E\u003Cspan\u003E\u65b0\u7528\u6237\uff1f\u003Ca href=\"javascript:void(0)\" @click=\"loginAc(2)\"\u003E\u6ce8\u518c\u003C/a\u003E\u003C/span\u003E\u003C/p\u003E\n \u003Cp v-if=\"loginType == 2 || loginType == 3 || loginType == 4\"\u003E\u003Ca v-if=\"loginType == 2\" href=\"javascript:void(0)\" @click=\"loginAc(3)\"\u003E\u5fd8\u8bb0\u5bc6\u7801\uff1f\u003C/a\u003E\u003Cspan\u003E\u5df2\u6709\u5e10\u53f7\uff1f\u003Ca href=\"javascript:void(0)\" @click=\"loginAc(1)\"\u003E\u767b\u5f55\u003C/a\u003E\u003C/span\u003E\u003C/p\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv :class=\"'login-social-button '+(openOauth ? 'show' : '')\" v-if=\"!(invitation != 0 && (loginType == 2 && !invitationPass)) && openOauth && loginSocialType == 0\"\u003E\n \u003Cdiv :class=\"['login-social-button-bottom',{'is-weixin':isWeixin}]\"\u003E\n \u003Cdiv\u003E\u793e\u4ea4\u767b\u5f55:\u003C/div\u003E\n \u003Cdiv\u003E\n \u003Ctemplate v-for=\"(open,key,index) in oauth\"\u003E\n \u003Ca :href=\"open.url\" :class=\"'button login-'+key\" @click=\"markHistory(open.mp,$event)\" v-if=\"open.open\" :style=\"'color:'+open.color\"\u003E\u003Ci :class=\"'b2font b2-'+key+' '+open.icon\"\u003E\u003C/i\u003E\u003Cspan\u003E{{open.name}}\u003C/span\u003E\u003C/a\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv v-if=\"loginSocialType == 1 && (loginType == 1 || !(invitation != 0 && (loginType == 2 && !invitationPass)))\" class=\"social-only-box\"\u003E\n \u003Cdiv class=\"social-only-box-title text-xs text-center\"\u003E\u767b\u5f55\u5373\u53ef\u6253\u5f00\u65b0\u4e16\u754c\u5927\u95e8\u003C/div\u003E\n \u003Cdiv :class=\"'login-social-button '+(openOauth ? 'show' : '')\" v-if=\"!(invitation != 0 && (loginType == 2 && !invitationPass)) && openOauth\"\u003E\n \u003Cdiv :class=\"['login-social-button-bottom',{'is-weixin':isWeixin}]\"\u003E\n \u003Cdiv\u003E\u793e\u4ea4\u767b\u5f55:\u003C/div\u003E\n \u003Cdiv class=\"social-only-box-a\"\u003E\n \u003Ctemplate v-for=\"(open,key,index) in oauth\"\u003E\n \u003Ca :href=\"open.url\" :class=\"'button login-'+key\" @click=\"markHistory(open.mp,$event)\" v-if=\"open.open\" :style=\"'color:'+open.color\"\u003E\u003Ci :class=\"'b2font b2-'+key+' '+open.icon\"\u003E\u003C/i\u003E\u003Cspan\u003E{{open.name}}\u003C/span\u003E\u003C/a\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"site-terms\" v-if=\"loginType == 2 && allowRegister == 1\"\u003E\n \u003Clabel\u003E\u003Cinput type=\"checkbox\" name=\"xieyi\" v-model=\"$store.state.xieyi\"/\u003E\u6211\u5df2\u540c\u610f \u003Ca href=\"https://www.zhihailib.com/terms-of-service\" target=\"_blank\"\u003E\u7528\u6237\u534f\u8bae\u003C/a\u003E \u548c \u003Ca href=\"https://www.zhihailib.com/privacy-policy\" target=\"_blank\"\u003E\u9690\u79c1\u653f\u7b56\u003C/a\u003E\u003C/label\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/form\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E","search_box":"\u003Cdiv :class=\"['modal',{'show-modal':show}]\" v-cloak @click.stop=\"\"\u003E\n \u003Cdiv class=\"modal-content search-box-content b2-radius\" \u003E\n \u003Cdiv class=\"login-logo\"\u003E\u003Cimg src=\"https://www.zhihailib.com/wp-content/uploads/2025/12/zhihailib-logo.webp\" /\u003E\u003C/div\u003E\n \u003Cspan class=\"close-button\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"search-title\"\u003E\u641c\u7d22\u4e00\u4e0b\u53ef\u80fd\u6765\u5f97\u66f4\u5feb\u003C/div\u003E\n \u003Cform @click.stop=\"\" method=\"get\" action=\"https://www.zhihailib.com\" :class=\"showSearch ? 'search-form-normal b2-show b2-radius' : 'search-form-normal b2-hidden b2-radius'\" v-cloak\u003E\n \u003Cinput class=\"search-input b2-radius\" type=\"text\" name=\"s\" autocomplete=\"off\" placeholder=\"\u8bf7\u8f93\u5165\u5173\u952e\u8bcd\"\u003E\n \u003Cinput type=\"hidden\" name=\"type\" v-model=\"type\"\u003E\n \u003Cdiv class=\"search-button\"\u003E\u003Cbutton class=\"\"\u003E\u641c\u7d22\u003C/button\u003E\u003C/div\u003E\n \u003C/form\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","gg_box":"\n \u003Cdiv :class=\"['modal','gong-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\" v-if=\"ggdata\"\u003E\n \u003Cspan class=\"close-button\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"gg-box-title\" :style=\"ggdata.thumb ? 'background-image:url('+ggdata.thumb+')' : ''\"\u003E\n \u003Cdiv class=\"gg-title\"\u003E\n \u003Ch2\u003E\u516c\u544a\u003C/h2\u003E\n \u003Cspan\u003E{{ggdata.date}}\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"title-bg\"\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"gg-title\"\u003E\u003Ca :href=\"ggdata.href\" v-text=\"ggdata.title\" @click=\"close()\"\u003E\u003C/a\u003E\u003C/div\u003E\n \u003Cdiv class=\"gg-desc\"\u003E\u003Cp v-html=\"ggdata.desc\"\u003E\u003C/p\u003E\u003C/div\u003E\n \u003Cdiv class=\"gg-button\"\u003E\u003Ca class=\"button\" :href=\"ggdata.href\" @click=\"close()\"\u003E\u524d\u5f80\u67e5\u770b\u8be6\u60c5\u003C/a\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","dmsg_box":"\n \u003Cdiv :class=\"['modal','dmsg-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"dmsg-box-header\" v-if=\"type !== 'select'\" v-cloak\u003E\n \u003Cimg :src=\"user.avatar\"\u003E\u003Cspan v-text=\"user.name\"\u003E\u003C/span\u003E\u003Cspan class=\"dmsg-edit-user\" v-if=\"search == true && type == ''\" @click=\"edit()\"\u003E\u4fee\u6539\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"dmsg-select\" v-else v-cloak\u003E\n \u003Cp\u003E\u8bf7\u8f93\u5165\u5bf9\u65b9\u6635\u79f0\uff0c\u4ece\u4e0b\u62c9\u6846\u91cc\u9009\u62e9\u6536\u4ef6\u4eba\u003C/p\u003E\n \u003Cinput type=\"text\" v-model=\"nickname\" placeholder=\"\u641c\u7d22\u6635\u79f0\" readonly onfocus=\"this.removeAttribute('readonly');\" autocomplete=\"off\"\u003E\n \u003Cdiv class=\"dmsg-user-list\" v-if=\"UserList.length \u003E 0\" v-cloak\u003E\n \u003Cul\u003E\n \u003Cli v-for=\"user in UserList\" @click=\"getUserData(user.id)\"\u003E\n \u003Cimg :src=\"user.avatar\" class=\"b2-radius\"/\u003E\n \u003Cdiv class=\"dmsg-user-list-row\"\u003E\n \u003Ch2 v-text=\"user.name\"\u003E\u003C/h2\u003E\n \u003Cp\u003E{{user.desc ? user.desc : '\u6682\u65e0\u63cf\u8ff0'}}\u003C/p\u003E\n \u003C/div\u003E\n \u003C/li\u003E\n \u003C/ul\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cspan class=\"close-button\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"\"\u003E\n \u003Ctextarea id=\"textarea\" :placeholder=\"user.name ? '\u7ed9'+user.name+'\u53d1\u79c1\u4fe1' : '\u79c1\u4fe1\u5185\u5bb9'\" class=\"dmsg-textarea\" v-model=\"content\"\u003E\u003C/textarea\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"dmsg-button\"\u003E\n \u003Cbutton class=\"empty\" @click=\"close()\"\u003E\u53d6\u6d88\u003C/button\u003E\n \u003Cbutton @click=\"send()\" :disabled=\"content == '' || (type !== 'select' && !user.name) ? true : false\" :class=\"locked ? 'b2-loading' : ''\"\u003E\u53d1\u9001\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","ds_box":"\n \u003Cdiv :class=\"['modal','ds-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"pay-box-title\"\u003E\n \u003Cdiv :class=\"'pay-box-left'+(showtype == 'ds' ? ' ds-pay-title' : '')\" ref=\"dstitle\"\u003E\n \u003Ctemplate v-if=\"showtype == 'ds'\"\u003E\n \u003Cimg :src=\"author.avatar\"\u003E\n \u003Cspan\u003E\u7ed9{{author.name}}\u6253\u8d4f\u003C/span\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else-if=\"showtype == 'cz' || showtype == 'card'\"\u003E\n \u003Cspan\u003E\u5145\u503c\u003C/span\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else-if=\"showtype == 'cg'\"\u003E\n \u003Cspan\u003E\u79ef\u5206\u8d2d\u4e70\u003C/span\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else\u003E\n {{data.title}}\n \u003C/template\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-right\"\u003E\n \u003Cspan class=\"pay-close\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv v-if=\"showtype == 'cg'\" class=\"cg-info\"\u003E\n \uffe5\u003Cspan\u003E{{payMoney}}\u003C/span\u003E\u53ef\u8d2d\u4e70\u003Cspan\u003E{{creditAdd()}}\u003C/span\u003E\u79ef\u5206\uff0c\u6700\u4f4e\u5151\u6362\u989d\u5ea6\uffe5\u003Cspan\u003E{{cg.min}}\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv :class=\"'pay-box-content'+' '+showtype\"\u003E\n \u003Ctemplate v-if=\"showtype == 'ds'\"\u003E\n \u003Cdiv class=\"ds-msg\"\u003E{{msg}}\u003C/div\u003E\n \u003Cul class=\"ds-money\"\u003E\n \u003Cli v-for=\"(m,index) in money\" @click=\"picked(m,index)\" :class=\"value == index ? 'picked' : ''\"\u003E\u003Cdiv class=\"ds-item\"\u003E\u003Ci class=\"b2font b2-tang \"\u003E\u003C/i\u003E\u003Cspan v-text=\"m\"\u003E\u003C/span\u003E\u003Cb\u003E\uffe5\u003C/b\u003E\u003C/div\u003E\u003C/li\u003E\n \u003Cli @click=\"picked(0,5)\" :class=\"value == 5 ? 'picked' : ''\"\u003E\n \u003Clabel class=\"ds-item\" v-if=\"value == 5\"\u003E\u003Ci class=\"b2font b2-tang \"\u003E\u003C/i\u003E\u003Cinput type=\"number\" id=\"dsinput\" v-model=\"payMoney\" oninput=\"value=value.replace(/[^\\d]/g,'')\"\u003E\u003Cb\u003E\uffe5\u003C/b\u003E\u003C/label\u003E\n \u003Clabel class=\"ds-item ds-item-custom\" v-else for=\"dsinput\"\u003E\u003Ci class=\"b2font b2-edit-2-line \"\u003E\u003C/i\u003E\u81ea\u5b9a\u4e49\u003C/label\u003E\n \u003C/li\u003E\n \u003C/ul\u003E\n \u003Cdiv class=\"ds-textarea\"\u003E\n \u003Ctextarea placeholder=\"\u7ed9Ta\u7559\u8a00\u2026\" v-model=\"content\"\u003E\u003C/textarea\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else-if=\"showtype == 'cz'\"\u003E\n \u003Cdiv class=\"pay-box-desc\"\u003E\u8bf7\u8f93\u5165\u5145\u503c\u91d1\u989d\uff1a\u003C/div\u003E\n \u003Cinput class=\"pay-cz-input\" type=\"number\" v-model=\"payMoney\" oninput=\"value=value.replace(/[^\\d]/g,'')\"\u003E\n \u003Cdiv style=\"margin-top:20px;font-size:12px\"\u003E\n \u60a8\u6bcf\u5929\u53ef\u4ee5\u5145\u503c\u003Cb v-text=\"b2_global.cz.count\"\u003E\u003C/b\u003E\u6b21\uff0c\u6bcf\u6b21\u6700\u591a\u5145\uffe5\u003Cb v-text=\"b2_global.cz.max\"\u003E\u003C/b\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else-if=\"showtype == 'card'\"\u003E\n \u003Cdiv class=\"pay-box-desc\"\u003E\u8bf7\u8f93\u5165\u60a8\u7684\u5145\u503c\u5361\u548c\u5bc6\u7801\uff1a\u003C/div\u003E\n \u003Cinput type=\"text\" v-model=\"card.number\" placeholder=\"\u5361\u53f7\"\u003E\n \u003Cinput type=\"text\" v-model=\"card.password\" placeholder=\"\u5bc6\u7801\"\u003E\n \u003Cdiv class=\"card-text\"\u003E\n \u003Cspan v-html=\"card.text\"\u003E\u003C/span\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else-if=\"showtype == 'cg'\"\u003E\n \u003Cdiv class=\"pay-box-desc\"\u003E\u8bf7\u8f93\u5165\u8981\u8d2d\u4e70\u7684\u91d1\u989d\u003C/div\u003E\n \u003Cinput type=\"number\" v-model=\"payMoney\" placeholder=\"\u91d1\u989d\" oninput=\"value=value.replace(/[^\\d]/g,'')\"\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else\u003E\n \u003Cdiv class=\"pay-box-desc\"\u003E\u652f\u4ed8\u91d1\u989d\u003C/div\u003E\n \u003C/template\u003E\n \u003Ctemplate v-if=\"showtype !== 'cz' && showtype !== 'card' && showtype !== 'cg'\"\u003E\n \u003Cdiv :class=\"showtype !== 'ds' ? 'ds-price' : 'ds-price mar0'\"\u003E\n \u003Cp class=\"ds-current-money\"\u003E\u003Ci\u003E\uffe5\u003C/i\u003E\u003Cspan v-text=\"payMoney\"\u003E\u003C/span\u003E\u003C/p\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-my-money\" v-if=\"login\"\u003E\n \u003Cspan class=\"b2-radius\"\u003E\u60a8\u5f53\u524d\u7684\u4f59\u989d\u4e3a\uffe5{{user.money ? user.money : 0}}\u003Ca href=\"https://www.zhihailib.com/gold\" class=\"b2-color\" target=\"_blank\" v-show=\"showtype != 'cz' && showtype != 'card'\"\u003E\u5145\u503c\u4f59\u989d\u003C/a\u003E\u003C/span\u003E\n \u003Cp v-show=\"payMoney === 0 && payMoney != '' && showtype !== 'cz' && showtype !== 'card'\" v-cloak\u003E\u5546\u54c1\u4ef7\u683c\u4e3a0\u5143\uff0c\u8bf7\u4f7f\u7528\u4f59\u989d\u4ed8\u6b3e\uff01\u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-type\"\u003E\n \u003Cul\u003E\n \u003Cli v-if=\"allow.alipay && !isWeixin\"\u003E\u003Cbutton class=\"b2-radius\" :class=\"payType == 'alipay' ? 'picked' : ''\" @click=\"chosePayType('alipay')\" :disabled=\"payMoney == 0 && payType !== 'card' ? true : false\"\u003E\u003Ci class=\"b2font b2-alipay-fill \"\u003E\u003C/i\u003E\u003Cspan\u003E\u652f\u4ed8\u5b9d\u003C/span\u003E\u003C/button\u003E\u003C/li\u003E\n \u003Cli v-if=\"allow.wecatpay\"\u003E\u003Cbutton class=\"b2-radius\" :class=\"payType == 'wecatpay' ? 'picked' : ''\" @click=\"chosePayType('wecatpay')\" :disabled=\"payMoney == 0 && payType !== 'card' ? true : false\"\u003E\u003Ci class=\"b2font b2-wechat-pay-fill \"\u003E\u003C/i\u003E\u003Cspan\u003E\u5fae\u4fe1\u003C/span\u003E\u003C/button\u003E\u003C/li\u003E\n \u003Cli v-if=\"allow.paypal\"\u003E\u003Cbutton class=\"b2-radius\" :class=\"payType == 'paypal' ? 'picked' : ''\" @click=\"chosePayType('paypal')\" :disabled=\"payMoney == 0 && payType !== 'card' ? true : false\"\u003E\u003Ci class=\"b2font b2-paypal-fill \"\u003E\u003C/i\u003E\u003Cspan\u003EPayPal\u003C/span\u003E\u003C/button\u003E\u003C/li\u003E\n \u003Cli v-if=\"allow.balance && login\"\u003E\u003Cbutton class=\"b2-radius\" :class=\"payType == 'balance' ? 'picked' : ''\" @click=\"chosePayType('balance')\"\u003E\u003Ci class=\"ds-pay-yue\"\u003E\uffe5\u003C/i\u003E\u003Cspan\u003E\u4f59\u989d\u003C/span\u003E\u003C/button\u003E\u003C/li\u003E\n \u003Cli v-if=\"allow.card\"\u003E\u003Cbutton class=\"b2-radius\" :class=\"payType == 'card' ? 'picked' : ''\" @click=\"chosePayType('card')\"\u003E\u003Ci class=\"b2font b2-bank-card-fill \"\u003E\u003C/i\u003E\u003Cspan\u003E\u5361\u5bc6\u003C/span\u003E\u003C/button\u003E\u003C/li\u003E\n \u003C/ul\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-button\"\u003E\n \u003Cdiv\u003E\n \u003Ca v-if=\"jump == 'jump' || jump == 'mweb' || jump == 'jsapi'\" :href=\"!disabled() && href ? href : 'javascript:void(0)'\" :class=\"'button '+(disabled() ? 'disabled' : '')\" :target=\"!disabled() && href ? '_blank' : ''\" @click=\"pay()\"\u003E\u003Cspan v-if=\"!payMoney && (showtype == 'ds' || showtype == 'cz' || showtype == 'cg')\"\u003E\u8bf7\u8f93\u5165\u91d1\u989d\u003C/span\u003E\u003Cspan v-else-if=\"!payType\"\u003E\u8bf7\u9009\u62e9\u652f\u4ed8\u65b9\u5f0f\u003C/span\u003E\u003Cspan v-else-if=\"waitOrder\"\u003E\u521b\u5efa\u8ba2\u5355\u4e2d...\u003C/span\u003E\u003Cspan v-else-if=\"payType\"\u003E\u652f\u4ed8\u003C/span\u003E\u003C/a\u003E\n \u003Cbutton :class=\"locked ? 'b2-loading' : ''\" :disabled=\"disabled() || locked ? true : false\" @click=\"pay()\" v-else\u003E\u003Cspan v-if=\"!payMoney && (showtype == 'ds' || showtype == 'cz' || showtype == 'cg')\"\u003E\u8bf7\u8f93\u5165\u91d1\u989d\u003C/span\u003E\u003Cspan v-else-if=\"!payType\"\u003E\u8bf7\u9009\u62e9\u652f\u4ed8\u65b9\u5f0f\u003C/span\u003E\u003Cspan v-else-if=\"payType\"\u003E\u652f\u4ed8\u003C/span\u003E\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","scan_box":"\n \u003Cdiv :class=\"['modal','ds-box scan-box',{'show-modal':show}]\" data-money=\"\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"pay-box-title\"\u003E\n \u003Cdiv class=\"pay-box-left\" ref=\"dstitle\"\u003E\n \u003Cspan class=\"\" v-html=\"data.title\"\u003E\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-right\"\u003E\n \u003Cspan class=\"pay-close\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-content\"\u003E\n \u003Cdiv class=\"pay-check\" v-if=\"success === true\"\u003E\n \u003Cdiv class=\"green\"\u003E\u003Ci class=\"b2font b2-check-double-line \"\u003E\u003C/i\u003E\u003C/div\u003E\n \u003Ch2\u003E....\u652f\u4ed8\u6210\u529f....\u003C/h2\u003E\n \u003Cdiv class=\"pay-check-button\"\u003E\u003Cbutton @click=\"refresh()\"\u003E\u786e\u5b9a\u003C/button\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-check\" v-else-if=\"success === 'fail'\"\u003E\n \u003Cdiv class=\"red\"\u003E\u003Ci class=\"b2font b2-close-line \"\u003E\u003C/i\u003E\u003C/div\u003E\n \u003Ch2\u003E....\u652f\u4ed8\u5931\u8d25....\u003C/h2\u003E\n \u003Cdiv class=\"pay-check-button\"\u003E\u003Cbutton @click=\"close()\"\u003E\u786e\u5b9a\u003C/button\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"scan-info\" v-else\u003E\n \u003Cdiv class=\"qrcode-img b2-radius\"\u003E\u003Cimg :src=\"backData.qrcode\"\u003E\u003C/div\u003E\n \u003Cdiv class=\"qrcode-money\"\u003E\u003Cspan v-text=\"'\uffe5'+data.order_price\"\u003E\u003C/span\u003E\u003C/div\u003E\n \u003Cdiv v-if=\"!backData.is_weixin && backData.is_mobile\"\u003E\u8bf7\u622a\u56fe\u4f7f\u7528\u003Cspan v-if=\"data.pay_type == 'alipay'\" class=\"scan-alipay\"\u003E\u652f\u4ed8\u5b9d\u003C/span\u003E\u003Cspan v-else class=\"scan-wecatpay\"\u003E\u5fae\u4fe1\u76f8\u518c\u003C/span\u003E\u8bc6\u522b\u652f\u4ed8\u003C/div\u003E\n \u003Cdiv class=\"qrcode-desc\" v-else\u003E\u8bf7\u6253\u5f00\u624b\u673a\u4f7f\u7528\u003Cspan v-if=\"data.pay_type == 'alipay'\" class=\"scan-alipay\"\u003E\u652f\u4ed8\u5b9d\u003C/span\u003E\u003Cspan v-else class=\"scan-wecatpay\"\u003E\u5fae\u4fe1\u003C/span\u003E\u626b\u7801\u652f\u4ed8\u003C/div\u003E\n \u003Cdiv class=\"qrcode-time\"\u003E\u300c\u003Cspan v-html=\"timesec\"\u003E\u003C/span\u003E\u300d\u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","pay_check":"\n \u003Cdiv :class=\"['modal','ds-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"pay-box-title\"\u003E\n \u003Cdiv class=\"pay-box-left\" ref=\"dstitle\" v-html=\"title\"\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-right\"\u003E\n \u003Cspan class=\"pay-close\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-content\"\u003E\n \u003Ctemplate v-if=\"type == 'card'\"\u003E\n \u003Cdiv class=\"pay-check\"\u003E\n \u003Cdiv class=\"green\"\u003E\u003Ci class=\"b2font b2-check-double-line \"\u003E\u003C/i\u003E\u003C/div\u003E\n \u003Ch2\u003E....\u5145\u503c\u6210\u529f....\u003C/h2\u003E\n \u003Cdiv class=\"pay-check-button\"\u003E\u003Cbutton @click=\"refresh()\"\u003E\u786e\u5b9a\u003C/button\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else\u003E\n \u003Cdiv class=\"pay-check\" v-if=\"success == false\"\u003E\n \u003Cdiv\u003E\u003Ci class=\"b2font b2-waiting \"\u003E\u003C/i\u003E\u003C/div\u003E\n \u003Ch2\u003E....\u652f\u4ed8\u786e\u8ba4\u4e2d....\u003C/h2\u003E\n \u003Cdiv class=\"qrcode-time\"\u003E\u300c\u003Cspan v-html=\"timesec\"\u003E\u003C/span\u003E\u300d\u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-check\" v-if=\"success == 'fail'\"\u003E\n \u003Cdiv class=\"red\"\u003E\u003Ci class=\"b2font b2-close-line \"\u003E\u003C/i\u003E\u003C/div\u003E\n \u003Ch2\u003E....\u652f\u4ed8\u5931\u8d25....\u003C/h2\u003E\n \u003Cdiv class=\"pay-check-button\"\u003E\u003Cbutton @click=\"close()\"\u003E\u786e\u5b9a\u003C/button\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-check\" v-if=\"success == true\"\u003E\n \u003Cdiv class=\"green\"\u003E\u003Ci class=\"b2font b2-check-double-line \"\u003E\u003C/i\u003E\u003C/div\u003E\n \u003Ch2\u003E....\u652f\u4ed8\u6210\u529f....\u003C/h2\u003E\n \u003Cdiv class=\"pay-check-button\"\u003E\u003Cbutton @click=\"refresh()\"\u003E\u786e\u5b9a\u003C/button\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","credit_box":"\n \u003Cdiv :class=\"['modal','credit-pay-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"pay-box-title\"\u003E\n \u003Cdiv class=\"pay-box-left\"\u003E\n {{decodeURI(data.title)}}\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-right\"\u003E\n \u003Cspan class=\"pay-close\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-box-content\"\u003E\n \u003Cdiv class=\"credit-pay-title\"\u003E\n \u79ef\u5206\u652f\u4ed8\n \u003C/div\u003E\n \u003Cdiv class=\"pay-credit\"\u003E\n \u003Ci class=\"b2font b2-coin-line \"\u003E\u003C/i\u003E\u003Cspan v-text=\"data.order_price\"\u003E\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-my-money\"\u003E\n \u003Cspan class=\"b2-radius\"\u003E\u60a8\u5f53\u524d\u7684\u79ef\u5206\u4e3a\u003Ci class=\"b2font b2-coin-line \"\u003E\u003C/i\u003E{{user.credit ? user.credit : 0}}\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv v-show=\"parseInt(user.credit) \u003C parseInt(data.order_price)\" class=\"credit-tips b2-hover red\"\u003E\n \u60a8\u5f53\u524d\u7684\u79ef\u5206\u4e0d\u8db3\uff0c\u8bf7 \u003Ca href=\"https://www.zhihailib.com/gold/credit\" target=\"blank\"\u003E\u8d2d\u4e70\u79ef\u5206\u003C/a\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"pay-button\"\u003E\n \u003Cdiv\u003E\n \u003Cbutton :class=\"locked ? 'b2-loading' : ''\" :disabled=\"disabled()\" @click=\"pay()\"\u003E\u652f\u4ed8\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","mp_box":"\n \u003Cdiv :class=\"['modal','mp-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"login-logo\"\u003E\u003Cimg src=\"https://www.zhihailib.com/wp-content/uploads/2025/12/zhihailib-logo.webp\" /\u003E\u003C/div\u003E\n \u003Cspan class=\"pay-close\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"mp-box-content\"\u003E\n \u003Cdiv class=\"invitation-box\" v-show=\"token\"\u003E\n \u003Ci class=\"b2font b2-gift-2-line \"\u003E\u003C/i\u003E\n \u003Cp class=\"invitation-des\"\u003E\u4f7f\u7528\u9080\u8bf7\u7801\uff0c\u60a8\u5c06\u83b7\u5f97\u4e00\u4efd\u7279\u6b8a\u7684\u793c\u7269\uff01\u003C/p\u003E\n \u003Cp class=\"invitation-tips\"\u003E\u8bf7\u8f93\u5165\u9080\u8bf7\u7801\u003C/p\u003E\n \u003Cdiv class=\"invitation-input\"\u003E\u003Cinput type=\"text\" id=\"invitation-code\" name=\"invitation_code\" v-model=\"invitationCode\" autocomplete=\"off\"\u003E\u003C/div\u003E\n \u003Cdiv class=\"invitation-button\"\u003E\n \u003Cdiv\u003E\u003Ca :href=\"invitationLink\" target=\"__blank\"\u003E{{invitationText}}\u003C/a\u003E\u003C/div\u003E\n \u003Cdiv\u003E\n \u003Cb class=\"empty text button\" v-show=\"invitation == 1\" @click=\"checkInv()\"\u003E\u8df3\u8fc7\u003C/b\u003E\n \u003Cbutton :class=\"['button',{'b2-loading':locked}]\" :disabled=\"locked\" @click=\"checkInv()\"\u003E\u63d0\u4ea4\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv v-show=\"!token\"\u003E\n \u003Cdiv class=\"mp-login-img\" id=\"mp-login-box\"\u003E\u003Cimg :src=\"qrcode\" v-if=\"qrcode\"\u003E\u003C/div\u003E\n \u003Cp\u003E\u6253\u5f00\u5fae\u4fe1\u626b\u4e00\u626b\u003C/p\u003E\n \u003Cp class=\"desc\"\u003E{{oauthLink && oauthLink.weixin.pc_open ? '\u626b\u7801\u5feb\u901f\u767b\u9646\uff0c\u65e0\u9700\u91cd\u590d\u6ce8\u518c' : '\u626b\u7801\u5e76\u300c\u5173\u6ce8\u6211\u4eec\u7684\u516c\u4f17\u53f7\u300d\u5b89\u5168\u5feb\u6377\u767b\u5f55'}}\u003C/p\u003E\n \u003C/div\u003E\n \u003Cbutton v-if=\"b2_global.mp_qrcode !== '0'\" class=\"mp-mt\" @click=\"login.qrcode = '0';close()\" class=\"text\"\u003E\u4f7f\u7528\u8d26\u53f7\u5bc6\u7801\u767b\u5f55\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","weixin_bind":"\n \u003Cdiv :class=\"['modal','bind-weixin',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"weixin-bind\"\u003E\n \u003Cp\u003E{{msg ? msg : '\u68c0\u6d4b\u5230\u60a8\u672a\u7ed1\u5b9a\u5fae\u4fe1\u8d26\u6237\uff0c\u8bf7\u5148\u7ed1\u5b9a\u5fae\u4fe1'}}\u003C/p\u003E\n \u003Ca :href=\"url\" class=\"button\" v-if=\"!msg\"\u003E\u7acb\u523b\u7ed1\u5b9a\u003C/a\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","bind_login":"\n \u003Cdiv :class=\"['modal','binding-login',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"login-box-in\"\u003E\n \u003Cspan class=\"pay-close\" @click=\"close()\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"bind-pass-info\"\u003E\n \u003Cimg :src=\"userData.avatar\" /\u003E\n \u003Cp\u003E\u003Cspan v-text=\"userData.name\"\u003E\u003C/span\u003E\u003C/p\u003E\n \u003Cdiv v-if=\"!success\"\u003E\u4e3a\u4e86\u786e\u4fdd\u60a8\u7684\u8d26\u6237\u5b89\u5168\u003Cbr\u003E\u8bf7\u60a8\u8bbe\u7f6e\u4e00\u4e2a\u003Cb v-if=\"type === 'tel'\"\u003E\u624b\u673a\u53f7\u7801\u003C/b\u003E\u003Cb v-else-if=\"type === 'email'\"\u003E\u90ae\u7bb1\u003C/b\u003E\u003Cb v-else-if=\"type === 'telandemail'\"\u003E\u624b\u673a\u53f7\u7801\u6216\u90ae\u7bb1\u003C/b\u003E\u003Cb v-else\u003E\u767b\u5f55\u7528\u6237\u540d\u003C/b\u003E\u548c\u5bc6\u7801\u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"bind-success\" v-if=\"success\"\u003E\n \u003Cp class=\"green\"\u003E\u003Ci class=\"b2font b2-check-double-line \"\u003E\u003C/i\u003E\u8bbe\u7f6e\u6210\u529f\u003C/p\u003E\n \u003Cdiv\u003E\u73b0\u5728\uff0c\u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u7684\u8d26\u6237\u6765\u767b\u5f55\u003Ch2\u003E\u003Cspan v-text=\"success\"\u003E\u003C/span\u003E\u003C/h2\u003E\u003C/div\u003E\n \u003Cp\u003E\u795d\u60a8\u4f7f\u7528\u6109\u5feb\u003C/p\u003E\n \u003Cbutton class=\"empty\" @click=\"close\"\u003E\u5173\u95ed\u003C/button\u003E\n \u003C/div\u003E\n \u003Ctemplate v-else\u003E\n \u003Clabel class=\"login-form-item\"\u003E\n \u003Cinput type=\"text\" name=\"username\" v-model=\"data.username\" tabindex=\"1\" spellcheck=\"false\" autocomplete=\"off\" class=\"\"\u003E \n \u003Cspan\u003E\u003Cb v-if=\"type === 'tel'\"\u003E\u624b\u673a\u53f7\u7801\u003C/b\u003E\u003Cb v-else-if=\"type === 'email'\"\u003E\u90ae\u7bb1\u003C/b\u003E\u003Cb v-else-if=\"type === 'telandemail'\"\u003E\u624b\u673a\u53f7\u7801\u6216\u90ae\u7bb1\u003C/b\u003E\u003Cb v-else\u003E\u767b\u5f55\u7528\u6237\u540d\u003C/b\u003E\u003C/span\u003E \n \u003Cp class=\"login-box-des\" v-if=\"type === 'tel'\"\u003E\u8bf7\u586b\u5199\u60a8\u7684\u624b\u673a\u53f7\u7801\u003C/p\u003E\n \u003Cp class=\"login-box-des\" v-else-if=\"type === 'email'\"\u003E\u8bf7\u586b\u5199\u60a8\u7684\u90ae\u7bb1\u003C/p\u003E\n \u003Cp class=\"login-box-des\" v-else-if=\"type === 'telandemail'\"\u003E\u8bf7\u586b\u5199\u60a8\u7684\u624b\u673a\u53f7\u7801\u6216\u90ae\u7bb1\u003C/p\u003E\n \u003Cp class=\"login-box-des\" v-else\u003E\u8bf7\u586b\u5199\u60a8\u7684\u7684\u767b\u5f55\u7528\u6237\u540d\u003C/p\u003E\n \n \u003C/label\u003E\n \u003Clabel :class=\"['login-form-item login-check-input',{'show':showCheck()}]\" v-if=\"type != 'login'\"\u003E\n \u003Cinput type=\"text\" name=\"checkCode_bind\" tabindex=\"3\" class=\"\" v-model=\"data.code\" autocomplete=\"off\" spellcheck=\"false\"\u003E \n \u003Cspan\u003E\u003Cb\u003E\u9a8c\u8bc1\u7801\u003C/b\u003E\u003C/span\u003E\n \u003Cb class=\"login-eye button text\" @click.stop.prevent=\"!SMSLocked && count == 60 ? sendCode() : ''\"\u003E{{count \u003C 60 ? count+'\u79d2\u540e\u53ef\u91cd\u53d1' : '\u53d1\u9001\u9a8c\u8bc1\u7801'}}\u003C/b\u003E\n \u003C/label\u003E\n \u003Clabel class=\"login-form-item\"\u003E\n \u003Cform\u003E\n \u003Cinput name=\"password\" :type=\"eye ? 'text' : 'password'\" tabindex=\"4\" v-model=\"data.password\" :class=\"data.password ? 'active' : ''\" autocomplete=\"off\" spellcheck=\"false\"\u003E\n \u003C/form\u003E\n \n \u003Cspan\u003E\u003Cb\u003E\u5bc6\u7801\u003C/b\u003E\u003C/span\u003E\n \u003Cb class=\"login-eye button text\" @click.stop.prevent=\"eye = !eye\"\u003E\u003Ci :class=\"['b2font',eye ? 'b2-eye-open' : 'b2-eye-close']\"\u003E\u003C/i\u003E\u003C/b\u003E\n \u003Cp class=\"login-box-des\"\u003E\u6700\u5c116\u4f4d\u5b57\u7b26\u003C/p\u003E\n \u003C/label\u003E\n \u003Cdiv class=\"login-bottom\"\u003E\u003Cbutton class=\"\" @click=\"submit\" :class=\"locked ? 'b2-loading' : ''\" :disabled=\"locked\"\u003E\u63d0\u4ea4\u003C/button\u003E\u003C/div\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n ","structure":"/%category%/%post_id%","check_code":"\u003Cdiv :class=\"['modal','recaptcha-form',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"check-code-luo modal-content-innter\" v-if=\"loginType != 3 && checkType != 'normal'\"\u003E\n \u003Ca href=\"javascript:void(0)\" class=\"close-icon\" @click=\"close\"\u003E\u003Ci class=\"b2font b2-close-line \"\u003E\u003C/i\u003E\u003C/a\u003E\n \u003Ch2\u003E\u8bf7\u8fdb\u884c\u4eba\u673a\u9a8c\u8bc1\u003C/h2\u003E\n \u003Cdiv class=\"l-captcha\" data-site-key=\"\" data-width=\"100%\" data-callback=\"getResponse\"\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003Cform @submit.stop.prevent=\"checkCode\" v-else\u003E\n \u003Cdiv class=\"modal-content-innter\"\u003E\n \u003Cdiv class=\"recaptcha-img\"\u003E\n \u003Cimg :src=\"recaptchaUrl\" @click=\"change\" v-if=\"recaptchaUrl\"\u003E\n \u003Cspan class=\"recaptcha-load\" v-else\u003E\u003C/span\u003E\n \u003Ch2\u003E\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801\u003C/h2\u003E\n \u003Cp\u003E\u8bf7\u8f93\u5165\u56fe\u7247\u4e2d\u7684\u9a8c\u8bc1\u7801\u003Cbr\u003E\u70b9\u51fb\u53d1\u9001\u6309\u94ae\u83b7\u53d6\u9a8c\u8bc1\u7801\u003C/p\u003E\n \u003C/div\u003E\n \u003Cinput type=\"text\" spellcheck=\"false\" :class=\"recaptcha ? 'input-align-center' : ''\" autocomplete=\"off\" v-model=\"recaptcha\"\u003E\n \u003C/div\u003E \n \u003Cdiv class=\"recaptcha-button\"\u003E\n \u003Ca href=\"javascript:void(0)\" class=\"button\" @click=\"close\"\u003E\u53d6\u6d88\u003C/a\u003E\u003Cbutton type=\"submit\" :disabled=\"disabled\" class=\"recaptcha-send button\"\u003E\u53d1\u9001\u003C/button\u003E\n \u003C/div\u003E\n \u003C/form\u003E\n \u003C/div\u003E\n \u003C/div\u003E","site_info":{"site_uri":"https://www.zhihailib.com/wp-content/themes/b2","admin_ajax":"https://www.zhihailib.com/wp-admin/admin-ajax.php?action="},"cookie_allow":"0","b2_gap":"16","rest_url":"https://www.zhihailib.com/wp-json/","pay_url":"https://www.zhihailib.com/pay","localStorage_msg":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301 localStorage \uff0c\u8bf7\u66f4\u6362\u6d4f\u89c8\u5668\u4ee5\u540e\u518d\u8fdb\u884c\u767b\u5f55\u548c\u6ce8\u518c\u7684\u64cd\u4f5c","empty_page":"\u003Cdiv class=\"empty-page\"\u003E\u003Cimg src=\"https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/images/b2-page-empty.svg\"\u003E\u003Cp\u003EEmpty Result\u003C/p\u003E\u003C/div\u003E","default_video_poster":"https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/images/xg-poster-default.jpg","default_video_logo":"https://www.zhihailib.com/wp-content/uploads/2025/12/zhihailib-logo2-white.webp","page_nav":"\u003Cdiv v-show=\"pages \u003E 1\" class=\"ajax-pager\"\u003E\n \u003Cdiv class=\"ajax-pagenav\" v-if=\"type === 'p'\"\u003E\n \u003Cdiv class=\"btn-group\"\u003E\n \u003Cbutton v-for=\"page in cpages\" :class=\"['empty button',cpaged == page ? 'selected' : '',page == 0 ? 'bordernone' : '',disabled(page) ? 'b2-loading' : '']\" @click.stop.self=\"go(page)\" :disabled=\"disabled(page) || page == 0 || cpaged == page\"\u003E{{page != 0 ? page : '...'}}\u003C/button\u003E\n \u003Clabel class=\"pager-center\" v-show=\"pages \u003E= 7 || mobile\"\u003E\u003Cinput type=\"text\" ref=\"pagenavnumber\" :value=\"cpaged\" @keyup.enter=\"jump($event)\" @focus=\"focus\" @blur=\"blur\" autocomplete=\"off\"/\u003E/\u003Cspan v-show=\"!showGo\"\u003E{{pages}} \u9875\u003C/span\u003E\u003Cspan v-show=\"showGo\" class=\"b2-color\" @click.prevent.stop=\"jump($event)\"\u003E \u524d\u5f80\u003C/span\u003E\u003C/label\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"btn-pager\"\u003E\n \u003Cbutton :class=\"['empty button',{'b2-loading' : locked && next}]\" @click.stop.self=\"go(cpaged-1,'next')\" :disabled=\"cpaged \u003C= 1 ? true : false\"\u003E\u276e\u003C/button\u003E\n \u003Cbutton :class=\"['empty button',{'b2-loading' : locked && per}]\" @click.stop.self=\"go(cpaged+1,'per')\" :disabled=\"cpaged \u003E= pages ? true : false\"\u003E\u276f\u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"ajax-more\" v-else\u003E\n \u003Cdiv class=\"pager-center\" for=\"page-input\"\u003E\n \u003Cinput id=\"page-input\" type=\"text\" :value=\"cpaged\" @keyup.enter=\"jump($event)\" autocomplete=\"off\"/\u003E\n \u003Cbutton class=\"text button mar10-l\" @click.stop=\"jump($event)\"\u003E\u524d\u5f80\u003C/button\u003E\n \u003C/div\u003E\n \u003Cbutton :class=\"['button empty',{'b2-loading' : locked}]\" :disabled=\"locked || cpaged \u003E= pages ? true : false\" @click=\"go(cpaged+1)\"\u003E\n \u003Cspan v-if=\"cpaged \u003E= pages\"\u003E\u6ca1\u6709\u66f4\u591a\u003C/span\u003E\n \u003Cspan v-else\u003E\u52a0\u8f7d\u66f4\u591a\u003C/span\u003E\n \u003C/button\u003E\n \u003C/div\u003E\n \u003C/div\u003E","copy":{"text":"\u590d\u5236","success":"\u6210\u529f\u590d\u5236","error":"\u5931\u8d25\uff0c\u8bf7\u9009\u4e2d\u590d\u5236"},"tencent_captcha_appid":"","search_type":{"post":"\u4e66\u7c4d","user":"\u7528\u6237","document":"\u5e2e\u52a9","circle":"\u5708\u5b50","links":"\u7f51\u5740\u5bfc\u822a","ask":"\u5fc3\u613f","answer":"\u56de\u5e94","infomation":"\u4f9b\u6c42\u4fe1\u606f","cpay":"\u81ea\u5b9a\u4e49\u652f\u4ed8"},"login_keep_days":"7","login_type":"0","language":"zh_CN","post_id":"128916","author_id":"1","poster_box":"\u003Cdiv :class=\"['modal','poster-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\" ref=\"poster\"\u003E\n \u003Cspan class=\"close-button\" @click=\"close(0)\"\u003E\u00d7\u003C/span\u003E\n \u003Cdiv class=\"poster-content\"\u003E\n \u003Cdiv id=\"poster-box-left\" class=\"poster-box-left\" ref=\"posterContent\"\u003E\n \u003Ctemplate v-if=\"!isWeixin || (isWeixin && !poster)\"\u003E\n \u003Cdiv\u003E\n \u003Cdiv class=\"poster-image\"\u003E\n \u003Cimg :src=\"(thumb ? thumb : data.thumb)\" class=\"poster-img\" ref=\"posterImg\" v-if=\"data != ''\"/\u003E\n \u003Cdiv class=\"poster-date b2-radius\"\u003E\n \u003Cdiv class=\"poster-date-day\"\u003E\n \u003Cspan v-text=\"data.date.day\" v-if=\"data != ''\"\u003E\u003C/span\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"poster-date-year\"\u003E\n \u003Cspan v-text=\"data.date.year\" v-if=\"data != ''\"\u003E\u003C/span\u003E\n \u003Cspan v-text=\"data.date.month\" v-if=\"data != ''\"\u003E\u003C/span\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"poster-info\"\u003E\n \u003Ch2 v-html=\"data.title\" v-if=\"data != ''\"\u003E\u003C/h2\u003E\n \u003Cp v-html=\"data.content\" v-if=\"data != ''\"\u003E\u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"poster-footer\"\u003E\n \u003Cdiv class=\"poster-footer-left\"\u003E\n \u003Cimg :src=\"data.logo\" class=\"poster-img-logo\" ref=\"posterLogo\" v-if=\"data.logo\"/\u003E\n \u003Cp v-text=\"data.desc\"\u003E\u003C/p\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"poster-footer-right\"\u003E\n \u003Cimg :src=\"data.qrcode\" class=\"poster-img-qrcode\" ref=\"posterQrcode\" v-if=\"data != ''\"\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003Ctemplate v-else-if=\"poster && isWeixin\"\u003E\n \u003Cimg :src=\"poster\" /\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"poster-share\"\u003E\n \u003Cdiv class=\"fuzhi\" :data-clipboard-text=\"data.link\" v-if=\"data != ''\"\u003E\n \u003Cp\u003E\u70b9\u51fb\u590d\u5236\u63a8\u5e7f\u7f51\u5740\uff1a\u003C/p\u003E\n \u003Cinput disabled=\"true\" :value=\"data.link\" /\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"share-text\" v-if=\"isWeixin\" v-cloak\u003E{{poster ? '\u957f\u6309\u56fe\u7247\u5206\u4eab\u7ed9\u670b\u53cb\uff0c\u6216\u8005\u4fdd\u5b58\u5230\u624b\u673a' : '\u6d77\u62a5\u521b\u5efa\u4e2d'}}\u003C/div\u003E\n \u003Ctemplate v-else v-cloak\u003E\n \u003Cdiv class=\"social-share\"\u003E\n \u003Cp\u003E\u5206\u4eab\u5230\uff1a\u003C/p\u003E\n \u003Cbutton class=\"poster-share-weibo\" @click=\"openWin('http://service.weibo.com/share/share.php?url=https://www.zhihailib.com/book/128916&sharesource=weibo&title=%E8%B7%9F%E5%85%84%E5%BC%9F%E8%BF%9E%E5%AD%A6PHP','weibo')\"\u003E\u5fae\u535a\u003C/button\u003E\n \u003Cbutton class=\"poster-share-qq\" @click=\"openWin('http://connect.qq.com/widget/shareqq/index.html?url=https://www.zhihailib.com/book/128916&sharesource=qzone&title=%E8%B7%9F%E5%85%84%E5%BC%9F%E8%BF%9E%E5%AD%A6PHP&summary=EPUB+%2F+%E9%AB%98%E6%B4%9B%E5%B3%B0+%2F+%E7%94%B5%E5%AD%90%E5%B7%A5%E4%B8%9A%E5%87%BA%E7%89%88%E7%A4%BE+%2F+2015-11-30+%2F+%E6%9C%AC%E4%B9%A6%E6%98%AF%E7%95%85%E9%94%80%E4%B9%A6%E3%80%8A%E7%BB%86%E8%AF%B4PHP%28%E7%AC%AC2%E7%89%88%29%E3%80%8B%E5%8D%87%E7%BA%A7%E7%89%88%E3%80%82PHP%E6%98%AF%E5%BD%93%E5%89%8D%E5%BC%80%E5%8F%91Web%E5%BA%94%E7%94%A8%E7%B3%BB%E7%BB%9F%E6%9C%80%E7%90%86%E6%83%B3%E7%9A%84%E5%B7%A5%E5%85%B7%2C%E5%AE%83%E6%98%93%E4%BA%8E%E4%BD%BF%E7%94%A8%E3%80%81%E5%8A%9F%E8%83%BD%E5%BC%BA%E5%A4%A7%E3%80%81%E6%88%90%E6%9C%AC%E4%BD%8E%E5%BB%89%E3%80%81%E9%AB%98%E5%AE%89%E5%85%A8%E6%80%A7%26hellip%3B','qq')\"\u003EQQ\u597d\u53cb\u003C/button\u003E\n \u003Cbutton class=\"poster-share-qq-k\" @click=\"openWin('https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://www.zhihailib.com/book/128916&sharesource=qzone&title=%E8%B7%9F%E5%85%84%E5%BC%9F%E8%BF%9E%E5%AD%A6PHP&summary=EPUB+%2F+%E9%AB%98%E6%B4%9B%E5%B3%B0+%2F+%E7%94%B5%E5%AD%90%E5%B7%A5%E4%B8%9A%E5%87%BA%E7%89%88%E7%A4%BE+%2F+2015-11-30+%2F+%E6%9C%AC%E4%B9%A6%E6%98%AF%E7%95%85%E9%94%80%E4%B9%A6%E3%80%8A%E7%BB%86%E8%AF%B4PHP%28%E7%AC%AC2%E7%89%88%29%E3%80%8B%E5%8D%87%E7%BA%A7%E7%89%88%E3%80%82PHP%E6%98%AF%E5%BD%93%E5%89%8D%E5%BC%80%E5%8F%91Web%E5%BA%94%E7%94%A8%E7%B3%BB%E7%BB%9F%E6%9C%80%E7%90%86%E6%83%B3%E7%9A%84%E5%B7%A5%E5%85%B7%2C%E5%AE%83%E6%98%93%E4%BA%8E%E4%BD%BF%E7%94%A8%E3%80%81%E5%8A%9F%E8%83%BD%E5%BC%BA%E5%A4%A7%E3%80%81%E6%88%90%E6%9C%AC%E4%BD%8E%E5%BB%89%E3%80%81%E9%AB%98%E5%AE%89%E5%85%A8%E6%80%A7%26hellip%3B','qq-k')\"\u003EQQ\u7a7a\u95f4\u003C/button\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"poster-down-load\"\u003E\n \u003Cp\u003E\u4e0b\u8f7d\u6d77\u62a5\uff1a\u003C/p\u003E\n \u003Cbutton class=\"poster-share-download button\" :disabled=\"poster ? false : true\" @click=\"download\"\u003E{{poster ? '\u70b9\u51fb\u4e0b\u8f7d' : '\u6d77\u62a5\u521b\u5efa\u4e2d'}}\u003C/button\u003E\n \u003C/div\u003E\n \u003C/template\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E","show_slider":"0","poster_error":"\u83b7\u53d6\u6d77\u62a5\u5931\u8d25","check_type":"normal","home_url":"https://www.zhihailib.com","alert_following":"\u786e\u8ba4\u8981\u53d6\u6d88\u5173\u6ce8\u5417\uff1f","followed":"\u5df2\u5173\u6ce8","nofollowed":"\u003Ci class=\"b2font b2-add-line \"\u003E\u003C/i\u003E\u5173\u6ce8","alert_favorites":"\u786e\u5b9a\u8981\u53d6\u6d88\u6536\u85cf\u5417\uff1f","top_scroll_pc":"1","top_scroll_mobile":"1","footer_scroll":"1","open_oauth":{"weixin":{"name":"\u5fae\u4fe1","url":"","open":false},"weibo":{"name":"\u5fae\u535a","icon":"b2-weibo","color":"#FF3E3E","url":"https://api.weibo.com/oauth2/authorize?client_id=&response_type=code&redirect_uri=https%3A%2F%2Fwww.zhihailib.com%2Fopen%3Ftype%3Dweibo","open":false},"qq":{"name":"QQ","icon":"b2-qq","color":"#2D89EF","url":"https://graph.qq.com/oauth2.0/authorize?client_id=&state=4401819c669611653f14c60fcd4566ff&response_type=code&redirect_uri=https%3A%2F%2Fwww.zhihailib.com%2Fopen%3Ftype%3Dqq","open":false}},"js_text":{"circle":{"ask":"\u5bf9\u60a8\u7684\u95ee\u9898\u8fdb\u884c\u8bf4\u660e","guess":"\u731c\u5bf9\u4ee5\u540e\u8981\u663e\u793a\u7684\u5185\u5bb9","vote":"\u5bf9\u60a8\u7684\u6295\u7968\u9879\u76ee\u8fdb\u884c\u8bf4\u660e","say":"\u6709\u4ec0\u4e48\u65b0\u9c9c\u4e8b\uff1f","repeat_id":"\u8bf7\u4e0d\u8981\u91cd\u590d\u6dfb\u52a0\u540c\u4e00\u4e2a\u7528\u6237","remove_image":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u5f20\u56fe\u7247\u5417\uff1f","remove_video":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u89c6\u9891\u5417\uff1f","remove_file":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u6587\u4ef6\u5417\uff1f","remove_card":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5361\u7247\u5417\uff1f","create_circle_pay_error":"\u8bf7\u9009\u62e9\u4ed8\u8d39\u673a\u5236","create_circle_role_money_error":"\u8bf7\u81f3\u5c11\u8bbe\u7f6e\u4e00\u4e2a\u4f59\u989d\u91d1\u989d","create_circle_role_join_error":"\u8bf7\u9009\u62e9\u5165\u5708\u89c4\u5219","create_circle_info_error":"\u8bf7\u5b8c\u5584\u5708\u5b50\u8d44\u6599","create_circle_info_name_error":"\u5708\u5b50\u540d\u79f0\u5fc5\u987b\u5927\u4e8e2\u5c0f\u4e8e20\u4e2a\u5b57\u7b26","create_circle_info_desc_error":"\u5708\u5b50\u63cf\u8ff0\u5fc5\u987b\u5927\u4e8e20\u5c0f\u4e8e100\u4e2a\u5b57\u7b26","create_circle_role_lv_error":"\u8bf7\u9009\u62e9\u5141\u8bb8\u52a0\u5165\u5708\u5b50\u7684\u7528\u6237\u7ec4","img_locked":"\u8bf7\u4e0a\u4f20\u5b8c\u6bd5\u540e\u518d\u6dfb\u52a0\u65b0\u7684\u4e0a\u4f20","file_count":"\u8d85\u8fc7\u4e0a\u4f20\u6570\u91cf\u9650\u5236","all_users":"\u6240\u6709\u4eba","change_topic_form":"\u5207\u6362\u8ba8\u8bba\u6846\u4f1a\u6e05\u9664\u8ba8\u8bba\u6846\u91cc\u5df2\u6709\u7684\u5185\u5bb9\uff0c\u786e\u5b9a\u8981\u5207\u6362\u5417\uff1f","set_sticky_success":"\u8bbe\u7f6e\u7f6e\u9876\u6210\u529f","set_sticky_fail":"\u53d6\u6d88\u7f6e\u9876\u6210\u529f","delete_success":"\u5220\u9664\u6210\u529f","delete_fail":"\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458","status_success":"\u5ba1\u6838\u6210\u529f","status_fail":"\u5ba1\u6838\u5931\u8d25","delete_confirm":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u8bdd\u9898\u5417\uff1f","delete_user":"\u786e\u5b9a\u8981\u5c06\u8fd9\u4e2a\u7528\u6237\u8e22\u51fa\u5708\u5b50\u5417\uff1f","join_success":"\u606d\u559c\uff0c\u60a8\u5df2\u6210\u529f\u52a0\u5165\u672c\u5708\u5b50","join_title":"\u52a0\u5165\u5708\u5b50","circle_date":{"permanent":"\u6c38\u4e45\u6709\u6548","year":"\u6309\u5e74\u4ed8\u8d39","halfYear":"\u534a\u5e74\u4ed8\u8d39","season":"\u6309\u5b63\u4ed8\u8d39","month":"\u6309\u6708\u4ed8\u8d39"},"text_less":"\u6587\u5b57\u592a\u5c11","text_more":"\u6587\u5b57\u592a\u591a","file_error":"\u8bf7\u5220\u9664\u9519\u8bef\u6587\u4ef6","subing":"\u53d1\u5e03\u4e2d...","sub_success":"\u53d1\u5e03\u6210\u529f","waiting_uploads":"\u7b49\u5f85\u6587\u4ef6\u4e0a\u4f20","submit":"\u7acb\u523b\u63d0\u4ea4","answer_image":"\u60a8\u5df2\u4e0a\u4f20\u8fc7\u4e00\u5f20\u56fe\u7247\uff0c\u786e\u5b9a\u8981\u5220\u9664\u91cd\u65b0\u4e0a\u4f20\u5417\uff1f","answer_file":"\u60a8\u5df2\u4e0a\u4f20\u8fc7\u4e00\u4e2a\u9644\u4ef6\uff0c\u786e\u5b9a\u8981\u5220\u9664\u91cd\u65b0\u4e0a\u4f20\u5417\uff1f","read_answer":"\u5077\u7784\u7b54\u6848","hidden_pay":"\u67e5\u770b\u9690\u85cf\u5185\u5bb9\uff1a","join_comment":"\u6682\u65e0\u6743\u67e5\u770b\u8bc4\u8bba\u5185\u5bb9","delete_answer":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u56de\u7b54\u5417\uff1f","delete_comment":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"},"global":{"xieyi":"\u8bf7\u52fe\u9009\u6ce8\u518c\u534f\u8bae","not_allow":"\u6743\u9650\u4e0d\u8db3","dark_room_down":"\u5c0f\u9ed1\u5c4b\u53cd\u601d\u4e2d\uff0c\u4e0d\u51c6\u4e0b\u8f7d\uff01","comment_down":"\u8bc4\u8bba\u5e76\u5237\u65b0\u540e\u4e0b\u8f7d\uff01","role_down":"\u6ca1\u6709\u6743\u9650\u4e0b\u8f7d\uff01","mission_tk":"\u7b7e\u5230\u586b\u5751","copy_success":"\u590d\u5236\u6210\u529f","copy_select":"\u8bf7\u9009\u4e2d\u590d\u5236","put_link":"\u8bf7\u8f93\u5165\u8fde\u63a5","clear_history":"\u786e\u8ba4\u8981\u6e05\u9664\u6d4f\u89c8\u8bb0\u5f55\u5417\uff1f","video_file_error":"\u89c6\u9891\u6587\u4ef6\u6709\u635f\u574f\uff0c\u65e0\u6cd5\u4e0a\u4f20\uff1a","my":"\u6211\u7684","login":"\u767b\u5f55","has_mission":"\u60a8\u5df2\u7ecf\u7b7e\u5230\u4e86","delete_coupon":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u4f18\u60e0\u52b5\u5417\uff1f","delete_post":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u7bc7\u6587\u7ae0\u5417\uff1f","more_people":"\u7b49\u4eba","pay_money":"\u5145\u503c","pay_money_success":"\u5145\u503c\u6210\u529f","editor_hidden_content":"\u8bf7\u5728\u8fd9\u91cc\u7f16\u8f91\u60a8\u7684\u9690\u85cf\u5185\u5bb9","pay_credit":"\u79ef\u5206\u8d2d\u4e70","buy_count_error":"\u8d2d\u4e70\u6570\u91cf\u9519\u8bef","delete_address":"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5730\u5740\u5417\uff1f","add_address":"\u8bf7\u6dfb\u52a0\u60a8\u7684\u6536\u8d27\u5730\u5740","add_email":"\u8bf7\u6dfb\u52a0\u60a8\u7684\u90ae\u7bb1\u5730\u5740\uff01","buy":"\u8d2d\u4e70","get_success":"\u9886\u53d6\u6210\u529f","min":"\u5206","sec":"\u79d2","and":"\u548c","edit_success":"\u4fee\u6539\u6210\u529f","all":"\u5168\u90e8","newsflashe_r":"\u5feb\u8baf\u6807\u9898\u548c\u5185\u5bb9\u5fc5\u586b","newsflashe_insert_success":"\u5feb\u8baf\u53d1\u5e03\u6210\u529f","credit_pay":"\u786e\u5b9a\u8981\u6d88\u8d39 ${credit} \u79ef\u5206\u8fdb\u884c\u62bd\u5956\u5417\uff1f","missioning":"\u7b7e\u5230\u4e2d,\u8bf7\u7a0d\u540e...","mission_success":"\u7b7e\u5230\u6210\u529f","save_r_success":"\u4fdd\u5b58\u8349\u7a3f\u6210\u529f","read_more":"\u9605\u8bfb\u66f4\u591a","sketchpad_empty":"\u6d82\u9e26\u4e0d\u53ef\u4e3a\u7a7a\uff01","tuya":"\u6d82\u9e26","check_message":"\u8bf7\u524d\u5f80\u624b\u673a\u6216\u90ae\u7bb1\u67e5\u770b\u9a8c\u8bc1\u7801","check_type":{"tel":"\u624b\u673a","mail":"\u90ae\u7bb1"},"download_right_error":"\u8bf7\u6dfb\u52a0\u4e0b\u8f7d\u6743\u9650","tx_alert":"\u7533\u8bf7\u4e4b\u540e\u4f59\u989d\u4f1a\u6263\u9664\u63d0\u73b0\u90e8\u5206\uff0c\u7a0d\u540e\u7531\u6211\u4eec\u4eba\u5de5\u4e3a\u60a8\u63d0\u73b0\uff0c\u786e\u8ba4\u8981\u63d0\u73b0\u5417\uff1f","cpay_file_count":"\u6700\u591a\u53ea\u80fd\u4e0a\u4f20 ${count} \u4e2a\u6587\u4ef6","cpay_file_count_less":"\u8fd8\u80fd\u518d\u4e0a\u4f20 ${count} \u4e2a\u6587\u4ef6","cpay_required_fields":"\u8bf7\u5b8c\u6210\u6240\u6709\u7ea2\u661f\u7684\u5fc5\u586b\u9879\u76ee","infomation_sticky_pay":"\u60a8\u9009\u62e9\u4e86\u7f6e\u9876\uff0c\u8bf7\u5148\u652f\u4ed8","infomation_sticky_pay_title":"\u4f9b\u6c42\u4fe1\u606f\u7f6e\u9876","infomation_po_cat":"\u8bf7\u9009\u62e9\u5206\u7c7b","my_gold":"\u6211\u7684\u8d22\u5bcc","my_requests":"\u6211\u7684\u5de5\u5355","submit_success":"\u63d0\u4ea4\u6210\u529f","max_ask_cat":"\u6700\u591a\u53ea\u80fd\u9009\u62e93\u4e2a\u6807\u7b7e","best_answer":"\u9009\u62e9\u6700\u4f73\u7b54\u6848\u540e\u65e0\u6cd5\u53d8\u66f4\uff0c\u786e\u5b9a\u8981\u6307\u5b9a\u6b64\u56de\u7b54\u4e3a\u6700\u4f73\u7b54\u6848\u5417\uff1f","cannotanswer":"\u60a8\u6682\u65f6\u65e0\u6743\u53d1\u8868\u5e16\u5b50","jubao_success":"\u4e3e\u62a5\u6210\u529f\uff0c\u6211\u4eec\u4f1a\u901a\u8fc7\u90ae\u4ef6\u7ed9\u5411\u53cd\u9988\u4e3e\u62a5\u7ed3\u679c\uff01"},"b2_text":{"default_circle":"\u5e7f\u573a","default_circle_desc":"\u516c\u5171\u533a\u57df\uff0c\u8bf7\u6587\u660e\u53d1\u8a00!","jihuo":"\u4e3b\u9898\u6587\u4ef6\u635f\u574f\uff0c\u65e0\u6cd5\u6b63\u5e38\u6fc0\u6d3b\uff0c\u8bf7\u91cd\u65b0\u4e0b\u8f7d\u4e3b\u9898","jihuo_error":"Wordpress\u6ca1\u6709\u6b63\u786e\u5b89\u88c5\uff0c\u8bf7\u4ece cn.wordpress.org \u7ad9\u70b9\u4e0b\u8f7d\u6700\u65b0\u7248\uff0c\u91cd\u65b0\u5b89\u88c5","jihuo_error_not_isset":"\u4e3b\u9898\u6587\u4ef6\u635f\u574f\uff0c\u65e0\u6cd5\u6b63\u5e38\u6fc0\u6d3b\uff0c\u8bf7\u91cd\u65b0\u4e0b\u8f7d\u4e3b\u9898\u3002","jihuo_error_no_role":"\u4e3b\u9898\u6587\u4ef6\u5939\u6743\u9650\u9519\u8bef\uff1a\u901a\u5e38\u60c5\u51b5\u4e0b %s \u6587\u4ef6\u5939\u5185\u6240\u6709\u6587\u4ef6\u7684\u7528\u6237\u7ec4\u5e94\u5f53\u662f www \u5e76\u4e14\u6743\u9650\u4e3a 755 \u8bf7\u4fee\u6539\u4e4b\u540e\u518d\u6fc0\u6d3b\u3002","jihuo_shouquan_error":"\u6388\u6743\u9519\u8bef","buy":"\u8d2d\u4e70","exchange":"\u79ef\u5206\u5151\u6362","lottery":"\u79ef\u5206\u62bd\u5956","info":"\u7684\u57fa\u672c\u4fe1\u606f","order_error":"\u8ba2\u5355\u4fe1\u606f\u9519\u8bef","money_error":"\u91d1\u989d\u9519\u8bef","order_no_allow":"\u975e\u6cd5\u64cd\u4f5c","order_cg_min":"\u5145\u503c\u91d1\u989d\u5e94\u5f53\u5927\u4e8e","order_no_lv":"\u6ca1\u6709\u8fd9\u4e2a\u7b49\u7ea7","order_pay_error":"\u652f\u4ed8\u4fe1\u606f\u9519\u8bef","order_mission_error":"\u7b7e\u5230\u79ef\u5206\u8bbe\u7f6e\u9519\u8bef","order_mission_no_need":"\u60a8\u6ca1\u6709\u5fc5\u8981\u586b\u5751","order_credit_empty":"\u60a8\u7684\u4f59\u989d\u4e0d\u8db3","order_login":"\u8bf7\u5148\u767b\u5f55","order_money_too_max":"\u652f\u4ed8\u91d1\u989d\u8fc7\u5927","order_time_pass":"\u652f\u4ed8\u8fc7\u671f\uff0c\u8bf7\u91cd\u65b0\u53d1\u8d77","order_check_error":"\u8ba2\u5355\u5408\u6cd5\u6027\u68c0\u67e5\u5931\u8d25","check_repo_error":"\u53d1\u5e03\u9891\u6b21\u8fc7\u9ad8\uff01\u60a8\u5df2\u88ab\u5173\u5c0f\u9ed1\u5c4b\uff0c\u4e00\u4e2a\u5c0f\u65f6\u540e\u89e3\u5c01\u3002\u591a\u6b21\u88ab\u5173\u5c0f\u9ed1\u5c4b\u4f1a\u6c38\u4e45\u5c01\u7981IP\u548c\u8d26\u6237","check_dark_room":"\u5728\u5c0f\u9ed1\u5c4b\u4e2d\uff0c\u65e0\u6cd5\u64cd\u4f5c","check_dark_room_why":"\u8bf7\u6c42\u672c\u7ad9\u63a5\u53e3\u8fc7\u4e8e\u9891\u7e41","all_peoples":"\u6240\u6709\u4eba","guest":"\u6e38\u5ba2","normal_group":"\u666e\u901a\u7528\u6237\u7ec4","vip_group":"VIP\u7528\u6237\u7ec4","video":"\u89c6\u9891","download":"\u4e0b\u8f7d","hidden":"\u9690\u85cf\u5185\u5bb9","tuya":"\u6d82\u9e26","under_stock":"\u5e93\u5b58\u4e0d\u8db3","user_dark_room":"\u8bf7\u6c42\u672c\u7ad9\u63a5\u53e3\u8fc7\u4e8e\u9891\u7e41\uff0c\u5173\u5165\u5c0f\u9ed1\u5c4b\uff01","user_dark_room_title":"\u5173\u5165\u5c0f\u9ed1\u5c4b","ask_pay":"\u60a8\u53d1\u8d77\u4e86\u4e00\u4e2a\u4ed8\u8d39\u63d0\u95ee","ask_pay_title":"\u4ed8\u8d39\u63d0\u95ee","link_register":"\u7533\u8bf7\u5165\u9a7b","cz_count":"\u8d85\u8fc7\u6bcf\u65e5\u5145\u503c\u6b21\u6570\u9650\u5236\uff0c\u8bf7\u660e\u5929\u518d\u6765\u5145\u503c","cz_max":"\u8d85\u8fc7\u6bcf\u65e5\u5145\u503c\u91d1\u989d\u4e0a\u9650\uff0c\u8bf7\u51cf\u5c11\u5145\u503c\u91d1\u989d","ask_inv":"${from}\u9080\u8bf7\u60a8\u56de\u7b54\u95ee\u9898\uff1a${post_id}","ask_inv_title":"\u9080\u8bf7\u56de\u7b54","order_infomation_price_error":"\u7f6e\u9876\u5929\u6570\u5fc5\u987b\u5927\u4e8e\u7b49\u4e8e1\u5929"}},"newsflashes_can_post":"1","links_can_post":"0","wx_mp_in_login":"0","mp_qrcode":"0","wx_appid":"","post_gg":"\n \u003Cdiv :class=\"['modal','post-gg-box',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cdiv class=\"post-gg-title\" v-html=\"title\"\u003E\u003C/div\u003E\n \u003Cdiv class=\"post-gg-content\" v-html=\"content\"\u003E\u003C/div\u003E\n \u003Cdiv class=\"post-gg-button\"\u003E\u003Ca class=\"b2-color\" href=\"javascript:void(0)\" @click=\"close\"\u003E\u786e\u5b9a\u003C/a\u003E\u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \n ","jubao_box":"\u003Cdiv :class=\"['modal','jubao-form',{'show-modal':show}]\"\u003E\n \u003Cdiv class=\"modal-content b2-radius\"\u003E\n \u003Cspan class=\"close-button\" @click=\"close(0)\"\u003E\u00d7\u003C/span\u003E\n \u003Ch2\u003E\u4e3e\u62a5\u003C/h2\u003E\n \u003Cdiv\u003E\n \u003Ch3\u003E\u8bf7\u9009\u62e9\u4e3e\u62a5\u7c7b\u578b\u003Cspan style=\"color:red\"\u003E*\u003C/span\u003E\u003C/h3\u003E\n \u003Cdiv class=\"jubao-type\"\u003E\n \u003Cdiv v-for=\"item,i in types\" :class=\"type == item ? 'picked' : ''\" @click=\"type = item\"\u003E{{item}}\u003C/div\u003E\n \u003C/div\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"jubao-content\"\u003E\n \u003Cdiv style=\"margin-top:20px;margin-bottom:10px\" class=\"jubao-title\"\u003E\u8bf7\u8f93\u5165\u4e3e\u62a5\u5185\u5bb9 \u003Cspan style=\"color:red\"\u003E*\u003C/span\u003E\u003C/div\u003E\n \u003Cinput name=\"email\" type=\"text\" placeholder=\"\u8bf7\u8f93\u5165\u60a8\u7684\u90ae\u7bb1\" v-model=\"email\" style=\"width:100%;margin-bottom:10px\"/\u003E\n \u003Ctextarea name=\"content\" placeholder=\"\u8bf7\u8f93\u5165\u4e3e\u62a5\u5185\u5bb9\" v-model=\"content\"\u003E\u003C/textarea\u003E\n \u003C/div\u003E\n \u003Cdiv class=\"jubao-file\"\u003E\n \u003Clabel\u003E\n \u003Ci class=\"b2font b2-add-line \"\u003E\u003C/i\u003E\n \u003Cinput id=\"jubao-input\" type=\"file\" class=\"b2-hidden-always\" ref=\"fileInput\" accept=\"image/jpg,image/jpeg,image/png,image/gif\" @change=\"getFile($event,'jubao')\" :disabled=\"locked\"\u003E\n \u003Cimg :src=\"jubaoImgUrl\" v-if=\"jubaoImgUrl\" /\u003E\n \u003C/label\u003E\n \u003C/div\u003E\n \u003Cdiv style=\"margin-top:10px\"\u003E\n \u003Cbutton :class=\"submitLocked ? 'b2-loading' : ''\" :disabled=\"locked || submitLocked\" @click=\"submit\"\u003E\u63d0\u4ea4\u003C/button\u003E\n \u003C/div\u003E\n \u003Cp class=\"jubao-text\" style=\"margin-top:10px;font-size:12px;color:#999\"\u003E\u4e3e\u62a5\u63d0\u4ea4\u540e\uff0c\u6211\u4eec\u4f1a\u4ee5\u90ae\u4ef6\u7684\u5f62\u5f0f\u5411\u60a8\u53cd\u9988\u5904\u7406\u7ed3\u679c\u3002\u003C/p\u003E\n \u003C/div\u003E\n \u003C/div\u003E","report_types":["\u5783\u573e\u5e7f\u544a\r","\u7f51\u7edc\u66b4\u529b\r","\u6d89\u672a\u6210\u5e74\r","\u81ea\u6740\u81ea\u6b8b\r","\u4e0d\u5b9e\u4fe1\u606f"],"prettify_load":"0","shop_images":[],"shop_after_sale":"1","chat":{"type":"requests","qq":"","crisp":"","dmsg":"","weixin":""},"default_thumb":"https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/images/default-img.jpg","post_type":"[\u4e66\u7c4d]","money_symbol":"\uffe5","credit_symbol":"\u003Ci class=\"b2font b2-coin-line \"\u003E\u003C/i\u003E","cz":{"max":"200","count":"3"}}; //# sourceURL=vue-js-extra /* ]]> */ </script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/vue.min.js?ver=5.9.42" id="vue-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/vuex.min.js?ver=5.9.42" id="vuex-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-includes/js/clipboard.min.js?ver=2.0.11" id="clipboard-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/axios.min.js?ver=5.9.42" id="axios-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/qs.min.js?ver=5.9.42" id="qs-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/flickity.pkgd.min.js?ver=5.9.42" id="sliders-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/qrious.min.js?ver=5.9.42" id="qrious-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/packery.pkgd.min.js?ver=5.9.42" id="packery-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/message.min.js?ver=5.9.42" id="message-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/zooming.min.js?ver=5.9.42" id="b2-js-zooming-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/autosize.min.js?ver=5.9.42" id="b2-autosize-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/vue-scrollto.js?ver=5.9.42" id="scrollto-js-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/sticky-sidebar.min.js?ver=5.9.42" id="sticky-js-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/lazyload.min.js?ver=5.9.42" id="lazyload-js-js"></script> <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.2.0.js?ver=5.9.42" id="weixin-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/default-passive-events.js?ver=5.9.42" id="default-passive-events-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/main.js?ver=5.9.42" id="b2-js-main-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/perfect-scrollbar.min.js?ver=5.9.42" id="b2-js-scrollbar-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/library/sketchpad.js?ver=5.9.42" id="b2-js-sketchpad-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2/Assets/fontend/single.js?ver=5.9.42" id="b2-js-single-js"></script> <script type="text/javascript" src="https://www.zhihailib.com/wp-content/themes/b2child/child.js?ver=5.9.42" id="b2-child-js"></script> <script type="text/javascript" id="gt_widget_script_81463970-js-before"> /* <![CDATA[ */ window.gtranslateSettings = /* document.write */ window.gtranslateSettings || {};window.gtranslateSettings['81463970'] = {"default_language":"zh-CN","languages":["ar","bn","zh-CN","zh-TW","nl","en","fr","de","hi","id","it","ja","ko","pt","ru","es","th","vi"],"url_structure":"none","native_language_names":1,"detect_browser_language":1,"flag_style":"2d","flag_size":24,"wrapper_selector":"#gt-wrapper-81463970","alt_flags":[],"horizontal_position":"inline"}; //# sourceURL=gt_widget_script_81463970-js-before /* ]]> */ </script><script src="https://cdn.gtranslate.net/widgets/latest/popup.js?ver=3.1.1" data-no-optimize="1" data-no-minify="1" data-gt-orig-url="/book/128916" data-gt-orig-domain="www.zhihailib.com" data-gt-widget-id="81463970" defer></script><!-- <script> </script> --> </body> </html> <!-- plugin=object-cache-pro client=phpredis metric#hits=2406 metric#misses=67 metric#hit-ratio=97.3 metric#bytes=702932 metric#prefetches=0 metric#store-reads=115 metric#store-writes=53 metric#store-hits=74 metric#store-misses=59 metric#sql-queries=36 metric#ms-total=2109.30 metric#ms-cache=296.78 metric#ms-cache-avg=1.7771 metric#ms-cache-ratio=14.1 -->