添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
想旅行的小笼包  ·  excel vba pivot table ...·  1 年前    · 
发怒的卤蛋  ·  c++ - Access tuple ...·  2 年前    · 

1.了解WebAPI接口

  • 接口模式:基于MVC4.0的WebAPI
  • 承载协议:HTTP
  • 跟踪工具:IE11
  • 请求方式:POST
  • 请求URL:IP:Port/Application/Controller/ActionName/Parameters
  • 请求参数:一串由JSON对象转化而成的字符串
  • 响应状态:200(OK)
  • 响应结果: 一串JSON格式的数据
  • 响应类型:application/json

2.WebAPI接口的URL规则

  • URL规则:IP:Port/Application/Controller/ActionName/Parameters
  • 示例:192.168.202.53/wszwdtapi_v6.6/taskkind/gettaskkindsbycodename
    IP:192.168.202.53,Port:80(默认)
    ApplicationName:wszwdtapi_v6.6
    Controller:taskkind
    ActionName:gettaskkindsbycodename
    Parameters:无

3.HTTP请求模式

  • 两种最常用见的HTTP 请求方法:
    GET 和 POST
  • 标准版的利用方案:
    统一使用POST方式,为接口后台提供统一的参数处理规则。
  • 接口限制:接口会限制HTTP请求模式,如果限制了POST方式,则GET时会报404错误。
    | GET | POST |
    | ------------- |-------------|
    | 从指定的资源请求数据| 向指定的资源提交要被处理的数据 |
    | 参数必须以键值对的形式包含在URL中 | 建议参数以JSON字符串存放在请求体中 |
    | 请求体为空 | 利用请求体传数据 |

4.HTTP状态消息

5.常见的HTTP协议跟踪工具

  • IE/Chrome/FireFox等浏览器开发人员工具-网络工具
    (注:IE推荐使用10+,Chrome调试界面为英文)
  • Fildder(http://www.telerik.com/fiddler)
    Fildder基础原理
  • PostMan(Chrome插件) (https://www.getpostman.com/)

6.科学的剖析接口调用情况

  • 当访问接口不成功,且初步排查没发现问题时,就应该先从HTTP请求入手,而不是耗费太多时间纠结在代码上。
  1. 打开调试工具,重复请求过程(刷新页面或重新点击提交按钮)
  2. 通过调试工具,查看是否存在对应的请求
  3. 如果不存在请求,现判断调用代码是否出现异常,有没有发出请求?
  4. 请求存在,判断请求状态码,顺藤摸瓜的分析原因。
    例如最常见错误,假如HTTP状态码为404,就可以通过判断IP、端口号,请求方式、URL字符串来确定是否是代码问题还是部署问题。
  5. 请求后得到状态码为200,那么再仔细研究下接口的传入数据和传出数据。
    ###7.使用Fiddler工具分析传入数据与返回数据
    ####使用Fiddler工具
  6. 打开Fiddler
  7. 利用浏览器访问对应的页面
  8. 在Fiddler左侧请求列表中,找对刚才的页面
  9. 点击选中,在Fiddler右侧查看详细数据。 请求正文

这里写图片描述
####利用Fiddler右侧Composer模拟请求

  1. 选择请求方式Get或者Post
  2. 输入URL
  3. 如果有参数,在Request Body中输入
  4. 点击Excute,发送请求
  5. 在右侧Log Requests中选择刚执行的请求
    Composer模拟请求

8.常见问题的解决

####跨域问题

  • 当我们跟踪到带有关键字“Access-Control-Allow-Origin ”的错误时,说明我们遇到了跨域问题!如图:
    错误示例
    跨域问题的根本来自于浏览器的一个安全策略: 同源策略
    所谓“同源”指的是“三个相同”: 协议相同、域名相同、端口相同 (IE浏览器下只需要满足协议及域名相同)
    如果非同源,共有三种行为受到限制。
  1. Cookie、LocalStorage 和 IndexDB 无法读取。
  2. DOM 无法获得。
  3. AJAX 请求不能发送。
  • 目前有三种方法规避这个限制。1.JSONP,2.WebSocket,3.CORS
    标准版统一采用CORS方式来规避同源策略。
  1. .Net中,在需要访问的接口的返回头中,加入“源信息”
    代码如下:HttpContext.Response.AppendHeader(“Access-Control-Allow-Origin”, “*”);
    或者在WebConfig中,为每个返回头加入“源信息”
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" /></customHeaders>

####常见的403错误

  • .Net模式的WebAPI的403错误,是一个典型的Web应用程序问题。
  • 现象:IP、端口完全正常,同台服务器部署的其他Web程序能正常访问,本接口在其他服务器上也能正常开放!根据状态码提示:该接口的应用程序本身存在问题。
    错误详情
  • 一般经验:.Net的WebAPI接口,是基于.Net的MVC框架,老版本IIS未必支持MVC机制,导致HTTP请求无法成功识别。一般情况将程序进程配置为集成模式即可。也有可能是因为未将.Net Framework4.0注册进IIS导致,通过命令注册即可。
  • 具体参考:http://blog.csdn.net/lingxyd_0/article/details/43154867
  • Unable To connect the Romote Server(无法连接到远程服务器)
  • 问题:Unable To connect the Romote Server(无法连接到远程服务器)
  • 分析:这两个问题,仍是接口不能访问导致的。问题表现形式较以往很大不同,是因为访问接口的不是JS代码,而是后台代码。
  • 结论:检查配置的接口地址是否正确,或者接口服务器是否开启。
2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() 2.7.4 读取整个文件:readfile()、fpassthru()和file() 2.7.5 读取一个字符:fgetc() 2.7.6 读取任意长度:fread() 2.8 使用其他有用的文件函数 2.8.1 查看文件是否存在:file_exists() 2.8.2 确定文件大小:filesize() 2.8.3 删除一个文件:unlink() 2.8.4 在文件中定位:rewind()、fseek()和ftell() 2.9 文件锁定 2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()函数 3.9 从文件载入数组 3.10 执行其他的数组操作 3.10.1 在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev() 3.10.2 对数组的每一个元素应用任何函数:array_walk() 3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件 4.2 字符串的格式化 4.2.1 字符串的整理:chop()、ltrim()和trim() 4.2.2 格式化字符串以便显示 4.2.3 格式化字符串以便存储:addslashes()和stripslashes() 4.3 用字符串函数连接和分割字符串 4.3.1 使用函数explode()、implode()和join() 4.3.2 使用strtok()函数 4.3.3 使用substr()函数 4.4 字符串的比较 4.4.1 字符串的排序:strcmp()、strcasecmp()和strnatcmp() 4.4.2 使用strlen()函数测试字符串的长度 4.5 使用字符串函数匹配和替换子字符串 4.5.1 在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr() 4.5.2 查找子字符串的位置:strpos()、strrpos() 4.5.3 替换子字符串:str_replace()、substr_replace() 4.6 正则表达式的介绍 4.6.1 基础知识 4.6.2 字符集和类 4.6.3 重复 4.6.4 子表达式 4.6.5 子表达式计数 4.6.6 定位到字符串的开始或末尾 4.6.7 分支 4.6.8 匹配特殊字符 4.6.9 特殊字符一览 4.6.10 在智能表单中应用 4.7 用正则表达式查找子字符串 4.8 使用正则表达式分割字符串 4.9 比较字符串函数和正则表达式函数 4.10 进一步学习 4.11 下一章 第5章 代码重用与函数编写 5.1 代码重用的好处 5.1.1 成本 5.1.2 可靠性 5.1.3 一致性 5.2 使用require()和include()函数 5.2.1 文件扩展名和require()语句 5.2.2 使用require()制作Web站点的模版 5.2.3 使用auto_prepend_file和auto_append_file 5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义自己的函数 5.5 了解基本的函数结构 5.5.1 函数命名 5.6 使用参数 5.7 理解作用域 5.8 参数的引用传递和值传递 5.9 使用Return关键字 5.9.1 从函数返回一个值 5.10 实现递归 5.10.1 名称空间 5.11 进一步学习 5.12 下一章 第6章 面向对象的PHP 6.1 理解面向对象的概念 6.1.1 类和对象 6.1.2 多态性 6.1.3 继承 6.2 在PHP中创建类、属性和操作 6.2.1 类的结构 6.2.2 构造函数 6.2.3 析构函数 6.3 类的实例化 6.4 使用类的属性 6.5 使用private和public关键字控制访问 6.6 类操作的调用 6.7 在PHP中实现继承 6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 6.10.1 使用Per-Class常量 6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 6.10.5 使用抽象类 6.10.6 使用__call()重载方法 6.10.7 使用__autoload()方法 6.10.8 实现迭代器和迭代 6.10.9 将类转换成字符串 6.10.10 使用Reflection(反射)API 6.11 下一章 第7章 错误和 异常处理 7.1 异常处理的概念 7.2 Exception类 7.3 用户自定义异常 7.4 Bob的汽车零部件商店应用程序的异常 7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 8.2 如何设计Web数据库 8.2.1 考虑要建模的实际对象 8.2.2 避免保存冗余数据 8.2.3 使用原子列值 8.2.4 选择有意义的键 8.2.5 考虑需要询问数据库的问题 8.2.6 避免多个空属性的设计 8.2.7 表格类型的总结 8.3 Web数据库架构 8.4 进一步学习 8.5 下一章 第9章 创建Web数据库 9.1 使用MySQL监视程序 9.2 登录到MySQL 9.3 创建数据库和用户 9.4 设置用户与权限 9.5 MySQL权限系统的介绍 9.5.1 最少权限原则 9.5.2 创建用户:GRANT命令 9.5.3 权限的类型和级别 9.5.4 REVOKE命令 9.5.5 使用GRANT和REVOKE的例子 9.6 创建一个Web用户 9.7 使用正确的数据库 9.8 创建数据库表 9.8.1 理解其他关键字的意思 9.8.2 理解列的类型 9.8.3 用SHOW和DESCRIBE来查看数据库 9.8.4 创建索引 9.9 理解MySQL的标识符 9.10 选择列数据类型 9.10.1 数字类型 9.10.2 日期和时间类型 9.10.3 字符串类型 9.11 进一步学习 9.12 下一章 第10章 使用MySQL数据库 10.1 SQL是什么 10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用PHP从Web访问MySQL数据库 11.1 Web数据库架构的工作原理 11.2 从Web查询数据库的基本步骤 11.2.1 检查与过滤用户输入数据 11.2.2 建立一个连接 11.2.3 选择使用的数据库 11.2.4 查询数据库 11.2.5 检索查询结果 11.2.6 从数据库断开连接 11.3 将新信息放入数据库 11.4 使用Prepared语句 11.5 使用PHP与数据库交互的其他接口 11.5.1 使用常规的数据库接口:PEAR MDB2 11.6 进一步学习 11.7 下一章 第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 12.2 提高MySQL数据库的安全性 12.2.1 从操作系统角度来保护MySQL 12.2.2 密码 12.2.3 用户权限 12.2.4 Web问题 12.3 获取更多关于数据库的信息 12.3.1 使用SHOW获取信息 12.3.2 使用DESCRIBE获取关于列的信息 12.3.3 用EXPLAIN理解查询操作的工作过程 12.4 数据库的优化 12.4.1 设计优化 12.4.2 权限 12.4.3 表的优化 12.4.4 使用索引 12.4.5 使用默认值 12.4.6 其他技巧 12.5 备份MySQL数据库 12.6 恢复MySQL数据库 12.7 实现复制 12.7.1 设置主服务器 12.7.2 执行初始的数据传输 12.7.3 设置一个/多个从服务器 12.8 进一步学习 12.9 下一章 第13章 MySQL高级编程 13.1 LOAD DATA INFILE语句 13.2 存储引擎 13.3 事务 13.3.1 理解事务的定义 13.3.2 通过InnoDB使用事务 13.4 外键 13.5 存储过程 13.5.1 基本示例 13.5.2 局部变量 13.5.3 游标和控制结构 13.6 进一步学习 13.7 下一章 第三篇 电子商务与安全性 第14章 运营一个电子商务网站 14.1 我们要实现什么目标 14.2 考虑电子商务网站的类型 14.2.1 使用在线说明书公布信息 14.2.2 接收产品或服务的订单 14.2.3 提供服务和数字产品 14.2.4 为产品或服务增值 14.2.5 减少成本 14.3 理解风险和威胁 14.3.1 网络黑客 14.3.2 不能招揽足够的生意 14.3.3 计算机硬件故障 14.3.4 电力、通信、网络或运输故障 14.3.5 广泛的竞争 14.3.6 软件错误 14.3.7 不断变化的政府政策和税收 14.3.8 系统容量限制 14.4 选择一个策略 14.5 下一章 第15章 电子商务的安全问题 15.1 信息的重要程度 15.2 安全威胁 15.2.1 机密数据的泄露 15.2.2 数据丢失和数据破坏 15.2.3 数据修改 15.2.4 拒绝服务 15.2.5 软件错误 15.2.6 否认 15.3 易用性,性能、成本和安全性 15.4 建立一个安全政策 15.5 身份验证原则 15.6 加密技术基础 15.6.1 私有密钥加密 15.6.2 公有密钥加密 15.6.3 数字签名 15.7 数字证书 15.8 安全的Web服务器 15.9 审计与日志记录 15.10 防火墙 15.11 备份数据 15.11.1 备份常规文件 15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与我们“打交道”的用户 16.3.1 破解人员 16.3.2 受影响机器的未知情用户 16.3.3 对公司不满的员工 16.3.4 硬件被盗 16.3.5 我们自身 16.4 代码的安全性 16.4.1 过滤用户输入 16.4.2 转义输出 16.4.3 代码组织 16.4.4 代码自身的问题 16.4.5 文件系统因素 16.4.6 代码稳定性和缺陷 16.4.7 执行引号和exec 16.5 Web服务器和PHP的安全性 16.5.1 保持软件的更新 16.5.2 查看php.ini文件 16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用隔离区域(DMZ) 16.7.3应对DoS和DDoS攻击 16.8 计算机和操作系统的安全性 16.8.1 保持操作系统的更新 16.8.2只运行必须的软件 16.8.3 服务器的物理安全性 16.9 灾难计划 16.10 下一章 第17章 使用PHP和MySQL实现身份验证 17.1 识别访问者 17.2 实现访问控制 17.2.1 保存密码 17.2.2 密码的加密 17.2.3 保护多个网页 17.3 使用基本身份验证 17.4 在PHP中使用基本身份验证 17.5 在Apache的.htaccess文件中使用基本身份验证 17.6 使用mod_auth_mysql身份验证 17.6.1 安装mod_auth_mysql 17.6.2 使用mod_auth_mysql 17.7 创建自定义身份验证 17.8 进一步学习 17.9 下一章 第18章 使用PHP和MySQL实现安全事务 18.1 提供安全的事务处理 18.1.1 用户机器 18.1.2 Internet 18.1.3 我们的系统 18.2 使用加密套接字层(SSL) 18.3 屏蔽用户的输入 18.4 提供安全存储 18.5 存储信用卡号码 18.6 在PHP中使用加密技术 18.6.1 安装GPG 18.6.2 测试GPG 18.7 进一步学习 18.8 下一章 第四篇 PHP的高级技术 第19章 与文件系统和服务器的交互 19.1 文件上载 19.1.1 文件上载的HTML代码 19.1.2 编写处理文件的PHP 19.1.3 避免常见上载问题 19.2 使用目录函数 19.2.1 从目录读取 19.2.2 获得当前目录的信息 19.2.3 创建和删除目录 19.3 与文件系统的交互 19.3.1 获取文件信息 19.3.2 更改文件属性 19.3.3 创建、删除和移动文件 19.4 使用程序执行函数 19.5 与环境变量交互:getenv()和putenv() 19.6 进一步学习 19.7 下一章 第20章 使用网络函数和协议函数 20.1 了解可供使用的协议 20.2 发送和读取电子邮件 20.3 使用其他Web站点的数据 20.4 使用网络查找函数 20.5 备份或镜像一个文件 20.5.1 使用FTP备份或镜像一个文件 20.5.2 上传文件 20.5.3 避免超时 20.5.4 使用其他的FTP函数 20.6 进一步学习 20.7 下一章 第21章 日期和时间的管理 21.1 在PHP中获取日期和时间 21.1.1 使用date()函数 21.1.2 使用UNIX时间戳 21.1.3 使用getdate()函数 21.1.4 使用checkdate()函数检验日期有效性 21.1.5 格式化时间戳 21.2 在PHP日期格式和MySQL日期格式之间进行转换 21.3 在PHP中计算日期 21.4 在MySQL中计算日期 21.5 使用微秒 21.6 使用日历函数 21.7 进一步学习 21.8 下一章 第22章 创建图像 22.1 在PHP中设置图像支持 22.2 理解图像格式 22.2.1 JPEG 22.2.2 PNG 22.2.3 WBMP 22.2.4 GIF 22.3 创建图像 22.3.1 创建一个背景图像 22.3.2 在图像上绘图或打印文本 22.3.3 输出最终图形 22.3.4 清理 22.4 在其他页面中使用自动生成的图像 22.5 使用文本和字体创建图像 22.5.1 创建基本画布 22.5.2 将文本调整到适合按钮 22.5.3 放置文本 22.5.4 将文本写到按钮上 22.5.5 完成 22.6 绘制图像与用图表描绘数据 22.7 使用其他的图像函数 22.8 进一步学习 22.9 下一章 第23章 在PHP中使用会话控制 23.1 什么是会话控制 23.2 理解基本的会话功能 23.2.1 什么是cookie 23.2.2 通过PHP设置cookie 23.2.3 在会话中使用cookie 23.2.4 存储会话 ID 23.3 实现简单的会话 23.3.1 开始一个会话 23.3.2 注册一个会话变量 23.3.3 使用会话变量 23.3.4 注销变量与销毁会话 23.4 创建一个简单的会话例子 23.5 配置会话控制 23.6 通过会话控制实现身份验证 23.7 进一步学习 23.8 下一章 第24章 其他有用的特性 24.1 使用eval()函数对字符串求值 24.2 终止执行:die和exit 24.3 序列化变量和对象 24.4 获取PHP环境信息 24.4.1 找到所加载的PHP扩展部件 24.4.2 识别脚本所有者 24.4.3 确定脚本最近修改时间 24.5 暂时改变运行时环境 24.6 源代码加亮 24.7 在命令行中使用PHP 24.8 下一章 第五篇 创建实用的PHP和MySQL项目 第25章 在大型项目中使用PHP和MySQL 25.1 在Web开发中应用软件工程 25.2 规划和运行Web应用程序项目 25.3 重用代码 25.4 编写可维护代码 25.4.1 编码标准 25.4.2 分解代码 25.4.3 使用标准的目录结构 25.4.4 文档化和共享内部函数 25.5 实现版本控制 25.6 选择一个开发环境 25.7 项目的文档化 25.8 建立原型 25.9 将逻辑和内容分离 25.10 优化代码 25.10.1 使用简单优化 25.10.2 使用Zend产品 25.11 测试 25.12 进一步学习 25.13 下一章 第26章 调试 26.1 编程错误 26.1.1 语法错误 26.1.2 运行时错误 26.1.3 逻辑错误 26.2 使用变量帮助调试 26.3 错误报告级别 26.4 改变错误报告设置 26.5 触发自定义错误 26.6 巧妙地处理错误 26.7 下一章 第27章 建立用户身份验证机制和个性化设置 27.1 解决方案的组成 27.1.1 用户识别和个性化设置 27.1.2 保存书签 27.1.3 推荐书签 27.2 解决方案概述 27.3 实现数据库 27.4 实现基本的网站 27.5 实现用户身份验证 27.5.1 注册 27.5.2 登录 27.5.3 登出 27.5.4 修改密码 27.5.5 重设遗忘的密码 27.6 实现书签的存储和检索 27.6.1 添加书签 27.6.2 显示书签 27.6.3 删除书签 27.7 实现书签推荐 27.8 考虑可能的扩展 27.9 下一章 第28章 创建一个购物车 28.1 解决方案的组成 28.1.1 创建一个在线目录 28.1.2 在用户购买商品的时候记录购买行为 28.1.3 实现一个付款系统 28.1.4 创建一个管理界面 28.2 解决方案概述 28.3 实现数据库 28.4 实现在线目录 28.4.1 列出目录 28.4.2 列出一个目录中的所有图书 28.4.3 显示图书详细信息 28.5 实现购物车 28.5.1 使用show_cart.php脚本 28.5.2 浏览购物车 28.5.3 将物品添加到购物库 28.5.4 保存更新后的购物车 28.5.5 打印标题栏摘要 28.5.6 结账 28.6 实现付款 28.7 实现一个管理界面 28.8 扩展该项目 28.9 使用一个已有系统 28.10 下一章 第29章 创建一个基于Web的电子邮件服务系统 29.1 解决方案的组成 29.1.1 电子邮件协议:POP3和IMAP 29.1.2 PHP对POP3和IMAP的支持 29.2 解决方案概述 29.3 建立数据库 29.4 了解脚本架构 29.5 登录与登出 29.6 建立账户 29.6.1 创建一个新账户 29.6.2 修改已有账户 29.6.3 删除账户 29.7 阅读邮件 29.7.1 选择账户 29.7.2 查看邮箱内容 29.7.3 阅读邮件消息 29.7.4 查看消息标题 29.7.5 删除邮件 29.8 发送邮件 29.8.1 发送一则新消息 29.8.2 回复或转发邮件 29.9 扩展这个项目 29.10 下一章 第30章 创建一个邮件列表管理器 30.1 解决方案的组成 30.1.1 建立列表和订阅者数据库 30.1.2 上载新闻信件 30.1.3 发送带附件的邮件 30.2 解决方案概述 30.3 建立数据库 30.4 定义脚本架构 30.5 实现登录 30.5.1 新账户的创建 30.5.2 登录 30.6 用户函数的实现 30.6.1 查看列表 30.6.2 查看邮件列表信息 30.6.3 查看邮件列表存档 30.6.4 订阅与取消订阅 30.6.5 更改账户设置 30.6.6 更改密码 30.6.7 登出 30.7 管理功能的实现 30.7.1 创建新的邮件列表 30.7.2 上载新的新闻信件 30.7.3 多文件上载的处理 30.7.4 预览新闻信件 30.7.5 发送邮件 30.8 扩展这个项目 30.9 下一章 第31章 创建一个Web论坛 31.1 理解流程 31.2 解决方案的组成 31.3 解决方案概述 31.4 数据库的设计 31.5 查看文章的树型结构 31.5.1 展开和折迭 31.5.2 显示文章 31.5.3 使用treenode类 31.6 查看单个的文章 31.7 添加新文章 31.8 添加扩充 31.9 使用一个已有的系统 31.10 下一章 第32章 生成PDF格式的个性化文档 32.1 项目概述 32.1.1 评估文档格式 32.2 解决方案的组成 32.2.1 问题与回答系统 32.2.2 文档生成软件 32.3 解决方案概述 32.3.1 提问 32.3.2 给答题评分 32.3.3 生成RTF证书 32.3.4 从模板生成PDF证书 32.3.5 使用PDFlib生成PDF文档 32.3.6 使用PDFlib的一个“Hello World”程序 32.3.7 用PDFlib生成证书 32.4 处理标题的问题 32.5 扩展该项目 32.6 下一章 第33章 使用XML和SOAP来连接Web服务 33.1 项目概述:使用XML和Web服务 33.1.1 理解XML 33.1.2 理解Web服务 33.2 解决方案的组成 33.2.1 使用Amazon的Web服务接口 33.2.2 XML的解析:REST响应 33.2.3 在PHP中使用SOAP 33.2.4 缓存 33.3 解决方案概述 33.3.1 核心应用程序 33.3.2 显示特定种类的图书 33.3.3 获得一个AmazonResultSet类 33.3.4 使用REST发送和接收请求 33.3.5 使用SOAP发送和接收请求 33.3.6 缓存请求返回的数据 33.3.7 创建购物车 33.3.8 到Amazon付账 33.4 安装项目代码 33.5 扩展这个项目 33.6 进一步学习 第34 章使用Ajax构建Web 2.0应用 34.1 Ajax 是什么? 34.1.1 HTTP请求和响应 34.1. 2 DHTML和XHTML 34.1.3 级联样式单(CSS) 34.1.4 客户端编程 34.1.5 服务器端编程 34.1.6 XML和XSLT 34.2 Ajax基础 34.2.1 XMLHTTPRequest对象 34.2.2 与服务器通信 34.2.3 处理服务器响应 34.2.4 整合应用 34.3 在以前的项目添加Ajax元素 34.3.1在PHPBookmark应用中添加Ajax元素 34.4 进一步学习 34.4.1 进一步了解文档对象模型(DOM) 34.4.2 Ajax应用可用的JavaScript函数库 34.4.3 Ajax开发人员网站 第六篇 附录 附录A 安装PHP及MySQL 附录B Web资源 第1章 PHP快速入门教程 第2章 数据的存储与检索 第3章 使用数组 第4章 字符串操作与正则表达式 第5章 代码重用与函数编写 第6章 面向对象的PHP 第7章 错误和异常处理 0090 使用Uppercase函数将小写字母转换为大写字母 64 0091 使用Lowercase函数将大写字母转换为小写字母 64 0092 使用Copy函数获取一个字符串的子串 64 0093 使用LeftStr函数从左边取得指定个数的字符串 65 0094 使用RightStr函数从右边取得指定个数的字符串 65 0095 使用Length函数取得一段字符串的长度 65 0096 使用Pos函数返回子字符串第一次出现的索引值 66 0097 使用Quotedstr函数返回字符串的引证串 66 0098 使用Trim函数删除字符串的首尾空格 66 4.2 数学计算函数 67 0099 使用Abs函数返回指定数值的绝对值 67 0100 使用Mod函数计算1~10之间的奇数和 67 0101 使用Div函数做整除操作 68 0102 使用DivMod函数返回两个操作数相除的商和余数 68 0103 使用Power函数返回底数的任何次幂 69 0104 使用Round函数将实数四舍五入为整数 69 0105 使用Sqr函数计算指定数的平方 70 0106 使用Mean函数计算平均数 70 0107 求最大浮点数和最小浮点数 71 4.3 序数函数 72 0108 使用Odd函数改变StringGrid组件的奇偶行颜色 72 0109 使用Pred函数获取顺序类型表达式的前驱 72 0110 使用Succ函数获取顺序类型表达式的后继 73 4.4 进制转换相关函数 73 0111 如何将二进制转换为八进制 73 0112 如何将二进制转换为十进制 75 0113 如何将二进制转换为十六进制 76 0114 如何将十进制转换为二进制 77 0115 如何将十进制转换为十六进制 78 0116 如何将十六进制转换为十进制 79 4.5 类型转换函数 80 0117 使用IntToHex函数将整数转换为十六进制数 80 0118 使用Int函数返回实数的整数部分 80 0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数 81 0122 使用InputBox函数显示输入对话框 81 0123 使用MessageDlg函数显示不同风格的对话框 81 0124 使用CreateMessageDialog函数创建消息对话框 82 0125 如何在指定的位置显示信息框 82 0126 使用ShowException函数显示一个异常信息 82 4.7 异常处理函数 83 0127 将错误编号转换为错误信息字符串 83 0128 使用ExceptAddr函数获得异常被抛出的地址 83 0129 格式化异常处理信息 84 4.8 图形图像相关函数 85 0130 将TColor类型的颜色值转换为RGB值 85 0131 使用Bounds函数获得某矩形的TRect 86 0132 从已有的位图上创建位图 86 0133 使用Frame3D过程在画布上创建3D效果 87 4.9 文件操作的相关函数 87 0134 使用CopyFile函数复制文件 87 0135 使用CreateDir函数创建一个目录 88 0136 使用FileCreate函数创建一个图形文件 88 0137 使用GetCurrentDir函数返回当前目录 89 0138 在指定路径中搜索指定的文件 89 0139 使用FileExists函数判断指定文件是否存在 90 0140 使用FileGetAttr函数返回文件的属性 90 0141 使用FileGetDate函数返回文件的修改日期 90 0142 使用FileWrite函数将缓冲区中的内容写入文件 91 4.10 其他函数 91 0143 使用Random函数产生7个随机数 91 0144 使用DiskFree函数返回磁盘驱动器的剩余空间 91 0145 如何使用Printer函数 92 0146 使用SetPriner函数修改打印机信息 93 0147 使用BeginThread函数产生线程 94 0148 使用EndThread过程终止一个线程 95 0149 使用ForegroundTask函数检测线程是否运行 96 第5章 字符与字符串处理技术 99 5.1 ASCII码与编码转换 100 0150 如何获得汉字的区位码 100 0151 通过区位码获取汉字 100 0152 根据ASCII码获得字母 101 0153 获得字母的ASCII码 101 5.2 字符中的转换 101 0154 如何将数字转换成字符串 101 0155 如何将字符串全部大写 102 0156 如何将字符串全部小写 102 0157 如何将字符串中的任意字符转换成大写 103 0158 如何将字符串中的任意字符转换成小写 103 0159 如何将字符串首字母大写 104 5.3 字符串的相关判断 105 0160 判断某一字符是否在字符串中 105 0161 判断字符串是由数字、大写字母或小写字母组成 105 0162 判断字符串中的某一字符是否大写 106 0163 判断字符串中是否有小写字母 107 0164 判断字符串中是否有指定的字符 107 0165 判断字符是否可以转换成整数 108 0166 判断字符中是否有汉字 108 0167 判断字符中是否有双字节 109 0168 判数输入的字符串是否为整数 109 5.4 字符串的个数问题 110 0169 获取文字中英文单词的个数 110 0170 如何统计两个子字符串之间的字符的个数 111 0171 判断字符在字符串中出现的个数 111 0172 在语句中查找汉字的个数 112 0173 如何统计中英文个数 112 5.5 字符串的其他操作 113 0174 返回指定字符串的起始位置 113 0175 获得汉字的拼音简码 113 0176 如何将字符串翻转 114 0177 截取指定位置的字符串 115 0178 清除字符串中指定的字符 115 0179 如何实现文本的加密与解密 116 0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的汉字或句子 118 0183 指定符号分割字符串 119 0184 如何使用随机密码和字符串 120 第6章 日期和时间 121 0185 获得系统当前时间 122 0186 获得系统当前日期 122 0187 将日期时间格式化为指定格式 122 0188 计算两个日期之间相差的天数 123 0189 根据指定日期返回星期几 123 0190 将日期转换为字符串 124 0191 判断日期是否改变 124 0192 判断字符串是否为日期或时间 125 0193 获得指定月的最后一天 127 0194 在指定的日期上加上3月 127 0195 实现倒计时功能 128 0196 判断指定年份是否为闰年 129 0197 调用系统设置日期对话框 129 0198 将秒数转化成hh:mm:ss格式 129 0199 修改操作系统日期 130 0200 获取全球标准时间 130 第7章 数据处理技术 133 7.1 组件数据处理技术 134 0201 让两个文本框中的内容同时改变 134 0202 格式化DataGrid表格中的数据 134 0203 控制文本框只能录入数字 135 0204 如何在DataGrid中嵌入LookupComboBox 135 0205 在DBGrid中设置不滚动的列 136 0206 如何在DBGrid中实现复制、粘贴功能 137 0207 在DBGrid中将选中的多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中的内容拖曳到另一个ListBox中 139 0210 把DBGrid中的数据赋给数组 139 0211 如何获取DataGrid单元格中的内容 140 0212 如何锁定文本框中的文本 141 0213 如何设置光标到文本框的末尾 141 0214 如何改变表格列的矩形区域颜色 142 0215 控制在文本框中只能输入两位小数 143 0216 如何把选择的文件图标显示在列表中 143 0217 根据表格中的数据长度自动调整表格宽度 144 7.2 ADO数据处理技术 145 0218 如何把ADO中的数据导入到ListBox中 145 0219 使用SQL语句保存数据 146 0220 使用赋值方式保存数据 147 0221 当ADO循环删除数据时需要注意的问题 147 0222 把Excel中的数据保存到数据库中 147 0223 怎样弹出ConnectionString设置页 148 0224 利用ADO获取DELETE后所影响的记录数 148 7.3 业务实现数据处理技术 149 0225 随机产生中奖号码 149 0226 使用快捷键保存数据 150 0227 密码只允许输入8位或超过8位 150 0228 如何获取汉字拼音简码 151 0229 根据用户输入需求自动调整输入法 152 0230 根据生日自动计算年龄 153 0231 实现找零功能 153 0232 设计带记忆的数据录入窗口 154 0233 在窗体关闭时提示有未保存的数据 155 0234 设置只允许3次密码错误 156 0235 如何读取Word中的文本 156 0236 通过身份证号获取年龄 157 0237 如何实现一个应用程序只能打开一个进程 158 7.4 其他数据处理技术 159 0238 对计算结果四舍五入 159 0239 获取一个字符的ASCII值 159 0240 判断字符串中是否有文字符 160 0241 如何从字符串中提取数字 160 0242 判断内容是否为日期 161 0243 使字符串显示为自定义的格式 161 0244 实现拼音大小写转换 162 0245 怎样实现数据输入为空提示 162 0246 读取Memo1中指定行的文本信息 163 0247 自动调节ComboBox列表宽度 164 0248 如何转换数据库表为CSV文件格式 164 0249 删除文本文件中的多余空格 165 0250 创建和使用资源文件 166 第8章 窗体与界面设计 169 8.1 窗体标题栏控制 170 0251 如何实现标题栏闪烁的窗体 170 0252 如何实现不可移动的窗体 170 0253 如何在不使用标题栏的情况下移动窗体 170 0254 使窗体标题栏文字右对齐 170 0255 在窗体标题栏上添加按钮 171 0256 取消窗体标题栏的关闭按钮 172 0257 如何实现闪动的标题栏文字 172 0258 怎样动态修改窗体图标 172 8.2 窗体的动态显示 173 0259 如何实现QQ窗体 173 0260 实现窗体的淡入淡出 173 0261 实现窗体的幻灯片效果 174 0262 实现窗体的伸展效果 174 0263 实现窗体的下拉效果 175 0264 以放大的圆形显示窗体 175 8.3 MDI窗体 176 0265 在MDI中显示动态窗体 176 0266 在MDI中真正关闭子窗体 176 0267 给MDI主窗体添加背景 176 0268 动态显示像MDI的子窗体 177 0269 打开MDI窗体时其他窗体会显示出来的原因 177 8.4 窗体的大小及位置 178 0270 控制窗体的最大化、最小化 178 0271 无标题栏时改变窗体的大小 178 0272 无标题栏最大化时不覆盖任务栏 178 0273 限制窗体的大小 179 0274 重定义去掉标题栏并最大化窗体 179 0275 使窗体一直居中 179 0276 控制窗体不可移动 180 0277 限制窗体的最大化 180 0278 使窗体自动居中 181 8.5 窗体的特殊形状 181 0279 实现窗体颜色渐变 181 0280 如何使窗体透明 182 0281 制作特殊形状的窗体 182 0282 为窗体增加边框 183 0283 显示圆角窗体 183 0284 制作多边形窗体 184 0285 以文字的形式显示窗体 185 0286 如何实现窗体半透明 185 0287 制作立体窗口阴影效果 186 8.6 工具栏、状态栏及下拉列表 187 0288 制作带历史信息的菜单 187 0289 制作可以拉伸的菜单界面 188 0290 制作类似于XP颜色的下拉页 188 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296 如何在屏幕最前面显示滚动字幕 192 0297 制作磁性窗体 193 0298 制作浮动窗口 194 0299 制作另类提示窗口 195 0300 将窗体放入Panel组件中 196 8.8 窗体的快速操作 197 0301 使窗体始终在最上面 197 0302 显示所有的可视化窗体 197 0303 关闭所有窗体 198 0304 关闭多余的窗体 198 8.9 窗体的调用方法 199 0305 在关闭窗体前显示提示对话框 199 0306 创建一个启动闪现窗口 199 0307 动态创建窗体 200 0308 动态创建窗体和释放窗体 200 0309 在显示主窗体前显示登录窗体 201 8.10 窗体相关操作的其他技巧 202 0310 无窗体的半透明控件 202 0311 修改提示字体及颜色 202 0312 在窗口中显示动态画布 202 0313 如何实现中英文切换 203 0314 在一个子窗体中获得另一个子窗体的组件信息 204 第9章 组件技术 205 9.1 优化组件外观 206 0315 利用TXPManifest组件美化程序界面 206 0316 使用Canvas美化列表项 206 0317 利用Canvas在Chart组件中画一幅图片 207 0318 如何为TListBox添加水平滚动条 207 0319 折行显示按钮标题 208 0320 为组件制作立体效果 208 0321 利用ActiveX控件实现Office助手 209 9.2 菜单、工具栏、状态栏 209 0322 在PopupMenu中动态加入新菜单 209 0323 在状态栏中显示进度条组件 210 0324 为工具栏添加背景图片 210 9.3 文本框及列表框的应用技巧 211 0325 使TEdit组件获取焦点后将文本全部选中 211 0326 使TEdit组件获取焦点时改变文本框颜色 211 0327 查找列表框中的选项 212 0328 在ComboBox组件中显示QQ头像 212 0329 为Edit组件添加列表选择框 213 0330 在ListBox中显示位图 214 0331 获取TMemo中的可见行数 214 0332 如何在Memo组件上实现光标定位 215 0333 控制Memo组件中的滚动条 216 9.4 数据感知控件应用技巧 217 0334 如何在DBGrid中显示不同的记录颜色 217 0335 单击DBGrid标题进行排序 218 0336 使DBGrid支持鼠标滚轮 218 0337 在DBGrid中添加静态字段 218 0338 在DBGrid中实现下拉列表 219 0339 改变DBGrid被选中时的颜色 220 0340 用TDBNavigator组件删除数据显示自定义信息 220 0341 使用Excel组件将数据导出为Excel格式 221 9.5 表格组件使用技巧 222 0342 将StringGrid中指定行的数据添加到Memo中 222 0343 使TStringGrid组件自动移动及增加行 223 0344 单击StringGrid列进行排序 224 9.6 TreeView组件使用技巧 225 0345 如何动态创建TreeView节点 225 0346 如何将TreeView中的节点全部选中 226 0347 将菜单项添加到Tree View中 226 0348 使TreeView组件与数据库关联 227 0349 应用TTreeView组件遍历磁盘目录 228 0350 在TreeView组件中实现拖曳操作 229 9.7 ListView组件使用技巧 229 0351 向TListView组件中添加项目 229 0352 删除ListView中的选项 230 0353 实现ListView滚动 230 0354 将数组中的数值遍历到ListView中 231 0355 ListView组件的高级应用 231 0356 使ListView的不同列显示不同颜色 232 0357 对ListView中的项目进行汇总 233 0358 单击列表标题进行排序 233 9.8 应用组件制作导航 234 0359 用ListView制作导航界面 234 0360 利用Panel组件制作QQ导航栏 235 9.9 其他组件使用技巧 237 0361 动态创建组件 237 0362 创建控件数组 237 0363 用组件来移动窗体 238 0364 实现组件的批量访问 238 0365 使同类组件进行同样的操作 239 0366 使用Ttrackbar组件改变画布颜色值 239 0367 设置TopAxis属性在图表上面显示标签 240 0368 动态向ImageList组件中添加图标 240 0369 设置DateTimePicker组件的外观颜色 241 0370 利用Timer组件显示当前系统时间 241 0371 获取用户在Month Calendar组件中选择的日期 242 0372 在Panel上播放视频文件 242 0373 Win3.1组件的综合应用 242 0374 制作一个信息上传控件 243 0375 使用Gauge组件制作启动程序 245 第10章 鼠标和键盘 247 10.1 鼠标和键盘 248 0376 鼠标和键盘在一定时间没有动作时关闭程序 248 0377 如何锁定鼠标和键盘 248 0378 如何实现键盘鼠标动作记录与回放 249 10.2 鼠标的相关操作 250 0379 将鼠标锁定在指定范围内 250 0380 模拟鼠标操作 251 0381 显示或隐藏鼠标 252 0382 获取鼠标按键状态 252 0383 获取窗口标题 253 0384 单击鼠标左键弹出右键菜单 253 0385 改变当前鼠标的样式 254 0386 模拟键盘的复制与粘贴 255 0387 如何定义自己的鼠标事件 255 0388 利用鼠标绘制矩形焦点 256 0389 将鼠标移动到指定控件 257 0390 ANI动画鼠标的制作 257 0391 自制动画鼠标 258 0392 获取鼠标滑轮的消息 258 0393 制作鼠标跟随 259 0394 利用鼠标滑轮查看组件中的数据 259 10.3 键盘的相关操作 260 0395 按回车键移动焦点 260 0396 如何屏蔽Win键 261 0397 如何控制键盘指示灯 261 0398 如何屏蔽Sleep和Wake Up键 262 0399 设置自己的热键 262 0400 用键盘钩子封锁Win dows热键 263 0401 如何用Esc键退出程序 263 0402 在TDBGrid中用回车键移至下一个字段 264 0403 用Esc键停止循环 264 0404 如何判断左右 Shift 按键 265 0405 替换一个键盘按钮 265 10.4 鼠标的其他应用技巧 266 0406 实现超级链接效果 266 0407 用鼠标隐藏显示窗口(仿QQ) 267 0408 获取鼠标的桌面坐标 267 0409 用鼠标双击TStatusBar时判断是哪一个Panels 268 0410 使Canvas上直线的一个端点跟着鼠标跑 268 第11章 文件与文件管理 271 11.1 文件及文件夹的创建和移动 272 0411 创建并删除文件 272 0412 如何移动文件 272 0413 将文件放入回收站 273 0414 复制文件夹到其他路径中 273 0415 用API函数进行文件的复制 274 0416 用内存块复制文件 275 0417 用文件流对文件进行复制 275 11.2 文件的打开及读取 276 0418 打开指定格式的文件 276 0419 获取文件中指定符号中的字符串 277 0420 如何输出文本内容 277 0421 根据文件名中的部分名称打开该文件 278 0422 怎样合并文件 280 0423 创建和使用资源文件 281 11.3 文件及文件夹的相关属性 281 0424 如何获取文件的访问时间 281 0425 获取文件的剩余空间 282 0426 获取文件修改时间 283 0427 怎样修改文件属性 283 11.4 文件及文件夹的相关目录 285 0428 得到系统当前目录 285 0429 改变当前目录 285 0430 获取System目录 286 0431 获取Windows目录 286 0432 获取临时文件的目录 287 11.5 文件属性的相关判断 287 0433 判断文件是否被使用 287 0434 判断文件是否存在 288 0435 判断文件是否为文本文件 288 0436 判断文件名是否有效 289 11.6 文件及文件夹的遍历 289 0437 如何查询文件 289 0438 提取文件夹中的文件 291 0439 遍历文件夹下的所有文件(包含子文件夹) 291 11.7 INI文件 292 0440 如何读写INI文件 292 0441 利用INI文件查看工作日志 294 0442 用INI文件创建菜单 295 11.8 文件的其他应用技巧 296 0443 调用帮助文件 296 0444 对文件进行比较 296 0445 更改文件名称 297 0446 字符网格和文本间转换 297 第12章 磁盘管理 299 12.1 获取磁盘的相关信息 300 0447 获取磁盘总空间 300 0448 获取光盘的盘符 300 0449 获取系统盘符 301 0450 获得光盘的卷标 301 0451 获取磁盘卷标 302 0452 获取磁盘编号 302 0453 获取磁盘详细信息 303 0454 获取硬盘序列号 303 0455 获取驱动器类型 304 0456 获取驱动器列表 304 0457 获取磁盘的文件系统名称、长度及系统标记 305 0458 获取移动硬盘 305 12.2 磁盘设置与操作 306 0459 将文件存到磁盘中 306 0460 如何实现盘格式化 307 0461 打开磁盘时先弹出文本文件 308 0462 怎样进行磁盘碎片整理 308 12.3 磁盘监控与分析 308 0463 判断光驱中是否有光盘 308 0464 如何打开和关闭光驱 309 0465 判断软驱中是否有软盘 310 0466 判断磁盘是否存在 311 第13章 图形图像技术 313 13.1 基本操作 314 0467 对窗体进行刷新 314 0468 在TImage组件上显示透明文字 314 0469 清空TImage组件中的图片 314 0470 生成两个颜色的中间色 315 0471 改变文字的背景颜色 315 13.2 绘制图形 316 0472 制作空心文字 316 0473 如何实现十字光标定位 316 0474 制作旋转的文字 317 0475 波形图的绘制 318 0476 制作动画背景的窗体 319 0477 如何涂抹窗体 320 0478 如何万花筒 320 13.3 图片格式转换 321 0479 ICO转换成位图(BMP) 321 0480 JPG转换成位图(BMP) 322 0481 WMF转换成位图(BMP) 323 0482 位图(BMP)转换成JPG 323 0483 位图(BMP)转换成WMF 324 0484 批量转换图像 324 13.4 颜色格式的转换 326 0485 将TColor换算成RGB 326 0486 将TColor换算成HTML 326 0487 将HTML换算成TColor 327 0488 将CMYK换算成RGB 327 0489 将RGB换算成CMYK 328 0490 将RGB换算成TColor 329 13.5 图片的滤镜效果 329 0491 将图片以灰度形式显示 329 0492 提高图像的亮度 330 0493 图像浮雕效果 331 0494 图片的反色效果 332 13.6 翻转与缩放 333 0495 如何放大和缩小图像 333 0496 实现图形反转 333 0497 如何旋转图像 334 0498 将图像局部放大 335 13.7 图片的动态效果 336 0499 制作百叶窗效果 336 0500 垂直交错显示图像 337 0501 水平交错显示图像 338 0502 制作积木效果 338 0503 制作推拉效果 340 0504 如何实现雨滴式的效果 340 0505 图片颜色逐渐加深 341 13.8 获取及调整图片的像素 342 0506 如何实现定点取色 342 0507 获取指定点的RGB值 343 0508 制作红绿眼镜三维立体画 343 0509 调整图片的RGB对比度 344 0510 图片的加密与解密 345 13.9 图片的处理技术 346 0511 复制局部图片 346 0512 在图片中加入文字 347 0513 如何实现图片扭曲 348 0514 图片的网格效果 350 13.10 图片的存储 350 0515 将BMP图片重画到窗体上 350 0516 将JPG图片重画到窗体上 351 0517 使位图图片透明 352 0518 对大图片的操作 352 13.11 图片的其他应用技巧 353 0519 怎样浏览大图片 353 0520 获取图像信息 353 0521 在图片上平滑移动文字 354 0522 制作随鼠标拖动的图像 355 0523 在TMainMenu组件上绘制图片 356 第14章 动画与多媒体 357 14.1 动画播放 358 0524 单帧动画播放 358 0525 多帧动画播放 358 0526 模拟石英钟 360 0527 设计字幕程序 361 0528 设计屏幕保护程序 361 14.2 文字效果 363 0529 文字的立体字效果 363 0530 文字滚动效果 364 0531 文字旋转效果 365 0532 制作空心文字 365 14.3 播放媒体文件 366 0533 播放AVI文件 366 0534 播放Flash动画 367 0535 播放WAV文件 368 0536 播放GIF文件 368 14.4 利用API播放媒体 369 0537 与多媒体相关的API函数 369 0538 利用sndPlaySound函数播放音频文件 370 0539 利用mciSendString函数播放AVI 370 14.5 音频及视频 372 0540 使电脑发出声音 372 0541 显示MP3文件的播放时间 372 0542 显示文件的播放进度 373 0543 循环播放媒体文件 374 0544 显示AVI文件的播放帧数 375 0545 指定视频显示窗口 375 0546 全屏播放视频文件 376 0547 设计一个精美的播放器 377 0548 播放背景音乐 380 0549 利用RealPlayer播放器播放音乐 381 14.6 媒体控制 382 0550 如何实现静音与声道控制 382 0551 调用声音控制对话框 383 0552 使播放的Flash随窗口大小改变 383 0553 打开和关闭光驱 383 第15章 API函数 385 15.1 操作系统 386 0554 关闭显示器 386 0555 获取系统启动模式 386 0556 使程序不出现在任务栏上 387 0557 修改系统时间 387 0558 修改系统颜色 388 0559 使用API函数拨号 389 0560 获取内存使用状态的信息 389 0561 清空回收站 390 0562 设置系统日期 390 0563 如何设定屏幕分辨率设定 391 0564 修改系统的刷新率 391 0565 隐藏桌面图标 392 0566 获取Windows主题文件 392 15.2 窗体 393 0567 利用API创建窗体 393 0568 利用API创建画刷 394 0569 利用API绘制弧形 394 0570 利用API控制窗体显示 395 0571 制作闪动标题的窗体 396 0572 拖动无标题栏窗体 396 0573 获取拖动到窗体中的文件路径 396 0574 在窗口的任意地方弹出主菜单项 397 0575 获取工程中的所有窗体名称 398 15.3 其他相关应用技巧 399 0576 锁定计算机 399 0577 启动控制面板 400 0578 如何实现屏幕抓图 401 0579 计算Windows从启动后所运行的总时间率 401 0580 巧用GetSystemMetrics函数 402 0581 显示密码编辑框中的密码 402 0582 添加、删除系统托盘图标 402 0583 如何在系统菜单中添加新项目 403 0584 监测程序多久未被使用 404 第16章 注册表 405 16.1 注册表基本操作 406 0585 创建注册表项 406 0586 删除注册表项 406 0587 向注册表中写入数据 407 0588 读取注册表中的数据 407 0589 列出指定注册表项下全部键值 408 0590 备份与恢复注册表 409 16.2 桌面 410 0591 设置系统墙纸 410 0592 修改桌面“我的电脑”的提示信息 410 0593 如何在桌面的任意位置显示墙纸 411 0594 在任务栏中添加自定义信息 412 16.3 优化系统性能 413 0595 如何实现自动登录 413 0596 如何快速显示窗口 414 0597 优化二级缓存 414 0598 优化系统关机速度 415 0599 禁止用户对虚拟内存的访问 415 16.4 IE浏览器设置 416 0600 设置IE默认首页 416 0601 清空IE网址中的历史记录 416 0602 设计修改IE标题栏和工具栏背景的程序 418 0603 隐藏IE属性中的选项 419 0604 禁止查看网页中的源文件 421 0605 禁止IE播放多媒体文件 421 0606 禁止对IE浏览器设置默认首页 422 16.5 “开始”菜单的相关设置 422 0607 如何在“开始”菜单中隐藏“关机”菜单项 422 0608 如何在“开始”菜单中隐藏“文档”菜单项 423 0609 如何在“开始”菜单中隐藏“运行”菜单项 423 0610 退出系统时清除“文档”中的历史记录 424 0611 禁止文档子菜单记录最近的工作信息 425 16.6 其他设置 426 0612 设计开机欢迎文字 426 0613 防止应用程序窗口失去焦点 426 0614 隐藏“添加/删除Windows组件”按钮 427 0615 隐藏计算机中的盘符 428 0616 禁止使用控制面板 430 0617 禁止使用注册表编辑器 431 0618 通过注册表获取时区信息 431 0619 通过注册表获取系统信息和用户注册信息 432 第17章 Windows相关开发技术 435 17.1 CPU 436 0620 获取CPU频率 436 0621 获取从开机到现在CPU运行的周期数 436 0622 获取CPU名称 437 0623 判断CPU是否支持MMX 438 17.2 系统控制 438 0624 计算机的关闭、重启和注销 438 0625 开关屏幕保护 439 0626 设计更换屏幕保护的程序 440 0627 设计屏幕保护的程序 441 0628 设置屏幕分辨率 442 0629 设置墙纸 443 0630 显示桌面 444 0631 让InputBox也能使用密码掩码 444 0632 控制系统菜单 445 0633 动态改变屏幕的显示模式 446 0634 在桌面上创建指定网址的快捷方式 446 0635 建立批处理文件的快捷方式 447 0636 Windows菜单字体的设置 448 17.3 系统状态栏的相关操作 448 0637 隐藏和显示任务栏 448 0638 隐藏、显示托盘图标 449 0639 隐藏状态栏中的时间 449 0640 如何设置“开始”按钮不可用 450 17.4 获取系统信息 450 0641 查看当前系统版本 450 0642 更改系统日期及时间 451 0643 获取系统字体的列表 452 0644 获取指定盘符中的路径 452 0645 获取系统内存信息 454 0646 如何使用DOS获取计算机的网络信息 454 17.5 获取Windows的相关文件 455 0647 按文件类型获取其图标 455 0648 监控剪贴板的文字内容 456 0649 输出Shell32.dll的图标 457 0650 从剪贴板中读取图片 458 17.6 Windows消息的相关控制 458 0651 程序最小时在任务栏中显示托盘图标 458 0652 动态最小化到状态栏托盘区 459 0653 屏幕取图(包含鼠标) 459 17.7 其他相关技巧 460 0654 如何让电脑发出滴声 460 0655 打开记事本和计算器 461 0656 对汉字输入法进行操作 461 0657 在组件中执行控制面板 462 0658 在Windows界面上不显示程序 464 0659 清空回收站 464 0660 给桌面加上一层阴影 465 第18章 程序应用控制 467 第19章 数据库技术 485 第20章 SQL查询相关技术 523 第21章 打印与报表技术 583 第22章 图表技术 617 第23章 硬件相关技巧 633 第24章 网络开发技术 645 第25章 Web相关技巧 689 第26章 安全技术 707 第27章 程序调试与错误处理 717 第28章 程序打包与安装 727 第29章 第三方控件 737 上述代码通过反射生成与Web API项目相匹配的XML文件名,AppContext.BaseDirectory属性用于构造 XML 文件的路径,关于OpenApiInfo内的配置参数用于文档的一些描述,在此不作过多说明。为解决前后端苦于接口文档与实际不一致、维护和更新文档的耗时费力等问题,swagger应运而生,同时也解决了接口测试问题。这样,我们以三斜杠(///)方式给类方法属性等相关代码添加注释后,刷新Swagger页面,即可看到注释说明。同时,调整项目生成的XML文档文件路径为:… 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() 2.7.4 读取整个文件:readfile()、fpassthru()和file() 2.7.5 读取一个字符:fgetc() 2.7.6 读取任意长度:fread() 2.8 使用其他有用的文件函数 2.8.1 查看文件是否存在:file_exists() 2.8.2 确定文件大小:filesize() 2.8.3 删除一个文件:unlink() 2.8.4 在文件中定位:rewind()、fseek()和ftell() 2.9 文件锁定 2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()函数 3.9 从文件载入数组 3.10 执行其他的数组操作 3.10.1 在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev() 3.10.2 对数组的每一个元素应用任何函数:array_walk() 3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件 4.2 字符串的格式化 4.2.1 字符串的整理:chop()、ltrim()和trim() 4.2.2 格式化字符串以便显示 4.2.3 格式化字符串以便存储:addslashes()和stripslashes() 4.3 用字符串函数连接和分割字符串 4.3.1 使用函数explode()、implode()和join() 4.3.2 使用strtok()函数 4.3.3 使用substr()函数 4.4 字符串的比较 4.4.1 字符串的排序:strcmp()、strcasecmp()和strnatcmp() 4.4.2 使用strlen()函数测试字符串的长度 4.5 使用字符串函数匹配和替换子字符串 4.5.1 在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr() 4.5.2 查找子字符串的位置:strpos()、strrpos() 4.5.3 替换子字符串:str_replace()、substr_replace() 4.6 正则表达式的介绍 4.6.1 基础知识 4.6.2 字符集和类 4.6.3 重复 4.6.4 子表达式 4.6.5 子表达式计数 4.6.6 定位到字符串的开始或末尾 4.6.7 分支 4.6.8 匹配特殊字符 4.6.9 特殊字符一览 4.6.10 在智能表单中应用 4.7 用正则表达式查找子字符串 4.8 使用正则表达式分割字符串 4.9 比较字符串函数和正则表达式函数 4.10 进一步学习 4.11 下一章 第5章 代码重用与函数编写 5.1 代码重用的好处 5.1.1 成本 5.1.2 可靠性 5.1.3 一致性 5.2 使用require()和include()函数 5.2.1 文件扩展名和require()语句 5.2.2 使用require()制作Web站点的模版 5.2.3 使用auto_prepend_file和auto_append_file 5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义自己的函数 5.5 了解基本的函数结构 5.5.1 函数命名 5.6 使用参数 5.7 理解作用域 5.8 参数的引用传递和值传递 5.9 使用Return关键字 5.9.1 从函数返回一个值 5.10 实现递归 5.10.1 名称空间 5.11 进一步学习 5.12 下一章 第6章 面向对象的PHP 6.1 理解面向对象的概念 6.1.1 类和对象 6.1.2 多态性 6.1.3 继承 6.2 在PHP中创建类、属性和操作 6.2.1 类的结构 6.2.2 构造函数 6.2.3 析构函数 6.3 类的实例化 6.4 使用类的属性 6.5 使用private和public关键字控制访问 6.6 类操作的调用 6.7 在PHP中实现继承 6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 6.10.1 使用Per-Class常量 6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 6.10.5 使用抽象类 6.10.6 使用__call()重载方法 6.10.7 使用__autoload()方法 6.10.8 实现迭代器和迭代 6.10.9 将类转换成字符串 6.10.10 使用Reflection(反射)API 6.11 下一章 第7章 错误和 异常处理 7.1 异常处理的概念 7.2 Exception类 7.3 用户自定义异常 7.4 Bob的汽车零部件商店应用程序的异常 7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 8.2 如何设计Web数据库 8.2.1 考虑要建模的实际对象 8.2.2 避免保存冗余数据 8.2.3 使用原子列值 8.2.4 选择有意义的键 8.2.5 考虑需要询问数据库的问题 8.2.6 避免多个空属性的设计 8.2.7 表格类型的总结 8.3 Web数据库架构 8.4 进一步学习 8.5 下一章 第9章 创建Web数据库 9.1 使用MySQL监视程序 9.2 登录到MySQL 9.3 创建数据库和用户 9.4 设置用户与权限 9.5 MySQL权限系统的介绍 9.5.1 最少权限原则 9.5.2 创建用户:GRANT命令 9.5.3 权限的类型和级别 9.5.4 REVOKE命令 9.5.5 使用GRANT和REVOKE的例子 9.6 创建一个Web用户 9.7 使用正确的数据库 9.8 创建数据库表 9.8.1 理解其他关键字的意思 9.8.2 理解列的类型 9.8.3 用SHOW和DESCRIBE来查看数据库 9.8.4 创建索引 9.9 理解MySQL的标识符 9.10 选择列数据类型 9.10.1 数字类型 9.10.2 日期和时间类型 9.10.3 字符串类型 9.11 进一步学习 9.12 下一章 第10章 使用MySQL数据库 10.1 SQL是什么 10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用PHP从Web访问MySQL数据库 11.1 Web数据库架构的工作原理 11.2 从Web查询数据库的基本步骤 11.2.1 检查与过滤用户输入数据 11.2.2 建立一个连接 11.2.3 选择使用的数据库 11.2.4 查询数据库 11.2.5 检索查询结果 11.2.6 从数据库断开连接 11.3 将新信息放入数据库 11.4 使用Prepared语句 11.5 使用PHP与数据库交互的其他接口 11.5.1 使用常规的数据库接口:PEAR MDB2 11.6 进一步学习 11.7 下一章 第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 12.2 提高MySQL数据库的安全性 12.2.1 从操作系统角度来保护MySQL 12.2.2 密码 12.2.3 用户权限 12.2.4 Web问题 12.3 获取更多关于数据库的信息 12.3.1 使用SHOW获取信息 12.3.2 使用DESCRIBE获取关于列的信息 12.3.3 用EXPLAIN理解查询操作的工作过程 12.4 数据库的优化 12.4.1 设计优化 12.4.2 权限 12.4.3 表的优化 12.4.4 使用索引 12.4.5 使用默认值 12.4.6 其他技巧 12.5 备份MySQL数据库 12.6 恢复MySQL数据库 12.7 实现复制 12.7.1 设置主服务器 12.7.2 执行初始的数据传输 12.7.3 设置一个/多个从服务器 12.8 进一步学习 12.9 下一章 第13章 MySQL高级编程 13.1 LOAD DATA INFILE语句 13.2 存储引擎 13.3 事务 13.3.1 理解事务的定义 13.3.2 通过InnoDB使用事务 13.4 外键 13.5 存储过程 13.5.1 基本示例 13.5.2 局部变量 13.5.3 游标和控制结构 13.6 进一步学习 13.7 下一章 第三篇 电子商务与安全性 第14章 运营一个电子商务网站 14.1 我们要实现什么目标 14.2 考虑电子商务网站的类型 14.2.1 使用在线说明书公布信息 14.2.2 接收产品或服务的订单 14.2.3 提供服务和数字产品 14.2.4 为产品或服务增值 14.2.5 减少成本 14.3 理解风险和威胁 14.3.1 网络黑客 14.3.2 不能招揽足够的生意 14.3.3 计算机硬件故障 14.3.4 电力、通信、网络或运输故障 14.3.5 广泛的竞争 14.3.6 软件错误 14.3.7 不断变化的政府政策和税收 14.3.8 系统容量限制 14.4 选择一个策略 14.5 下一章 第15章 电子商务的安全问题 15.1 信息的重要程度 15.2 安全威胁 15.2.1 机密数据的泄露 15.2.2 数据丢失和数据破坏 15.2.3 数据修改 15.2.4 拒绝服务 15.2.5 软件错误 15.2.6 否认 15.3 易用性,性能、成本和安全性 15.4 建立一个安全政策 15.5 身份验证原则 15.6 加密技术基础 15.6.1 私有密钥加密 15.6.2 公有密钥加密 15.6.3 数字签名 15.7 数字证书 15.8 安全的Web服务器 15.9 审计与日志记录 15.10 防火墙 15.11 备份数据 15.11.1 备份常规文件 15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与我们“打交道”的用户 16.3.1 破解人员 16.3.2 受影响机器的未知情用户 16.3.3 对公司不满的员工 16.3.4 硬件被盗 16.3.5 我们自身 16.4 代码的安全性 16.4.1 过滤用户输入 16.4.2 转义输出 16.4.3 代码组织 16.4.4 代码自身的问题 16.4.5 文件系统因素 16.4.6 代码稳定性和缺陷 16.4.7 执行引号和exec 16.5 Web服务器和PHP的安全性 16.5.1 保持软件的更新 16.5.2 查看php.ini文件 16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用隔离区域(DMZ) 16.7.3应对DoS和DDoS攻击 16.8 计算机和操作系统的安全性 16.8.1 保持操作系统的更新 16.8.2只运行必须的软件 16.8.3 服务器的物理安全性 16.9 灾难计划 16.10 下一章 第17章 使用PHP和MySQL实现身份验证 17.1 识别访问者 17.2 实现访问控制 17.2.1 保存密码 17.2.2 密码的加密 17.2.3 保护多个网页 17.3 使用基本身份验证 17.4 在PHP中使用基本身份验证 17.5 在Apache的.htaccess文件中使用基本身份验证 17.6 使用mod_auth_mysql身份验证 17.6.1 安装mod_auth_mysql 17.6.2 使用mod_auth_mysql 17.7 创建自定义身份验证 17.8 进一步学习 17.9 下一章 第18章 使用PHP和MySQL实现安全事务 18.1 提供安全的事务处理 18.1.1 用户机器 18.1.2 Internet 18.1.3 我们的系统 18.2 使用加密套接字层(SSL) 18.3 屏蔽用户的输入 18.4 提供安全存储 18.5 存储信用卡号码 18.6 在PHP中使用加密技术 18.6.1 安装GPG 18.6.2 测试GPG 18.7 进一步学习 18.8 下一章 第四篇 PHP的高级技术 第19章 与文件系统和服务器的交互 19.1 文件上载 19.1.1 文件上载的HTML代码 19.1.2 编写处理文件的PHP 19.1.3 避免常见上载问题 19.2 使用目录函数 19.2.1 从目录读取 19.2.2 获得当前目录的信息 19.2.3 创建和删除目录 19.3 与文件系统的交互 19.3.1 获取文件信息 19.3.2 更改文件属性 19.3.3 创建、删除和移动文件 19.4 使用程序执行函数 19.5 与环境变量交互:getenv()和putenv() 19.6 进一步学习 19.7 下一章 第20章 使用网络函数和协议函数 20.1 了解可供使用的协议 20.2 发送和读取电子邮件 20.3 使用其他Web站点的数据 20.4 使用网络查找函数 20.5 备份或镜像一个文件 20.5.1 使用FTP备份或镜像一个文件 20.5.2 上传文件 20.5.3 避免超时 20.5.4 使用其他的FTP函数 20.6 进一步学习 20.7 下一章 第21章 日期和时间的管理 21.1 在PHP中获取日期和时间 21.1.1 使用date()函数 21.1.2 使用UNIX时间戳 21.1.3 使用getdate()函数 21.1.4 使用checkdate()函数检验日期有效性 21.1.5 格式化时间戳 21.2 在PHP日期格式和MySQL日期格式之间进行转换 21.3 在PHP中计算日期 21.4 在MySQL中计算日期 21.5 使用微秒 21.6 使用日历函数 21.7 进一步学习 21.8 下一章 第22章 创建图像 22.1 在PHP中设置图像支持 22.2 理解图像格式 22.2.1 JPEG 22.2.2 PNG 22.2.3 WBMP 22.2.4 GIF 22.3 创建图像 22.3.1 创建一个背景图像 22.3.2 在图像上绘图或打印文本 22.3.3 输出最终图形 22.3.4 清理 22.4 在其他页面中使用自动生成的图像 22.5 使用文本和字体创建图像 22.5.1 创建基本画布 22.5.2 将文本调整到适合按钮 22.5.3 放置文本 22.5.4 将文本写到按钮上 22.5.5 完成 22.6 绘制图像与用图表描绘数据 22.7 使用其他的图像函数 22.8 进一步学习 22.9 下一章 第23章 在PHP中使用会话控制 23.1 什么是会话控制 23.2 理解基本的会话功能 23.2.1 什么是cookie 23.2.2 通过PHP设置cookie 23.2.3 在会话中使用cookie 23.2.4 存储会话 ID 23.3 实现简单的会话 23.3.1 开始一个会话 23.3.2 注册一个会话变量 23.3.3 使用会话变量 23.3.4 注销变量与销毁会话 23.4 创建一个简单的会话例子 23.5 配置会话控制 23.6 通过会话控制实现身份验证 23.7 进一步学习 23.8 下一章 第24章 其他有用的特性 24.1 使用eval()函数对字符串求值 24.2 终止执行:die和exit 24.3 序列化变量和对象 24.4 获取PHP环境信息 24.4.1 找到所加载的PHP扩展部件 24.4.2 识别脚本所有者 24.4.3 确定脚本最近修改时间 24.5 暂时改变运行时环境 24.6 源代码加亮 24.7 在命令行中使用PHP 24.8 下一章 第五篇 创建实用的PHP和MySQL项目 第25章 在大型项目中使用PHP和MySQL 25.1 在Web开发中应用软件工程 25.2 规划和运行Web应用程序项目 25.3 重用代码 25.4 编写可维护代码 25.4.1 编码标准 25.4.2 分解代码 25.4.3 使用标准的目录结构 25.4.4 文档化和共享内部函数 25.5 实现版本控制 25.6 选择一个开发环境 25.7 项目的文档化 25.8 建立原型 25.9 将逻辑和内容分离 25.10 优化代码 25.10.1 使用简单优化 25.10.2 使用Zend产品 25.11 测试 25.12 进一步学习 25.13 下一章 第26章 调试 26.1 编程错误 26.1.1 语法错误 26.1.2 运行时错误 26.1.3 逻辑错误 26.2 使用变量帮助调试 26.3 错误报告级别 26.4 改变错误报告设置 26.5 触发自定义错误 26.6 巧妙地处理错误 26.7 下一章 第27章 建立用户身份验证机制和个性化设置 27.1 解决方案的组成 27.1.1 用户识别和个性化设置 27.1.2 保存书签 27.1.3 推荐书签 27.2 解决方案概述 27.3 实现数据库 27.4 实现基本的网站 27.5 实现用户身份验证 27.5.1 注册 27.5.2 登录 27.5.3 登出 27.5.4 修改密码 27.5.5 重设遗忘的密码 27.6 实现书签的存储和检索 27.6.1 添加书签 27.6.2 显示书签 27.6.3 删除书签 27.7 实现书签推荐 27.8 考虑可能的扩展 27.9 下一章 第28章 创建一个购物车 28.1 解决方案的组成 28.1.1 创建一个在线目录 28.1.2 在用户购买商品的时候记录购买行为 28.1.3 实现一个付款系统 28.1.4 创建一个管理界面 28.2 解决方案概述 28.3 实现数据库 28.4 实现在线目录 28.4.1 列出目录 28.4.2 列出一个目录中的所有图书 28.4.3 显示图书详细信息 28.5 实现购物车 28.5.1 使用show_cart.php脚本 28.5.2 浏览购物车 28.5.3 将物品添加到购物库 28.5.4 保存更新后的购物车 28.5.5 打印标题栏摘要 28.5.6 结账 28.6 实现付款 28.7 实现一个管理界面 28.8 扩展该项目 28.9 使用一个已有系统 28.10 下一章 第29章 创建一个基于Web的电子邮件服务系统 29.1 解决方案的组成 29.1.1 电子邮件协议:POP3和IMAP 29.1.2 PHP对POP3和IMAP的支持 29.2 解决方案概述 29.3 建立数据库 29.4 了解脚本架构 29.5 登录与登出 29.6 建立账户 29.6.1 创建一个新账户 29.6.2 修改已有账户 29.6.3 删除账户 29.7 阅读邮件 29.7.1 选择账户 29.7.2 查看邮箱内容 29.7.3 阅读邮件消息 29.7.4 查看消息标题 29.7.5 删除邮件 29.8 发送邮件 29.8.1 发送一则新消息 29.8.2 回复或转发邮件 29.9 扩展这个项目 29.10 下一章 第30章 创建一个邮件列表管理器 30.1 解决方案的组成 30.1.1 建立列表和订阅者数据库 30.1.2 上载新闻信件 30.1.3 发送带附件的邮件 30.2 解决方案概述 30.3 建立数据库 30.4 定义脚本架构 30.5 实现登录 30.5.1 新账户的创建 30.5.2 登录 30.6 用户函数的实现 30.6.1 查看列表 30.6.2 查看邮件列表信息 30.6.3 查看邮件列表存档 30.6.4 订阅与取消订阅 30.6.5 更改账户设置 30.6.6 更改密码 30.6.7 登出 30.7 管理功能的实现 30.7.1 创建新的邮件列表 30.7.2 上载新的新闻信件 30.7.3 多文件上载的处理 30.7.4 预览新闻信件 30.7.5 发送邮件 30.8 扩展这个项目 30.9 下一章 第31章 创建一个Web论坛 31.1 理解流程 31.2 解决方案的组成 31.3 解决方案概述 31.4 数据库的设计 31.5 查看文章的树型结构 31.5.1 展开和折迭 31.5.2 显示文章 31.5.3 使用treenode类 31.6 查看单个的文章 31.7 添加新文章 31.8 添加扩充 31.9 使用一个已有的系统 31.10 下一章 第32章 生成PDF格式的个性化文档 32.1 项目概述 32.1.1 评估文档格式 32.2 解决方案的组成 32.2.1 问题与回答系统 32.2.2 文档生成软件 32.3 解决方案概述 32.3.1 提问 32.3.2 给答题评分 32.3.3 生成RTF证书 32.3.4 从模板生成PDF证书 32.3.5 使用PDFlib生成PDF文档 32.3.6 使用PDFlib的一个“Hello World”程序 32.3.7 用PDFlib生成证书 32.4 处理标题的问题 32.5 扩展该项目 32.6 下一章 第33章 使用XML和SOAP来连接Web服务 33.1 项目概述:使用XML和Web服务 33.1.1 理解XML 33.1.2 理解Web服务 33.2 解决方案的组成 33.2.1 使用Amazon的Web服务接口 33.2.2 XML的解析:REST响应 33.2.3 在PHP中使用SOAP 33.2.4 缓存 33.3 解决方案概述 33.3.1 核心应用程序 33.3.2 显示特定种类的图书 33.3.3 获得一个AmazonResultSet类 33.3.4 使用REST发送和接收请求 33.3.5 使用SOAP发送和接收请求 33.3.6 缓存请求返回的数据 33.3.7 创建购物车 33.3.8 到Amazon付账 33.4 安装项目代码 33.5 扩展这个项目 33.6 进一步学习 第34 章使用Ajax构建Web 2.0应用 34.1 Ajax 是什么? 34.1.1 HTTP请求和响应 34.1. 2 DHTML和XHTML 34.1.3 级联样式单(CSS) 34.1.4 客户端编程 34.1.5 服务器端编程 34.1.6 XML和XSLT 34.2 Ajax基础 34.2.1 XMLHTTPRequest对象 34.2.2 与服务器通信 34.2.3 处理服务器响应 34.2.4 整合应用 34.3 在以前的项目添加Ajax元素 34.3.1在PHPBookmark应用中添加Ajax元素 34.4 进一步学习 34.4.1 进一步了解文档对象模型(DOM) 34.4.2 Ajax应用可用的JavaScript函数库 34.4.3 Ajax开发人员网站 第六篇 附录 附录A 安装PHP及MySQL 附录B Web资源 第1章 PHP快速入门教程 第2章 数据的存储与检索 第3章 使用数组 第4章 字符串操作与正则表达式 第5章 代码重用与函数编写 第6章 面向对象的PHP 第7章 错误和异常处理 Delphi是由Inprise公司推出的面向对象的可视化软件开发工具。Delphi 5是Delphi的最新版本。本书共分三部分、16章,主要介绍Delphi 5集成开发环境,对象Pascal语言、组件、通用编程技术、动态链接库、多线程、多媒体编程、数据库编程、网络编程和Windows API编程等。 目 录 第一部分 Delphi编程基础 第1章 Delphi集成开发环境 1 1.1 集成开发环境简介 1 1.2 集成调试器 5 1.3 开发环境的优化 6 1.3.1 自定义工具栏 6 1.3.2 编程环境设置 7 1.3.3 编辑环境设置 8 1.3.4 工程设置 8 1.4 方法与技巧 9 1.4.1 使用代码浏览器 9 1.4.2 使用代码编辑器 9 1.4.3 使用帮助系统 10 1.4.4 设置IDE桌面 11 第2章 对象Pascal语言 12 2.1 学习对象Pascal语言的一个通用 例程 12 2.2 对象Pascal语言基础 14 2.2.1 标识符 14 2.2.2 保留字和指令字 14 2.2.3 注释 15 2.2.4 数据类型 16 2.2.5 运算符 21 2.2.6 语句 24 2.2.7 过程与函数 27 2.3 对象Pascal语言的关键技术 30 2.3.1 对象和类 31 2.3.2 类的封装与继承 31 2.3.3 构造函数和析构函数 32 2.3.4 多态性 35 2.3.5 抽象类 38 2.3.6 运行时类型信息 39 2.3.7 类方法 41 2.3.8 类引用 42 2.3.9 单元文件与工程文件 43 2.4 异常处理 45 2.4.1 raise语句 45 2.4.2 try...except语句 45 2.4.3 try...finally语句 47 2.5 方法与技巧 48 2.5.1 命名规则 48 2.5.2 在编译时自由设置是否获得提示 信息 48 2.5.3 使用代码模板 49 2.5.4 使用动态多维数组 49 2.5.5 定义两个相互包含的类 50 2.5.6 获取和使用命令行参数 51 2.5.7 引用参数传递 51 第二部分 Delphi编程的核心技能 第3章 窗体和组件 53 3.1 窗体和组件 53 3.1.1 窗体 54 3.1.2 组件 56 3.1.3 在窗体中使用组件 57 3.2 文本组件 60 3.3 特殊输入组件 61 3.4 按钮及其分类组件 63 3.5 列表组件 64 3.6 分组组件 67 3.7 信息反馈组件 69 3.8 表格显示组件 70 3.9 图形显示组件 71 3.10 开发MDI应用程序 73 3.11 常用组件的用法 74 3.12 方法与技巧 84 3.12.1 窗体、组件的使用原则 84 3.12.2 使用信息对话框 85 3.12.3 使用组件的Hint属性 88 3.12.4 使用Edit组件的IME属性 89 3.12.5 将系统字体添加到ComboBox 组件中 89 3.12.6 在RichEdit组件中存取文件 90 3.12.7 设置模态对话框的返回值 90 3.12.8 使用事件处理过程中的Sender 参数 91 3.12.9 为控件生成多行提示信息 91 3.12.10 生成非矩形窗口 92 3.12.11 移动无标题栏窗口 94 3.12.12 制作动态字幕 95 3.12.13 在窗体上动态地设置背景 画面 96 3.12.14 Owner和Parent的区别 97 第4章 菜单、工具栏和状态栏 98 4.1 菜单 98 4.1.1 主菜单 99 4.1.2 鼠标右键弹出式菜单 99 4.1.3 使用菜单模板 99 4.2 工具栏 100 4.2.1 ToolBar 100 4.2.2 CoolBar 100 4.2.3 ControlBar 101 4.3 状态栏 101 4.4 方法与技巧 106 4.4.1 动态创建菜单 106 4.4.2 为菜单动态定义快捷键 108 4.4.3 动态改变菜单 108 4.4.4 定制系统菜单 109 4.4.5 制作图形菜单项 110 4.4.6 在状态栏中添加进度条等其他 组件 111 4.4.7 MDI应用程序中的菜单融合 113 4.4.8 制作可随处拖放的工具栏 116 4.4.9 将菜单项移到菜单栏的最右边 117 4.4.10 运行时控件的移动 117 第5章 键盘和鼠标 119 5.1 键盘事件 119 5.2 鼠标事件 120 5.2.1 常用鼠标事件 120 5.2.2 拖曳事件 120 5.3 方法与技巧 122 5.3.1 检测Shift、Alt和Ctrl键是否 按下 122 5.3.2 屏蔽系统功能键 123 5.3.3 模拟按下键盘上的某个键 124 5.3.4 限制鼠标移动的范围 124 5.3.5 自定义鼠标 125 5.3.6 设置光标闪烁的速度 126 5.3.7 不同程序间的拖曳操作 127 第6章 文件、目录和驱动器 129 6.1 文件 129 6.2 文件对话框组件 129 6.3 Win3.1相关组件 131 6.4 常用函数 131 6.4.1 文件操作常用函数 131 6.4.2 目录操作常用函数 136 6.4.3 驱动器操作常用函数 138 6.4.4 文件名操作常用函数 139 6.5 方法与技巧 145 6.5.1 获取驱动器类型信息 145 6.5.2 操作INI文件 146 6.5.3 从文件中读取超过255个字符 的行 148 6.5.4 获取文件的日期信息 149 6.5.5 检测软盘或光盘是否有变化 150 6.5.6 检测驱动器容量 151 6.5.7 拷贝整个目录 152 6.5.8 将文件删除到回收站中 153 6.5.9 检测驱动器是否就绪 153 6.5.10 获取应用程序的文件名 154 6.5.11 操作临时文件 154 第7章 打印 156 7.1 一些简单的打印输出 156 7.2 TPrinter对象和TScreen对象 156 7.3 打印操作常用函数 157 7.4 方法与技巧 164 7.4.1 获取默认打印机的信息 164 7.4.2 获取打印机队列的状态信息 165 7.4.3 打印窗体 166 第8章 多线程应用程序 167 8.1 进程与线程 167 8.2 TThread类 167 8.3 线程的同步 169 8.4 线程的优先级 170 第9章 动态链接库 176 9.1 概述 176 9.2 创建动态链接库 177 9.3 使用动态链接库 179 9.4 方法与技巧 180 9.4.1 如何调试动态链接库 180 9.4.2 在DLL中使用MessageBox代替ShowMessage 181 9.4.3 如何动态地装入DLL 181 9.4.4 如何定制不同语言版本的应用 程序 183 第三部分 Delphi高级编程技术 第10章 多媒体技术 185 10.1 多媒体 185 10.1.1 概述 185 10.1.2 多媒体应用领域 186 10.1.3 多媒体软件开发工具 187 10.2 图像格式的处理 188 10.2.1 位图 189 10.2.2 JPEG文件 191 10.3 特殊显示效果 193 10.3.1 画布 193 10.3.2 调用CopyRect 193 10.3.3 调用BitBlt 194 10.4 动画 199 10.4.1 文字动画 199 10.4.2 图像动画 200 10.5 音频、视频 206 10.6 方法与技巧 209 10.6.1 使用MessageBeep与Beep 209 10.6.2 使用PlaySound 210 10.6.3 使用mciSendString 211 第11章 关系数据库 215 11.1 关系数据库 215 11.1.1 关键字 215 11.1.2 表之间的约束 215 11.1.3 结构化查询语言(SQL) 216 11.2 Delphi提供的数据库辅助工具 218 11.2.1 使用SQL Explorer 218 11.2.2 使用Database Desktop 218 11.2.3 使用BDE Administrator 220 11.3 数据库组件 221 11.3.1 TTable 221 11.3.2 TQuery 225 11.3.3 表的连接 227 11.3.4 计算字段 229 11.3.5 查找字段 230 11.3.6 网格 231 11.4 查询记录 232 11.4.1 GotoKey 232 11.4.2 FindKey 233 11.4.3 模糊查询 233 11.4.4 Locate 234 11.5 修改记录 234 11.6 插入和删除记录 235 11.7 数据模块 237 11.8 数据字典查看器 238 11.9 事务 240 11.10 处理数据库异常 244 第12章 InterBase服务器 248 12.1 客户/服务器的概念 248 12.1.1 客户 248 12.1.2 InterBase 客户例程库 248 12.1.3 InterBase服务器 248 12.1.4 Borland数据库引擎 248 12.2 数据库的管理和维护 249 12.2.1 创建数据库 249 12.2.2 创建表 250 12.2.3 数据库安全 250 12.2.4 备份与恢复 251 12.3 服务器端程序 252 12.3.1 存储过程 252 12.3.2 触发器 252 12.4 本地缓存 253 第13章 Web与数据库 260 13.1 CGI的工作原理 260 13.2 Delphi对CGI的支持 260 13.3 创建Web应用程序 261 13.4 表单 262 13.5 把信息保存到数据库 264 13.6 查找记录 266 第14章 COM 270 14.1 在DLL中实现对象 270 14.2 接口 274 14.2.1 对象的生存期 277 14.2.2 IUnknown 279 14.2.3 全局唯一标志符(GUID) 281 14.2.4 注册表 281 14.2.5 多个接口问题 281 14.2.6 Variant类型 284 14.2.7 TComObject 289 14.2.8 TTypedComObject 295 14.3 OLE自动化 307 14.3.1 创建OLE自动化服务器 307 14.3.2 建立OLE客户程序 314 14.3.3 访问自动化服务器的方法 316 14.3.4 使用Word 316 14.4 复合文档 319 第15章 分布式程序设计 329 15.1 CORBA结构 329 15.1.1 CORBA在数据库的应用 335 15.1.2 远程访问 341 15.1.3 OSFind 341 15.2 远程数据集 342 15.2.1 基础 342 15.2.2 扩展服务器 346 15.2.3 参数传递 353 15.2.4 主从约束 355 15.2.5 离线处理 358 15.2.6 ActiveForm 361 15.3 插口Socket 362 15.3.1 插口的使用 362 15.3.2 使用插口的一个例子 363 15.3.3 TNMUDP组件 369 第16章 其他编程技术 374 16.1 使用剪贴板 374 16.1.1 组件对剪贴板操作的支持 374 16.1.2 使用剪贴板类 375 16.1.3 操作图形 378 16.1.4 操作组件 379 16.1.5 操作定制格式的数据 379 16.2 动态数据交换(DDE) 381 16.3 操作注册表 385 16.3.1 TRegistry类 387 16.3.2 与注册表相关的API函数 390 16.4 帮助系统的制作 395 16.4.1 RTF文件 395 16.4.2 HPJ文件与HLP文件 398 16.4.3 启动帮助 402 16.5 安装与卸载 403 16.6 方法与技巧 404 16.6.1 获取Windows版本信息 404 16.6.2 获取系统的度量信息和相关 配置信息 405 16.6.3 获取CPU信息 407 16.6.4 获取内存信息 408 16.6.5 存取系统的颜色信息 409 16.6.6 获取Windows及系统路径 409 16.6.7 存取计算机名称 410 16.6.8 获取用户注册信息 411 16.6.9 关闭Windows 411 16.6.10 启动控制面板 412 16.6.11 启动屏幕保护 415 16.6.12 使窗体标题栏闪烁 415 16.6.13 使窗口背景颜色渐变 416 16.6.14 隐藏/显示桌面上的图标 416 16.6.15 获取窗口标题栏中的文字 417 16.6.16 制作软件封面 418 16.6.17 隐藏/显示Windows任务栏 420 16.6.18 使应用程序不出现在Windows 的任务栏上 420 16.6.19 状态栏编程 421 16.6.20 存取系统参数信息 426 16.6.21 Windows启动时运行程序 427 16.6.22 为程序在启动菜单中创建 快捷方式 428 16.6.23 在程序中运行其他程序 429 16.6.24 同时只运行程序的一个实例 429 16.6.25 关闭运行的其他应用程序 431 16.6.26 显示旋转字体 432 上一篇博客介绍了以WCF的方式,在后端程序部署WEB接口,本篇介绍以WebApi的方式以后端程序为宿主部署WEB接口,依旧以本人实际开发的项目进行说明,直接进入正题。 材料:VS2015,框架:.NET FrameWork 4.5.2,接口调试工具:PostMan,数据传输格式:Json。 本人的项目程序是Windows服务程序,各位自测的时候可以新建一个控制台程序,是一样的哈。 下图为本人的项目文件类库:(供参考) 下图为项目需要使用的引用文件,除了Lx.CSharp.Common(这个是个人 1.使用.net Framework 4.5实现的webApi接口。 2. http get 请求,json格式返回 。 3.请求格式为:http://192.168.10.100/ParkApi/Index 4.返回格式为:{"code":1,"msg":"success"} 上一篇文章我们了解了WebAPI的搭建以及方法的调用传参,本篇文章主要教大家如何进行接口调试。1.首先下载postman安装包,下载地址:(在我的资源里 暂时没有审核通过 通过了改链接 要是一直不通过你们就到官网去下一个吧~)2.安装完成以后的界面是这个样子的:3.根据上一篇文章中的两个测试方法,我们在这里输入url以及参数,首先是Get请求的:4.点击send,我们看到请求成功并得出结果:5.接... 安装成功,就看到就看看自己引用中是否存在Newtonsoft.Json,没有就手动添加到引用中吧。优先封装HttpClient.cs,用于发送http请求,类似于axios,ajax等等。自己创建一个HttpClient.cs,将以下代码拷贝进去即可,无需依赖。将一个json的字符串数据发送到接口中,发送post请求。这里依赖于Newtonsoft.Json,需要去安装。,你可以根据自己的需求的不同进行封装。右键项目-》管理NuGet程序包。这里需要先定义一个数据模型。注意,这里的请求类型为。