当前位置:首页 » 操作系统 » 微秒购源码

微秒购源码

发布时间: 2022-11-21 14:15:44

php和MysqlWeb开发的目录

读者反馈
译者序
前言
作者简介
第一篇使用PHP
第1章PHP快速入门教程1
1.1开始之前:了解PHP
1.2创建一个示例应用:Bob汽车零部件商店2
1.2.1创建订单表单2
1.2.2表单处理4
1.3在HTML中嵌入PHP4
1.3.1使用PHP标记5
1.3.2PHP语句6
1.3.3空格6
1.3.4注释7
1.4添加动态内容8
1.4.1调用函数8
1.4.2使用date()函数9
1.5访问表单变量9
1.5.1简短、中等以及长风格的表单变量9
1.5.2字符串的连接11
1.5.3变量和文本12
1.6理解标识符13
1.7检查变量类型13
1.7.1PHP的数据类型
1.7.2类型强度
1.7.3类型转换
1.7.4可变变量
1.8声明和使用常量13
1.9理解变量的作用域13
1.10使用操作符16
1.10.1算术操作符17
1.10.2字符串操作符17
1.10.3赋值操作符17
1.10.4比较操作符19
1.10.5逻辑操作符20
1.10.6位操作符21
1.10.7其他操作符21
1.11计算表单总金额23
1.12理解操作符的优先级和结合性:
1.13使用可变函数25
1.13.1测试和设置变量类型26
1.13.2测试变量状态26
1.13.3变量的重解释27
1.14根据条件进行决策27
1.14.1if语句28
1.14.2代码块28
1.14.3else语句28
1.14.4elseif语句29
1.14.5switch语句30
1.14.6比较不同的条件31
1.15通过迭代实现重复动作32
1.15.1while循环33
1.15.2for和foreach循环34
1.15.3do...while循环35
1.16从控制结构或脚本中跳出35
1.17使用可替换的控制结构语法36
1.18使用declare36
1.19下一章37
第2章数据的存储与检索38
2.1保存数据以便后期使用38
2.2存储和检索Bob的订单38
2.3文件处理39
2.4打开文件40
2.4.1选择文件模式40
2.4.2使用fopen()打开文件40
2.4.3通过FTP或HTTP打开文件42
2.4.4解决打开文件时可能遇到的问题42
2.5写文件44
2.5.1fwrite()的参数44
2.5.2文件格式45
2.6关闭文件45
2.7读文件47
2.7.1以只读模式打开文件:fopen()48
2.7.2知道何时读完文件:feof()48
2.7.3每次读取一行数据:fgets()、fgetss()和fgetcsv()49
2.7.4读取整个文件:readfile()、fpassthru()和file()49
2.7.5读取一个字符:fgetc()50
2.7.6读取任意长度:fread()51
2.8使用其他有用的文件函数51
2.8.1查看文件是否存在:file_exists()51
2.8.2确定文件大小:filesize()51
2.8.3删除一个文件:unlink()51
2.8.4在文件中定位:rewind()、fseek()和ftell()52
2.9文件锁定52
2.10更好的方式:数据库管理系统53
2.10.1使用普通文件的几个问题54
2.10.2RDBMS是如何解决这些问题的54
2.11进一步学习54
2.12下一章55
第3章使用数组56
3.1什么是数组56
3.2数字索引数组57
3.2.1数字索引数组的初始化57
3.2.2访问数组的内容57
3.2.3使用循环访问数组58
3.3使用不同索引的数组59
3.3.1初始化相关数组59
3.3.2访问数组元素59
3.3.3使用循环语句59
3.4数组操作符60
3.5多维数组61
3.6数组排序64
3.6.1使用sort()函数64
3.6.2使用asort()函数和ksort()函数对相关数组排序64
3.6.3反向排序65
3.7多维数组的排序65
3.7.1用户定义排序65
3.7.2反向用户排序66
3.8对数组进行重新排序67
3.8.1使用shuffle()函数67
3.8.2使用array_reverse()函数68
3.9从文件载入数组69
3.10执行其他的数组操作71
3.10.1在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev()71
3.10.2对数组的每一个元素应用任何函数:array_walk()72
3.10.3统计数组元素个数:count()、sizeof()和array_count_values()73
3.10.4将数组转换成标量变量:extract()73
3.11进一步学习75
3.12下一章75
第4章字符串操作与正则表达式76
4.1创建一个示例应用程序:智能表单邮件76
4.2字符串的格式化78
4.2.1字符串的整理:chop()、ltrim()和trim()78
4.2.2格式化字符串以便显示78
4.2.3格式化字符串以便存储:addslashes()和stripslashes()81
4.3用字符串函数连接和分割字符串82
4.3.1使用函数explode()、implode()和join()82
4.3.2使用strtok()函数83
4.3.3使用substr()函数83
4.4字符串的比较84
4.4.1字符串的排序:strcmp()、strcasecmp()和strnatcmp()84
4.4.2使用strlen()函数测试字符串的长度85
4.5使用字符串函数匹配和替换子字符串85
4.5.1在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr()85
4.5.2查找子字符串的位置:strpos()、strrpos()86
4.5.3替换子字符串:str_replace()、substr_replace()87
4.6正则表达式的介绍88
4.6.1基础知识88
4.6.2字符集和类88
4.6.3重复89
4.6.4子表达式89
4.6.5子表达式计数90
4.6.6定位到字符串的开始或末尾90
4.6.7分支90
4.6.8匹配特殊字符90
4.6.9特殊字符一览91
4.6.10在智能表单中应用91
4.7用正则表达式查找子字符串92
4.8使用正则表达式分割字符串93
4.9比较字符串函数和正则表达式函数93
4.10进一步学习93
4.11下一章93
第5章代码重用与函数编写94
5.1代码重用的好处
5.1.1成本94
5.1.2可靠性94
5.1.3一致性95
5.2使用require()和include()函数95
5.2.1文件扩展名和require()语句96
5.2.2使用require()制作Web站点的模版96
5.2.3使用auto_prepend_file和auto_append_file101
5.3在PHP中使用函数101
5.3.1调用函数101
5.3.2调用未定义的函数103
5.3.3理解字母大小写和函数名称103
5.4理解为什么要定义自己的函数103
5.5了解基本的函数结构104
5.5.1函数命名
5.6使用参数105
5.7理解作用域107
5.8参数的引用传递和值传递109
5.9使用Return关键字110
5.9.1从函数返回一个值111
5.10实现递归113
5.10.1名称空间
5.11进一步学习114
5.12下一章114
第6章面向对象的PHP115
6.1理解面向对象的概念115
6.1.1类和对象115
6.1.2多态性116
6.1.3继承117
6.2在PHP中创建类、属性和操作117
6.2.1类的结构117
6.2.2构造函数118
6.2.3析构函数118
6.3类的实例化118
6.4使用类的属性119
6.5使用private和public关键字控制访问121
6.6类操作的调用121
6.7在PHP中实现继承122
6.7.1通过继承使用private和protected访问修饰符控制可见性123
6.7.2重载124
6.7.3使用final关键字禁止继承和重载125
6.7.4理解多重继承126
6.7.5实现接口126
6.8类的设计127
6.9编写类代码128
6.10理解PHP面向对象新的高级功能135
6.10.1使用Per-Class常量135
6.10.2实现静态方法135
6.10.3检查类的类型和类型提示136
6.10.4克隆对象136
6.10.5使用抽象类137
6.10.6使用__call()重载方法137
6.10.7使用__autoload()方法138
6.10.8实现迭代器和迭代138
6.10.9将类转换成字符串140
6.10.10使用Reflection(反射)API140
6.11下一章141
第7章错误和异常处理142
7.1异常处理的概念142
7.2Exception类144
7.3用户自定义异常144
7.4Bob的汽车零部件商店应用程序的异常146
7.5异常和PHP的其他错误处理机制150
7.6进一步学习150
7.7下一章150
第二篇使用MySQL
第8章设计Web数据库151
8.1关系数据库的概念152
8.1.1表格152
8.1.2列152
8.1.3行152
8.1.4值152
8.1.5键152
8.1.6模式153
8.1.7关系153
8.2如何设计Web数据库154
8.2.1考虑要建模的实际对象154
8.2.2避免保存冗余数据154
8.2.3使用原子列值155
8.2.4选择有意义的键156
8.2.5考虑需要询问数据库的问题156
8.2.6避免多个空属性的设计156
8.2.7表格类型的总结157
8.3Web数据库架构157
8.4进一步学习158
8.5下一章158
第9章创建Web数据库159
9.1使用MySQL监视程序160
9.2登录到MySQL160
9.3创建数据库和用户161
9.4设置用户与权限162
9.5MySQL权限系统的介绍162
9.5.1最少权限原则162
9.5.2创建用户:GRANT命令162
9.5.3权限的类型和级别163
9.5.4REVOKE命令165
9.5.5使用GRANT和REVOKE的例子165
9.6创建一个Web用户166
9.7使用正确的数据库166
9.8创建数据库表167
9.8.1理解其他关键字的意思168
9.8.2理解列的类型169
9.8.3用SHOW和DESCRIBE来查看数据库170
9.8.4创建索引171
9.9理解MySQL的标识符171
9.10选择列数据类型172
9.10.1数字类型173
9.10.2日期和时间类型174
9.10.3字符串类型174
9.11进一步学习176
9.12下一章176
第10章使用MySQL数据库177
10.1SQL是什么177
10.2在数据库中插入数据177
10.3从数据库中获取数据179
10.3.1获取满足特定条件的数据181
10.3.2从多个表中获取数据182
10.3.3以特定的顺序获取数据186
10.3.4分组与合计数据186
10.3.5选择要返回的行188
10.3.6使用子查询188
10.4更新数据库记录190
10.5创建后修改表191
10.6删除数据库中的记录193
10.7表的删除193
10.8删除整个数据库193
10.9进一步学习194
10.10下一章194
第11章使用PHP从Web访问MySQL数据库195
11.1Web数据库架构的工作原理195
11.2从Web查询数据库的基本步骤198
11.2.1检查与过滤用户输入数据198
11.2.2建立一个连接199
11.2.3选择使用的数据库200
11.2.4查询数据库200
11.2.5检索查询结果201
11.2.6从数据库断开连接202
11.3将新信息放入数据库202
11.4使用Prepared语句205
11.5使用PHP与数据库交互的其他接口206
11.5.1使用常规的数据库接口:PEARMDB2206
11.6进一步学习209
11.7下一章209
第12章MySQL高级管理210
12.1深入理解权限系统210
12.1.1user表211
12.1.2db表和host表212
12.1.3tables_priv表,columns_priv表和procs_priv表212
12.1.4访问控制:MySQL如何使用Grant表213
12.1.5更新权限:修改什么时候生效213
12.2提高MySQL数据库的安全性214
12.2.1从操作系统角度来保护MySQL214
12.2.2密码214
12.2.3用户权限215
12.2.4Web问题215
12.3获取更多关于数据库的信息216
12.3.1使用SHOW获取信息216
12.3.2使用DESCRIBE获取关于列的信息218
12.3.3用EXPLAIN理解查询操作的工作过程218
12.4数据库的优化221
12.4.1设计优化222
12.4.2权限222
12.4.3表的优化222
12.4.4使用索引222
12.4.5使用默认值222
12.4.6其他技巧222
12.5备份MySQL数据库222
12.6恢复MySQL数据库223
12.7实现复制223
12.7.1设置主服务器224
12.7.2执行初始的数据传输224
12.7.3设置一个/多个从服务器225
12.8进一步学习225
12.9下一章225
第13章MySQL高级编程226
13.1LOADDATAINFILE语句226
13.2存储引擎226
13.3事务227
13.3.1理解事务的定义227
13.3.2通过InnoDB使用事务228
13.4外键229
13.5存储过程230
13.5.1基本示例230
13.5.2局部变量232
13.5.3游标和控制结构233
13.6进一步学习236
13.7下一章236
第三篇电子商务与安全性
第14章运营一个电子商务网站237
14.1我们要实现什么目标237
14.2考虑电子商务网站的类型237
14.2.1使用在线说明书公布信息238
14.2.2接收产品或服务的订单240
14.2.3提供服务和数字产品243
14.2.4为产品或服务增值243
14.2.5减少成本243
14.3理解风险和威胁244
14.3.1网络黑客244
14.3.2不能招揽足够的生意245
14.3.3计算机硬件故障245
14.3.4电力、通信、网络或运输故障245
14.3.5广泛的竞争245
14.3.6软件错误245
14.3.7不断变化的政府政策和税收246
14.3.8系统容量限制246
14.4选择一个策略246
14.5下一章246
第15章电子商务的安全问题247
15.1信息的重要程度247
15.2安全威胁248
15.2.1机密数据的泄露248
15.2.2数据丢失和数据破坏249
15.2.3数据修改250
15.2.4拒绝服务251
15.2.5软件错误251
15.2.6否认252
15.3易用性,性能、成本和安全性253
15.4建立一个安全政策253
15.5身份验证原则254
15.6加密技术基础255
15.6.1私有密钥加密256
15.6.2公有密钥加密256
15.6.3数字签名256
15.7数字证书257
15.8安全的Web服务器258
15.9审计与日志记录259
15.10防火墙259
15.11备份数据259
15.11.1备份常规文件260
15.11.2备份与恢复MySQL数据库260
15.12自然环境安全260
15.13下一章261
第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.5Web服务器和PHP的安全性
16.5.1保持软件的更新
16.5.2查看php.ini文件
16.5.3Web服务器配置
16.5.4Web应用的商业主机服务
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实现身份验证262
17.1识别访问者262
17.2实现访问控制263
17.2.1保存密码265
17.2.2密码的加密267
17.2.3保护多个网页268
17.3使用基本身份验证269
17.4在PHP中使用基本身份验证270
17.5在Apache的.htaccess文件中使用基本身份验证271
17.6使用mod_auth_mysql身份验证276
17.6.1安装mod_auth_mysql276
17.6.2使用mod_auth_mysql277
17.7创建自定义身份验证277
17.8进一步学习278
17.9下一章278
第18章使用PHP和MySQL实现安全事务279
18.1提供安全的事务处理279
18.1.1用户机器280
18.1.2Internet281
18.1.3我们的系统281
18.2使用加密套接字层(SSL)282
18.3屏蔽用户的输入284
18.4提供安全存储284
18.5存储信用卡号码285
18.6在PHP中使用加密技术286
18.6.1安装GPG286
18.6.2测试GPG288
18.7进一步学习293
18.8下一章293
第四篇PHP的高级技术
第19章与文件系统和服务器的交互295
19.1文件上载295
19.1.1文件上载的HTML代码296
19.1.2编写处理文件的PHP297
19.1.3避免常见上载问题300
19.2使用目录函数300
19.2.1从目录读取300
19.2.2获得当前目录的信息302
19.2.3创建和删除目录302
19.3与文件系统的交互302
19.3.1获取文件信息302
19.3.2更改文件属性304
19.3.3创建、删除和移动文件305
19.4使用程序执行函数305
19.5与环境变量交互:getenv()和putenv()308
19.6进一步学习308
19.7下一章308
第20章使用网络函数和协议函数309
20.1了解可供使用的协议309
20.2发送和读取电子邮件309
20.3使用其他Web站点的数据310
20.4使用网络查找函数312
20.5备份或镜像一个文件
20.5.1使用FTP备份或镜像一个文件316
20.5.2上传文件321
20.5.3避免超时321
20.5.4使用其他的FTP函数322
20.6进一步学习322
20.7下一章323
第21章日期和时间的管理324
21.1在PHP中获取日期和时间324
21.1.1使用date()函数324
21.1.2使用UNⅨ时间戳325
21.1.3使用getdate()函数326
21.1.4使用checkdate()函数检验日期有效性327
21.1.5格式化时间戳
21.2在PHP日期格式和MySQL日期格式之间进行转换327
21.3在PHP中计算日期329
21.4在MySQL中计算日期329
21.5使用微秒331
21.6使用日历函数331
21.7进一步学习332
21.8下一章332
第22章创建图像333
22.1在PHP中设置图像支持333
22.2理解图像格式334
22.2.1JPEG334
22.2.2PNG334
22.2.3WBMP335
22.2.4GIF335
22.3创建图像335
22.3.1创建一个背景图像336
22.3.2在图像上绘图或打印文本337
22.3.3输出最终图形338
22.3.4清理339
22.4在其他页面中使用自动生成的图像339
22.5使用文本和字体创建图像339
22.5.1创建基本画布342
22.5.2将文本调整到适合按钮342
22.5.3放置文本345
22.5.4将文本写到按钮上345
22.5.5完成345
22.6绘制图像与用图表描绘数据346
22.7使用其他的图像函数352
22.8进一步学习352
22.9下一章353
第23章在PHP中使用会话控制354
23.1什么是会话控制354
23.2理解基本的会话功能354
23.2.1什么是cookie354
23.2.2通过PHP设置cookie355
23.2.3在会话中使用cookie355
23.2.4存储会话ID356
23.3实现简单的会话356
23.3.1开始一个会话356
23.3.2注册一个会话变量356
23.3.3使用会话变量357
23.3.4注销变量与销毁会话357
23.4创建一个简单的会话例子357
23.5配置会话控制359
23.6通过会话控制实现身份验证360
23.7进一步学习365
23.8下一章365
第24章其他有用的特性366
24.1使用eval()函数对字符串求值367
24.2终止执行:die和exit367
24.3序列化变量和对象368
24.4获取PHP环境信息369
24.4.1找到所加载的PHP扩展部件369
24.4.2识别脚本所有者370
24.4.3确定脚本最近修改时间370
24.5暂时改变运行时环境370
24.6源代码加亮371
24.7在命令行中使用PHP372
24.8下一章372
第五篇创建实用的PHP和MySQL项目
第25章在大型项目中使用PHP和MySQL373
25.1在Web开发中应用软件工程374
25.2规划和运行Web应用程序项目374
25.3重用代码375
25.4编写可维护代码375
25.4.1编码标准375
25.4.2分解代码378
25.4.3使用标准的目录结构378
25.4.4文档化和共享内部函数378
25.5实现版本控制379
25.6选择一个开发环境380
25.7项目的文档化380
25.8建立原型381
25.9将逻辑和内容分离381
25.10优化代码382
25.10.1使用简单优化382
25.10.2使用Zend产品382
25.11测试383
25.12进一步学习383
25.13下一章384
第26章调试385
26.1编程错误385
26.1.1语法错误385
26.1.2运行时错误386
26.1.3逻辑错误391
26.2使用变量帮助调试392
26.3错误报告级别393
26.4改变错误报告设置394
26.5触发自定义错误395
26.6巧妙地处理错误396
26.7下一章398
第27章建立用户身份验证机制和个性化设置399
27.1解决方案的组成399
27.1.1用户识别和个性化设置399
27.1.2保存书签400
27.1.3推荐书签400
27.2解决方案概述400
27.3实现数据库402
27.4实现基本的网站403
27.5实现用户身份验证405
27.5.1注册405
27.5.2登录410
27.5.3登出413
27.5.4修改密码414
27.5.5重设遗忘的密码416
27.6实现书签的存储和检索420
27.6.1添加书签420
27.6.2显示书签422
27.6.3删除书签422
27.7实现书签推荐424
27.8考虑可能的扩展427
27.9下一章427
第28章创建一个购物车428
28.1解决方案的组成428
28.1.1创建一个在线目录428
28.1.2在用户购买商品的时候记录购买行为429
28.1.3实现一个付款系统429
28.1.4创建一个管理界面429
28.2解决方案概述429
28.3实现数据库432
28.4实现在线目录434
28.4.1列出目录434
28.4.2列出一个目录中的所有图书437
28.4.3显示图书详细信息438
28.5实现购物车440
28.5.1使用show_cart.php脚本440
28.5.2浏览购物车442
28.5.3将物品添加到购物库444
28.5.4保存更新后的购物车446
28.5.5打印标题栏摘要447
28.5.6结账447
28.6实现付款452
28.7实现一个管理界面454
28.8扩展该项目460
28.9使用一个已有系统461
28.10下一章461
第29章创建一个基于Web的电子邮件服务系统486
29.1解决方案的组成486
29.1.1电子邮件协议:POP3和IMAP
29.1.2PHP对POP3和IMAP的支持
29.2解决方案概述488
29.3建立数据库489
29.4了解脚本架构490
29.5登录与登出495
29.6建立账户498
29.6.1创建一个新账户499
29.6.2修改已有账户501
29.6.3删除账户501
29.7阅读邮件502
29.7.1选择账户502
29.7.2查看邮箱内容504
29.7.3阅读邮件消息507
29.7.4查看消息标题509
29.7.5删除邮件509
29.8发送邮件510
29.8.1发送一则新消息510
29.8.2回复或转发邮件512
29.9扩展这个项目514
29.10下一章514
第30章创建一个邮件列表管理器515
30.1解决方案的组成515
30.1.1建立列表和订阅者数据库516
30.1.2上载新闻信件516
30.1.3发送带附件的邮件516
30.2解决方案概述516
30.3建立数据库518
30.4定义脚本架构520
30.5实现登录526
30.5.1新账户的创建527
30.5.2登录529
30.6用户函数的实现531
30.6.1查看列表531
30.6.2查看邮件列表信息535
30.6.3查看邮件列表存档536
30.6.4订阅与取消订阅538
30.6.5更改账户设置539
30.6.6更改密码539
30.6.7登出540
30.7管理功能的实现541
30.7.1创建新的邮件列表541
30.7.2上载新的新闻信件543
30.7.3多文件上载的处理545
30.7.4预览新闻信件549
30.7.5发送邮件550
30.8扩展这个项目555
30.9下一章555
第31章创建一个Web论坛556
31.1理解流程
31.2解决方案的组成556
31.3解决方案概述557
31.4数据库的设计558
31.5查看文章的树型结构560
31.5.1展开和折叠561
31.5.2显示文章564
31.5.3使用treenode类564
31.6查看单个的文章570
31.7添加新文章572
31.8添加扩充578
31.9使用一个已有的系统578
31.10下一章578
第32章生成PDF格式的个性化文档579
32.1项目概述
32.1.1评估文档格式579
32.2解决方案的组成582
32.2.1问题与回答系统583
32.2.2文档生成软件583
32.3解决方案概述585
32.3.1提问585
32.3.2给答题评分587
32.3.3生成RTF证书589
32.3.4从模板生成PDF证书591
32.3.5使用PDFlib生成PDF文档595
32.3.6使用PDFlib的一个“HelloWorld”程序595
32.3.7用PDFlib生成证书598
32.4处理标题的问题605
32.5扩展该项目605
32.6下一章606
第33章使用XML和SOAP来连接Web服务607
33.1项目概述:使用XML和Web服务
33.1.1理解XML
33.1.2理解Web服务611
33.2解决方案的组成612
33.2.1使用Amazon的Web服务接口613
33.2.2XML的解析:REST响应
33.2.3在PHP中使用SOAP614
33.2.4缓存614
33.3解决方案概述614
33.3.1核心应用程序618
33.3.2显示特定种类的图书623
33.3.3获得一个AmazonResultSet类624
33.3.4使用REST发送和接收请求
33.3.5使用SOAP发送和接收请求
33.3.6缓存请求返回的数据636
33.3.7创建购物车639
33.3.8到Amazon付账642
33.4安装项目代码642
33.5扩展这个项目643
33.6进一步学习643
第34章使用Ajax构建Web2.0应用
34.1Ajax是什么?
34.1.1HTTP请求和响应
34.1.2DHTML和XHTML
34.1.3级联样式单(CSS)
34.1.4客户端编程
34.1.5服务器端编程
34.1.6XML和XSLT
34.2Ajax基础
34.2.1XMLHTTPRequest对象
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.2Ajax应用可用的JavaScript函数库
34.4.3Ajax开发人员网站
第六篇附录
附录A安装PHP及MySQL645
附录BWeb资源664
第1章PHP快速入门教程
第2章数据的存储与检索
第3章使用数组
第4章字符串操作与正则表达式
第5章代码重用与函数编写
第6章面向对象的PHP
第7章错误和异常处理
……

㈡ 求一个毫秒级计时器,最好微秒级的,c/c++源代码

毫秒级好像不好做啊,我以前做过,好像不是那么简单的,我只能做个秒级的

㈢ 什么是嵌入式搞嵌入式是不是等于写代码

随着信息化技术的发展和数字化产品的普及,以计算机技术、芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用的热点,通信、计算机、消费电子技术(3C)合一的趋势正在逐步形成,无所不在的网络和无所不在的计算(everything connecting, everywhere computing)正在将人类带入一个崭新的信息社会。一、嵌入式系统 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统最典型的特点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各类形形色色运用了嵌入式技术的电子产品,小到MP3、PDA等微型数字化设备,大到信息家电、智能电器、车载GIS,各种新型嵌入式设备在数量上已经远远超过了通用计算机。这也难怪美国着名未来学家尼葛洛庞帝在1999年1月访华时就预言,4~5年后嵌入式智能工具将成为继PC机和Internet之后计算机工业最伟大的发明。 1.1 历史与现状 虽然嵌入式系统是近几年才开始真正风靡起来的,但事实上嵌入式这个概念却很早就已经存在了,从上个世纪70年代单片机的出现到今天各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统少说也有了近30年的历史。纵观嵌入式系统的发展历程,大致经历了以下四个阶段: 无操作系统阶段 嵌入式系统最初的应用是基于单片机的,大多以可编程控制器的形式出现,具有监测、伺服、设备指示等功能,通常应用于各类工业控制和飞机、导弹等武器装备中,一般没有操作系统的支持,只能通过汇编语言对系统进行直接控制,运行结束后再清除内存。这些装置虽然已经初步具备了嵌入式的应用特点,但仅仅只是使用8位的CPU芯片来执行一些单线程的程序,因此严格地说还谈不上"系统"的概念。 这一阶段嵌入式系统的主要特点是:系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。由于这种嵌入式系统使用简便、价格低廉,因而曾经在工业控制领域中得到了非常广泛的应用,但却无法满足现今对执行效率、存储容量都有较高要求的信息家电等场合的需要。 简单操作系统阶段 20世纪80年代,随着微电子工艺水平的提高,IC制造商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM等部件统统集成到一片VLSI中,制造出面向I/O设计的微控制器,并一举成为嵌入式系统领域中异军突起的新秀。与此同时,嵌入式系统的程序员也开始基于一些简单的"操作系统"开发嵌入式应用软件,大大缩短了开发周期、提高了开发效率。 这一阶段嵌入式系统的主要特点是:出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),各种简单的嵌入式操作系统开始出现并得到迅速发展。此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,主要用来控制系统负载以及监控应用程序的运行。 实时操作系统阶段 20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高精度、低功耗的方向发展。随着硬件实时性要求的提高,嵌入式系统的软件规模也不断扩大,逐渐形成了实时多任务操作系统(RTOS),并开始成为嵌入式系统的主流。 这一阶段嵌入式系统的主要特点是:操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。此时的嵌入式操作系统已经具备了文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),从而使得应用软件的开发变得更加简单。 面向Internet阶段 21世纪无疑将是一个网络的时代,将嵌入式系统应用到各种网络环境中去的呼声自然也越来越高。目前大多数嵌入式系统还孤立于Internet之外,随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来。 信息时代和数字时代的到来,为嵌入式系统的发展带来了巨大的机遇,同时也对嵌入式系统厂商提出了新的挑战。目前,嵌入式技术与Internet技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用产生了如下新的显着变化: 新的微处理器层出不穷,嵌入式操作系统自身结构的设计更加便于移植,能够在短时间内支持更多的微处理器。 嵌入式系统的开发成了一项系统工程,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。 通用计算机上使用的新技术、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等,嵌入式软件平台得到进一步完善。 各类嵌入式linux操作系统迅速发展,由于具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,很适合信息家电等嵌入式系统的需要,目前已经形成了能与Windows CE、Palm OS等嵌入式操作系统进行有力竞争的局面。 网络化、信息化的要求随着Internet技术的成熟和带宽的提高而日益突出,以往功能单一的设备如电话、手机、冰箱、微波炉等功能不再单一,结构变得更加复杂,网络互联成为必然趋势。 精简系统内核,优化关键算法,降低功耗和软硬件成本。 提供更加友好的多媒体人机交互界面。 1.2 体系结构 根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是"控制、监视或者辅助设备、机器和车间运行的装置"(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。一般而言,整个嵌入式系统的体系结构可以分成四个部分:嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件,如图1所示。 图1 嵌入式系统的组成 嵌入式处理器 嵌入式系统的核心是各种类型的嵌入式处理器,嵌入式处理器与通用处理器最大的不同点在于,嵌入式CPU大多工作在为特定用户群所专门设计的系统中,它将通用CPU中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。 嵌入式处理器的体系结构经历了从CISC(复杂指令集)至RISC(精简指令集)和Compact RISC的转变,位数则由4位、8位、16位、32位逐步发展到64位。目前常用的嵌入式处理器可分为低端的嵌入式微控制器(Micro Controller Unit,MCU)、中高端的嵌入式微处理器(Embedded Micro Processor Unit,EMPU)、用于计算机通信领域的嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP)和高度集成的嵌入式片上系统(System On Chip,SOC)。 目前几乎每个半导体制造商都生产嵌入式处理器,并且越来越多的公司开始拥有自主的处理器设计部门,据不完全统计,全世界嵌入式处理器已经超过1000多种,流行的体系结构有30多个系列,其中以ARM、PowerPC、MC 68000、MIPS等使用得最为广泛。 嵌入式外围设备 在嵌入系统硬件系统中,除了中心控制部件(MCU、DSP、EMPU、SOC)以外,用于完成存储、通信、调试、显示等辅助功能的其他部件,事实上都可以算作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分为存储设备、通信设备和显示设备三类。 存储设备主要用于各类数据的存储,常用的有静态易失型存储器(RAM、SRAM)、动态存储器(DRAM)和非易失型存储器(ROM、EPROM、EEPROM、FLASH)三种,其中FLASH凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。 目前存在的绝大多数通信设备都可以直接在嵌入式系统中应用,包括RS-232接口(串行通信接口)、SPI(串行外围设备接口)、IrDA(红外线接口)、I2C(现场总线)、USB(通用串行总线接口)、Ethernet(以太网接口)等。 由于嵌入式应用场合的特殊性,通常使用的是阴极射线管(CRT)、液晶显示器(LCD)和触摸板(Touch Panel)等外围显示设备。 嵌入式操作系统 为了使嵌入式系统的开发更加方便和快捷,需要有专门负责管理存储器分配、中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。嵌入式操作系统是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界面(GUI)等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理复杂的系统资源,能够对硬件进行抽象,能够提供库函数、驱动程序、开发工具集等。但与通用操作系统相比较,嵌入式操作系统在系统实时性、硬件依赖性、软件固化性以及应用专用性等方面,具有更加鲜明的特点。 嵌入式操作系统根据应用场合可以分为两大类:一类是面向消费电子产品的非实时系统,这类设备包括个人数字助理(PDA)、移动电话、机顶盒(STB)等;另一类则是面向控制、通信、医疗等领域的实时操作系统,如WindRiver公司的VxWorks、QNX系统软件公司的QNX等。实时系统(Real Time System)是一种能够在指定或者确定时间内完成系统功能,并且对外部和内部事件在同步或者异步时间内能做出及时响应的系统。在实时系统中,操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关,也就是说,实时系统对逻辑和时序的要求非常严格,如果逻辑和时序控制出现偏差将会产生严重后果。 实时系统主要通过三个性能指标来衡量系统的实时性,即响应时间(Response Time)、生存时间(Survival Time)和吞吐量(Throughput): 响应时间 是实时系统从识别出一个外部事件到做出响应的时间; 生存时间 是数据的有效等待时间,数据只有在这段时间内才是有效的; 吞吐量 是在给定的时间内系统能够处理的事件总数,吞吐量通常比平均响应时间的倒数要小一点。 实时系统根据响应时间可以分为弱实时系统、一般实时系统和强实时系统三种。弱实时系统在设计时的宗旨是使各个任务运行得越快越好,但没有严格限定某一任务必须在多长时间内完成,弱实时系统更多关注的是程序运行结果的正确与否,以及系统安全性能等其他方面,对任务执行时间的要求相对来讲较为宽松,一般响应时间可以是数十秒或者更长。一般实时系统是弱实时系统和强实时系统的一种折衷,它的响应时间可以在秒的数量级上,广泛应用于消费电子设备中。强实时系统则要求各个任务不仅要保证执行过程和结果的正确性,同时还要保证在限定的时间内完成任务,响应时间通常要求在毫秒甚至微秒的数量级上,这对涉及到医疗、安全、军事的软硬件系统来说是至关重要的。 时限(deadline)是实时系统中的一个重要概念,指的是对任务截止时间的要求,根据时限对系统性能的影响程度,实时系统又可以分为软实时系统(soft real-time-system)和硬实时系统(hard real-time-system)。软实时指的是虽然对系统响应时间有所限定,但如果系统响应时间不能满足要求,并不会导致系统产生致命的错误或者崩溃;硬实时则指的是对系统响应时间有严格的限定,如果系统响应时间不能满足要求,就会引起系统产生致命的错误或者崩溃。如果一个任务在时限到达之时尚未完成,对软实时系统来说还是可以容忍的,最多只会降低系统性能,但对硬实时系统来说则是无法接受的,因为这样带来的后果根本无法预测,甚至可能是灾难性的。在目前实际运用的实时系统中,通常允许软硬两种实时性同时存在,其中一些事件没有时限要求,另外一些事件的时限要求是软实时的,而对系统产生关键影响的那些事件的时限要求则是硬实时的。 嵌入式应用软件 嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要特定嵌入式操作系统的支持。嵌入式应用软件和普通应用软件有一定的区别,它不仅要求其准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。 1.3 关键问题 嵌入式系统是将先进的计算机技术、半导体技术以及电子技术与特定行业的具体应用相结合的产物,因此必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统,嵌入式系统的开发充满了竞争、机遇与创新,需要解决好如下一些关键问题: 内核精巧 嵌入式系统的应用领域一般都是小型电子装置,系统资源相对有限,因此对内核的要求相当高,较之传统的操作系统来讲要小得多,例如ENEA公司推出的OSE分布式嵌入式系统,整个内核只有5KB。 面向应用 嵌入式系统通常是面向用户、面向产品、面向特定应用的。嵌入式系统中的CPU大多工作在为特定用户群定制的环境中,具有低耗、体积小、集成度高等特点,在进行软硬件设计时必须突出效率、去除冗余,针对用户的具体需求对系统进行合理的配置,方能达到理想的性能。 系统精简 嵌入式系统中的系统软件和应用软件通常没有明显的区别,不要求其功能及实现上过于复杂,这样一方面有利于控制系统成本,另一方面也有利于保证系统安全。 性能优化 嵌入式系统通常都要求有一定的实时性保障,为了提高执行速度和系统性能,嵌入式系统中的软件一般都固化在存储芯片或者处理器的内部存储器件当中,而不是存贮在磁盘等外部载体中。由于嵌入式系统的运算速度和存储容量存在一定程度上的限制,而且大部分系统都必须有较高的实时性保证,因此对软件质量(特别是可靠性方面)有着较高的要求。 专业开发 嵌入式系统本身并不具备自主开发能力,用户不能直接在其上进行二次开发。当系统完成之后,用户如果需要修改其中某个程序的功能,必须借助一套完整的开发工具和环境。嵌入式系统中专用的开发工具和环境通常是基于通用计算机上的软硬件设备,以及各种逻辑分析仪、混合信号示波器等。 回页首 二、嵌入式Linux Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作系统领域内也获得了飞速发展。嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。 2.1 优势 嵌入式Linux的开发和研究是操作系统领域中的一个热点,目前已经开发成功的嵌入式系统中,大约有一半使用的是Linux。Linux之所以能在嵌入式系统市场上取得如此辉煌的成果,与其自身的优良特性是分不开的。 广泛的硬件支持 Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,目前已经成功移植到数十种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。 内核高效稳定 Linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。 开放源码,软件丰富 Linux是开放源代码的自由操作系统,它为用户提供了最大限度的自由度,由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件做为原型,在其上进行二次开发。 优秀的开发工具 开发嵌入式系统的关键是需要有一套完善的开发和调试工具。传统的嵌入式开发调试工具是在线仿真器(In-Circuit Emulator,ICE),它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。在线仿真器的价格非常昂贵,而且只适合做非常底层的调试,如果使用的是嵌入式Linux,一旦软硬件能够支持正常的串口功能时,即使不用在线仿真器也可以很好地进行开发和调试工作,从而节省了一笔不小的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(Tool Chain),它利用GNU的gcc做编译器,用gdb、kgdb、xgdb做调试工具,能够很方便地实现从操作系统到应用软件各个级别的调试。 完善的网络通信和文件管理机制 Linux至诞生之日起就与Internet密不可分,支持所有标准的Internet网络协议,并且很容易移植到嵌入式系统当中。此外,Linux还支持ext2、fat16、fat32、romfs等文件系统,这些都为开发嵌入式系统应用打下了很好的基础。 2.2 挑战 目前,嵌入式Linux系统的研发热潮正在蓬勃兴起,并且占据了很大的市场份额,除了一些传统的Linux公司(如RedHat、MontaVista等)正在从事嵌入式Linux的开发和应用之外,IBM、Intel、Motorola等着名企业也开始进行嵌入式Linux的研究。虽然前景一片灿烂,但就目前而言,嵌入式Linux的研究成果与市场的真正要求仍有一段差距,要开发出真正成熟的嵌入式Linux系统,还需要从以下几个方面做出努力。 提高系统实时性 Linux虽然已经被成功地应用到了PDA、移动电话、车载电视、机顶盒、网络微波炉等各种嵌入式设备上,但在医疗、航空、交通、工业控制等对实时性要求非常严格的场合中还无法直接应用,原因在于现有的Linux是一个通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,并且符合POSIX 1003.1b标准,但从本质上来说并不是一个嵌入式实时操作系统。Linux的内核调度策略基本上是沿用UNIX系统的,将它直接应用于嵌入式实时环境会有许多缺陷,如在运行内核线程时中断被关闭,分时调度策略存在时间上的不确定性,以及缺乏高精度的计时器等等。正因如此,利用Linux作为底层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统,是现在日益流行的解决方案。 改善内核结构 Linux内核采用的是整体式结构(Monolithic),整个内核是一个单独的、非常大的程序,这样虽然能够使系统的各个部分直接沟通,有效地缩短任务之间的切换时间,提高系统响应速度,但与嵌入式系统存储容量小、资源有限的特点不相符合。嵌入式系统经常采用的是另一种称为微内核(Microkernel)的体系结构,即内核本身只提供一些最基本的操作系统功能,如任务调度、内存管理、中断处理等,而类似于文件系统和网络协议等附加功能则运行在用户空间中,并且可以根据实际需要进行取舍。Microkernel的执行效率虽然比不上Monolithic,但却大大减小了内核的体积,便于维护和移植,更能满足嵌入式系统的要求。可以考虑将Linux内核部分改造成Microkernel,使Linux在具有很高性能的同时,又能满足嵌入式系统体积小的要求。 完善集成开发平台 引入嵌入式Linux系统集成开发平台,是嵌入式Linux进一步发展和应用的内在要求。传统上的嵌入式系统都是面向具体应用场合的,软件和硬件之间必须紧密配合,但随着嵌入式系统规模的不断扩大和应用领域的不断扩展,嵌入式操作系统的出现就成了一种必然,因为只有这样才能促成嵌入式系统朝层次化和模块化的方向发展。很显然,嵌入式集成开发平台也是符合上述发展趋势的,一个优秀的嵌入式集成开发环境能够提供比较完备的仿真功能,可以实现嵌入式应用软件和嵌入式硬件的同步开发,从而摆脱了"嵌入式应用软件的开发依赖于嵌入式硬件的开发,并且以嵌入式硬件的开发为前提"的不利局面。一个完整的嵌入式集成开发平台通常包括编译器、连接器、调试器、跟踪器、优化器和集成用户界面,目前Linux在基于图形界面的特定系统定制平台的研究上,与Windows CE等商业嵌入式操作系统相比还有很大差距,整体集成开发环境有待提高和完善。 回页首 三、关键技术 嵌入式系统是一种根据特定用途所专门开发的系统,它只完成预期要完成的功能,因此其开发过程和开发环境同传统的软件开发相比有着显着的不同。 3.1 开发流程 在嵌入式系统的应用开发中,整个系统的开发过程如图2所示: 图2 嵌入式系统的开发流程 嵌入式系统发展到今天,对应于各种微处理器的硬件平台一般都是通用的、固定的、成熟的,这就大大减少了由硬件系统引入错误的机会。此外,由于嵌入式操作系统屏蔽了底层硬件的复杂性,使得开发者通过操作系统提供的API函数就可以完成大部分工作,因此大大简化了开发过程,提高了系统的稳定性。嵌入式系统的开发者现在已经从反复进行硬件平台设计的过程中解脱出来,从而可以将主要精力放在满足特定的需求上。 嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。 需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个显着特点,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,如图3所示。 图3 交叉开发环境 宿主机(Host)是一台通用计算机(如PC机或者工作站),它通过串口或者以太网接口与目标机通信。宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如Windows和Linux),而且还有各种各样优秀的开发工具(如WindRiver的Tornado、Microsoft的Embedded Visual C++等),能够大大提高嵌入式应用软件的开发速度和效率。 目标机(Target)一般在嵌入式应用软件开发期间使用,用来区别与嵌入式系统通信的宿主机,它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统,但软硬件资源通常都比较有限。嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或者以网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行。 建立交叉开发环境是进行嵌入式软件开发的第一步,目前常用的交叉开发环境主要有开放和商业两种类型。开放的交叉开发环境的典型代表是GNU工具链、目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。 3.2 交叉编译和链接 在完成嵌入式软件的编码之后,需要进行编译和链接以生成可执行代码,由于开发过程大多是在使用Intel公司x86系列CPU的通用计算机上进行的,而目标环境的处理器芯片却大多为ARM、MIPS、PowerPC、DragonBall等系列的微处理器,这就要求在建立好的交叉开发环境中进行交叉编译和链接。 交叉编译器和交叉链接器是能够在宿主机上运行,并且能够生成在目标机上直接运行的二进制代码的编译器和链接器。例如在基于ARM体系结构的gcc交叉开发环境中,arm-linux-gcc是交叉编译器,arm-linux-ld是交叉链接器。通常情况下,并不是每一种体系结构的嵌入式微处理器都只对应于一种交叉编译器和交叉链接器,比如对于M68K体系结构的gcc交叉开发环境而言,就对应于多种不同的编译器和链接器。如果使用的是COFF格式的可执行文件,那么在编译Linux内核时需要使用m68k-coff-gcc和m68k-coff-ld,而在编译应用程序时则需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。 嵌入式系统在链接过程中通常都要求使用较小的函数库,以便最后产生的可执行代码能够尽可能地小,因此实际运用时一般使用经过特殊处理的函数库。对于嵌入式Linux系统来讲,功能越来越强、体积越来越大的c语言函数库glibc和数学函数库libm已经很难满足实际的需要,因此需要采用它们的精化版本uClibc、uClibm和newlib等。 目前嵌入式的集成开发环境都支持交叉编译和交叉链接,如WindRiver Tornado和GNU工具链等,编写好的嵌入式软件经过交叉编译和交叉链接后通常会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件。 3.3 交叉调试 嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调 ~

㈣ 深圳市微秒电子有限公司怎么样

深圳市微秒电子有限公司是2017-06-15在广东省深圳市罗湖区注册成立的有限责任公司,注册地址位于深圳市罗湖区东门街道花场社区人民北路3092号物资大厦716。

深圳市微秒电子有限公司的统一社会信用代码/注册号是91440300MA5EKHCW2R,企业法人罗保进,目前企业处于开业状态。

深圳市微秒电子有限公司的经营范围是:一般经营项目是:电子产品、五金产品的批发、研发与销售;国内贸易,从事货物及技术的进出口业务(企业经营涉及前置性行政许可的,须取得前置性行政许可文件后方可经营)。(企业经营涉及前置性行政许可的,须取得前置性行政许可文件后方可经营),许可经营项目是:电子产品、五金产品的生产;医用口罩(含原材料)、医用一次性手套、测温仪、消毒液、生活酒精、防护服、二类医疗器械的研发及购销。

深圳市微秒电子有限公司对外投资1家公司,具有0处分支机构。

通过爱企查查看深圳市微秒电子有限公司更多信息和资讯。

㈤ ps是皮秒,比纳秒还小的时间单位,OK

皮秒是比纳秒还小的单位。

1s=1000ms=1000000微秒=1000000000纳秒=1000000000000皮秒=10^15飞秒=10^18啊秒=10^21仄秒=10^24幺秒

1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)

(5)微秒购源码扩展阅读

相关微小时间单位:

1、飞秒(femtosecond)也叫毫微微秒,即10的负15次秒,简称fs。是标衡时间长短的一种计量单位。1飞秒只有1秒的一千万亿分之一,即1e−15秒或0.001皮秒(1皮秒是,1e−12秒)。即使是每秒飞行30万千米的光速,在一飞秒内,也只能走0.3微米,不到一根头发丝的百分之一。

2、幺秒(yoctosecond),即10的负24次秒,简称ys。0.3ys是W及Z玻色子的寿命,23ys是氢的同位素的半衰期。

3、阿秒(attosecond),又名阿托秒、渺秒和微微微秒,相当于10的负18次秒,简称as。是可测量的最短时间,中性π介子的寿命。如果宇宙的年龄几百亿年,那么10的负18次相当于其中的1秒。科学家是用阿秒来对瞬时事件进行计时的。

㈥ 哪位大神有单片机C语言程序设计实训100例综合设计中的用1602LCD与DS18B20设计的温度报警器的源代码啊

/*******************************************
文件:DS18B20.C
环境:编译为ICC AVR6.31A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2008年8月8日

/******************************************/
#include //包含型号头文件
#include //包含"位"操作头文件
#include //标准输入输出头文件
#include //包含自定义常量头文件
#include "SMG.C" //包含数码管显示函数

/*******************************************
函数名称: B20_init
功 能: 复位DS18B20
参 数: 无
返回值 : 无
/********************************************/
void B20_init(void)
{
DDRA|=BIT(DS18B20); //配置为输出
PORTA&=~BIT(DS18B20); //拉低
Delayus(600); //等待600微秒
PORTA|=BIT(DS18B20); //释放总线
Delayus(60); //等待60微秒
DDRA&=~BIT(DS18B20); //配置为输入
while((PINA&(BIT(DS18B20)))); //等待DS18B20拉低
while(!(PINA&(BIT(DS18B20)))); //等待DS18B20释放总线
}
/*******************************************
函数名称: B20_readB
功 能: 读取一个字节的数据
参 数: 无
返回值 : retd--返回的一个字节数据
/********************************************/
uchar B20_readB(void)
{
uchar i,retd=0;
for(i=0;i<8;i++) //位计数值
{
retd>>=1; //右移,准备接受新的数据位
DDRA|=BIT(DS18B20); //配置为输出
PORTA&=~BIT(DS18B20); //拉低,启动读数据位
PORTA|=BIT(DS18B20); //释放总线
Delayus(5); //等待5微秒
DDRA&=~BIT(DS18B20); //配置为输入,开始读取数据位
if(PINA&BIT(DS18B20)) //该位是否为高
{
retd|=0x80; //是就将此位置高
}
Delayus(50); //等待50微秒
}
return retd; //将读到的一个字节返回
}
/*******************************************
函数名称: B20_writeB
功 能: 写入一个字节的数据
参 数: wrd--要写入的数据
返回值 : 无
/********************************************/
void B20_writeB(uchar wrd)
{
uchar i;
for(i=0;i<8;i++) //位计数值
{
DDRA|=BIT(DS18B20); //配置为输出
PORTA&=~BIT(DS18B20); //拉低,启动写数据位
Delayus(1); //等待1微秒
if(wrd&0x01) //此位数据是否为高
{
PORTA|=BIT(DS18B20); //是高则将单总线拉高
}
else
{
PORTA&=~BIT(DS18B20); //是低则将单总线拉低
}
Delayus(50); //等待50微秒
PORTA|=BIT(DS18B20); //释放总线
wrd>>=1; //右移,为写入新的数据位做准备
}
Delayus(50); //等待50微秒
}
/*******************************************
函数名称: Read_temp
功 能: 读取温度值
参 数: 无
返回值 : rettemp--返回的温度值
/********************************************/
uint Read_temp(void)
{
uchar templ,temph;
uint temp;
B20_init(); //初始化,每次写命令都从初始化开始
B20_writeB(0xcc); //跳过ROM
B20_writeB(0x44); //启动温度转换
B20_init(); //初始化,每次写命令都从初始化开始
B20_writeB(0xcc); //跳过ROM
B20_writeB(0xbe); //读寄存器
templ=B20_readB(); //读温度低字节
temph=B20_readB(); //读温度高字节
temp=templ+temph*256;//将温度整理成16位变量
return temp; //返回16位变量
}
/*******************************************
函数名称: Num_BCD
功 能: 将一个字节的整数转换成三位BCD码
参 数: num--需要转换的整数
返回值 : chr--三位BCD码数组指针
/********************************************/
uchar* Num_BCD(uint num)
{
uchar i,chr[3];
uchar *rept;
rept=&(chr[0]); //返回指针指向BCD码数组
for(i=0;i<3;i++)
{
chr[2-i]=num%10; //对10取余数(其实是求模,但是对于正数,取余与求模是相等的)
num/=10; //除以10,为取出下一位做准备
}
return rept; //返回指针
}
/*******************************************
函数名称: main
功 能: 完成温度的读取与显示
参 数: 无
返回值 : 无
/********************************************/
void main(void)
{
uint t;
uchar *temppt;
uchar i,temp[3];
Board_init( ); //初始化开发板
while(1)
{
t=Read_temp(); //读取温度值
t*=0.625; //转换成实际温度的10倍
temppt=Num_BCD(t);//将实际温度的10倍转换成BCD码
for(i=0;i<3;i++) //将转换后的BCD码存入显示数组
{
temp[i]=*(temppt+i);
}
for(i=0;i<3;i++) //显示温度
{
if(i==1)
{
temp[1]+=16; //如果是各位,则加上小数点(数码管的译码
}
One_smg_display(temp[i],i+1);
Delayms(5);
}
}
}
/*******************************************
文件:SMG.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驱动开发板上的数码管,滚动显示1、2、3、4、5、6
备注:参考《AVR系列单片机C语言编程与应用实例
/******************************************/
#include //包含型号头文件
#include //包含"位"操作头文件
#include //标准输入输出头文件

#pragma data:code
const SEGMENT[26]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,
0xff,0xef};

/*******************************************
函数名称: One_smg_display
功 能: 指定的数码管显示指定的内容
参 数: data--显示的内容(0-15)
number--指定的数码管(1-6)
返回值 : 无
/********************************************/
void One_smg_display(uchar data,uchar number)
{
PORTB|=0x3F; //输出位选
PORTA|=BIT(BITLK); //更新位选
Delayus(50); //调整时序
PORTA&=~BIT(BITLK); //锁存位选

PORTB=SEGMENT[data]; //输出段选
PORTA|=BIT(SEGLK); //更新段选
Delayus(50); //调整时序
PORTA&=~BIT(SEGLK); //锁存段选

number=~BIT(number-1); //调整位选(指定时是1~6,而操作的时候是0~5)
PORTB=number; //输出位选
PORTA|=BIT(BITLK); //更新位选
Delayus(50); //调整时序
PORTA&=~BIT(BITLK); //锁存位选
}
/*******************************************
函数名称: All_smg_display
功 能: 6个数码管显示指定的内容
参 数: *pdata--显示内容数组地址
返回值 : 无
/********************************************/
void All_smg_display(uchar *pdata)
{
uchar i;
for(i=0;i<6;i++)
{
One_smg_display(pdata[i],i+1);
Delayms(1);
}
}
/*******************************************
函数名称: Cycle_smg_display
功 能: 6个数码管从右向左循环滚动显示指定的内容(循环一次)
参 数: *pdata--显示内容数组地址
返回值 : 无
/********************************************/
void Cycle_smg_display(uchar *pdata)
{
uchar i,j;
for(i=0;i<240;i++) //共滚动6次,每次内容显示40个循环
{
for(j=0;j<6;j++) //扫描6个数码管
{
One_smg_display(pdata[(i/40+j)%6],j+1);//显示
Delayus(2000); //调整显示时间和亮度(时间越长亮度越高,但是太长数码管就闪了)
}
}
}

㈦ php和mysql web开发的目录

读者反馈
译者序
前言
作者简介
第一篇使用PHP
第1章PHP快速入门教程1
1.1开始之前:了解PHP
1.2创建一个示例应用:Bob汽车零部件商店2
1.2.1创建订单表单2
1.2.2表单处理4
1.3在HTML中嵌入PHP4
1.3.1使用PHP标记5
1.3.2PHP语句6
1.3.3空格6
1.3.4注释7
1.4添加动态内容8
1.4.1调用函数8
1.4.2使用date()函数9
1.5访问表单变量9
1.5.1简短、中等以及长风格的表单变量9
1.5.2字符串的连接11
1.5.3变量和文本12
1.6理解标识符13
1.7检查变量类型13
1.7.1PHP的数据类型
1.7.2类型强度
1.7.3类型转换
1.7.4可变变量
1.8声明和使用常量13
1.9理解变量的作用域13
1.10使用操作符16
1.10.1算术操作符17
1.10.2字符串操作符17
1.10.3赋值操作符17
1.10.4比较操作符19
1.10.5逻辑操作符20
1.10.6位操作符21
1.10.7其他操作符21
1.11计算表单总金额23
1.12理解操作符的优先级和结合性:
1.13使用可变函数25
1.13.1测试和设置变量类型26
1.13.2测试变量状态26
1.13.3变量的重解释27
1.14根据条件进行决策27
1.14.1if语句28
1.14.2代码块28
1.14.3else语句28
1.14.4elseif语句29
1.14.5switch语句30
1.14.6比较不同的条件31
1.15通过迭代实现重复动作32
1.15.1while循环33
1.15.2for和foreach循环34
1.15.3do...while循环35
1.16从控制结构或脚本中跳出35
1.17使用可替换的控制结构语法36
1.18使用declare36
1.19下一章37
第2章数据的存储与检索38
2.1保存数据以便后期使用38
2.2存储和检索Bob的订单38
2.3文件处理39
2.4打开文件40
2.4.1选择文件模式40
2.4.2使用fopen()打开文件40
2.4.3通过FTP或HTTP打开文件42
2.4.4解决打开文件时可能遇到的问题42
2.5写文件44
2.5.1fwrite()的参数44
2.5.2文件格式45
2.6关闭文件45
2.7读文件47
2.7.1以只读模式打开文件:fopen()48
2.7.2知道何时读完文件:feof()48
2.7.3每次读取一行数据:fgets()、fgetss()和fgetcsv()49
2.7.4读取整个文件:readfile()、fpassthru()和file()49
2.7.5读取一个字符:fgetc()50
2.7.6读取任意长度:fread()51
2.8使用其他有用的文件函数51
2.8.1查看文件是否存在:file_exists()51
2.8.2确定文件大小:filesize()51
2.8.3删除一个文件:unlink()51
2.8.4在文件中定位:rewind()、fseek()和ftell()52
2.9文件锁定52
2.10更好的方式:数据库管理系统53
2.10.1使用普通文件的几个问题54
2.10.2RDBMS是如何解决这些问题的54
2.11进一步学习54
2.12下一章55
第3章使用数组56
3.1什么是数组56
3.2数字索引数组57
3.2.1数字索引数组的初始化57
3.2.2访问数组的内容57
3.2.3使用循环访问数组58
3.3使用不同索引的数组59
3.3.1初始化相关数组59
3.3.2访问数组元素59
3.3.3使用循环语句59
3.4数组操作符60
3.5多维数组61
3.6数组排序64
3.6.1使用sort()函数64
3.6.2使用asort()函数和ksort()函数对相关数组排序64
3.6.3反向排序65
3.7多维数组的排序65
3.7.1用户定义排序65
3.7.2反向用户排序66
3.8对数组进行重新排序67
3.8.1使用shuffle()函数67
3.8.2使用array_reverse()函数68
3.9从文件载入数组69
3.10执行其他的数组操作71
3.10.1在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev()71
3.10.2对数组的每一个元素应用任何函数:array_walk()72
3.10.3统计数组元素个数:count()、sizeof()和array_count_values()73
3.10.4将数组转换成标量变量:extract()73
3.11进一步学习75
3.12下一章75
第4章字符串操作与正则表达式76
4.1创建一个示例应用程序:智能表单邮件76
4.2字符串的格式化78
4.2.1字符串的整理:chop()、ltrim()和trim()78
4.2.2格式化字符串以便显示78
4.2.3格式化字符串以便存储:addslashes()和stripslashes()81
4.3用字符串函数连接和分割字符串82
4.3.1使用函数explode()、implode()和join()82
4.3.2使用strtok()函数83
4.3.3使用substr()函数83
4.4字符串的比较84
4.4.1字符串的排序:strcmp()、strcasecmp()和strnatcmp()84
4.4.2使用strlen()函数测试字符串的长度85
4.5使用字符串函数匹配和替换子字符串85
4.5.1在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr()85
4.5.2查找子字符串的位置:strpos()、strrpos()86
4.5.3替换子字符串:str_replace()、substr_replace()87
4.6正则表达式的介绍88
4.6.1基础知识88
4.6.2字符集和类88
4.6.3重复89
4.6.4子表达式89
4.6.5子表达式计数90
4.6.6定位到字符串的开始或末尾90
4.6.7分支90
4.6.8匹配特殊字符90
4.6.9特殊字符一览91
4.6.10在智能表单中应用91
4.7用正则表达式查找子字符串92
4.8使用正则表达式分割字符串93
4.9比较字符串函数和正则表达式函数93
4.10进一步学习93
4.11下一章93
第5章代码重用与函数编写94
5.1代码重用的好处
5.1.1成本94
5.1.2可靠性94
5.1.3一致性95
5.2使用require()和include()函数95
5.2.1文件扩展名和require()语句96
5.2.2使用require()制作Web站点的模版96
5.2.3使用auto_prepend_file和auto_append_file101
5.3在PHP中使用函数101
5.3.1调用函数101
5.3.2调用未定义的函数103
5.3.3理解字母大小写和函数名称103
5.4理解为什么要定义自己的函数103
5.5了解基本的函数结构104
5.5.1函数命名
5.6使用参数105
5.7理解作用域107
5.8参数的引用传递和值传递109
5.9使用Return关键字110
5.9.1从函数返回一个值111
5.10实现递归113
5.10.1名称空间
5.11进一步学习114
5.12下一章114
第6章面向对象的PHP115
6.1理解面向对象的概念115
6.1.1类和对象115
6.1.2多态性116
6.1.3继承117
6.2在PHP中创建类、属性和操作117
6.2.1类的结构117
6.2.2构造函数118
6.2.3析构函数118
6.3类的实例化118
6.4使用类的属性119
6.5使用private和public关键字控制访问121
6.6类操作的调用121
6.7在PHP中实现继承122
6.7.1通过继承使用private和protected访问修饰符控制可见性123
6.7.2重载124
6.7.3使用final关键字禁止继承和重载125
6.7.4理解多重继承126
6.7.5实现接口126
6.8类的设计127
6.9编写类代码128
6.10理解PHP面向对象新的高级功能135
6.10.1使用Per-Class常量135
6.10.2实现静态方法135
6.10.3检查类的类型和类型提示136
6.10.4克隆对象136
6.10.5使用抽象类137
6.10.6使用__call()重载方法137
6.10.7使用__autoload()方法138
6.10.8实现迭代器和迭代138
6.10.9将类转换成字符串140
6.10.10使用Reflection(反射)API140
6.11下一章141
第7章错误和异常处理142
7.1异常处理的概念142
7.2Exception类144
7.3用户自定义异常144
7.4Bob的汽车零部件商店应用程序的异常146
7.5异常和PHP的其他错误处理机制150
7.6进一步学习150
7.7下一章150
第二篇使用MySQL
第8章设计Web数据库151
8.1关系数据库的概念152
8.1.1表格152
8.1.2列152
8.1.3行152
8.1.4值152
8.1.5键152
8.1.6模式153
8.1.7关系153
8.2如何设计Web数据库154
8.2.1考虑要建模的实际对象154
8.2.2避免保存冗余数据154
8.2.3使用原子列值155
8.2.4选择有意义的键156
8.2.5考虑需要询问数据库的问题156
8.2.6避免多个空属性的设计156
8.2.7表格类型的总结157
8.3Web数据库架构157
8.4进一步学习158
8.5下一章158
第9章创建Web数据库159
9.1使用MySQL监视程序160
9.2登录到MySQL160
9.3创建数据库和用户161
9.4设置用户与权限162
9.5MySQL权限系统的介绍162
9.5.1最少权限原则162
9.5.2创建用户:GRANT命令162
9.5.3权限的类型和级别163
9.5.4REVOKE命令165
9.5.5使用GRANT和REVOKE的例子165
9.6创建一个Web用户166
9.7使用正确的数据库166
9.8创建数据库表167
9.8.1理解其他关键字的意思168
9.8.2理解列的类型169
9.8.3用SHOW和DESCRIBE来查看数据库170
9.8.4创建索引171
9.9理解MySQL的标识符171
9.10选择列数据类型172
9.10.1数字类型173
9.10.2日期和时间类型174
9.10.3字符串类型174
9.11进一步学习176
9.12下一章176
第10章使用MySQL数据库177
10.1SQL是什么177
10.2在数据库中插入数据177
10.3从数据库中获取数据179
10.3.1获取满足特定条件的数据181
10.3.2从多个表中获取数据182
10.3.3以特定的顺序获取数据186
10.3.4分组与合计数据186
10.3.5选择要返回的行188
10.3.6使用子查询188
10.4更新数据库记录190
10.5创建后修改表191
10.6删除数据库中的记录193
10.7表的删除193
10.8删除整个数据库193
10.9进一步学习194
10.10下一章194
第11章使用PHP从Web访问MySQL数据库195
11.1Web数据库架构的工作原理195
11.2从Web查询数据库的基本步骤198
11.2.1检查与过滤用户输入数据198
11.2.2建立一个连接199
11.2.3选择使用的数据库200
11.2.4查询数据库200
11.2.5检索查询结果201
11.2.6从数据库断开连接202
11.3将新信息放入数据库202
11.4使用Prepared语句205
11.5使用PHP与数据库交互的其他接口206
11.5.1使用常规的数据库接口:PEARMDB2206
11.6进一步学习209
11.7下一章209
第12章MySQL高级管理210
12.1深入理解权限系统210
12.1.1user表211
12.1.2db表和host表212
12.1.3tables_priv表,columns_priv表和procs_priv表212
12.1.4访问控制:MySQL如何使用Grant表213
12.1.5更新权限:修改什么时候生效213
12.2提高MySQL数据库的安全性214
12.2.1从操作系统角度来保护MySQL214
12.2.2密码214
12.2.3用户权限215
12.2.4Web问题215
12.3获取更多关于数据库的信息216
12.3.1使用SHOW获取信息216
12.3.2使用DESCRIBE获取关于列的信息218
12.3.3用EXPLAIN理解查询操作的工作过程218
12.4数据库的优化221
12.4.1设计优化222
12.4.2权限222
12.4.3表的优化222
12.4.4使用索引222
12.4.5使用默认值222
12.4.6其他技巧222
12.5备份MySQL数据库222
12.6恢复MySQL数据库223
12.7实现复制223
12.7.1设置主服务器224
12.7.2执行初始的数据传输224
12.7.3设置一个/多个从服务器225
12.8进一步学习225
12.9下一章225
第13章MySQL高级编程226
13.1LOADDATAINFILE语句226
13.2存储引擎226
13.3事务227
13.3.1理解事务的定义227
13.3.2通过InnoDB使用事务228
13.4外键229
13.5存储过程230
13.5.1基本示例230
13.5.2局部变量232
13.5.3游标和控制结构233
13.6进一步学习236
13.7下一章236
第三篇电子商务与安全性
第14章运营一个电子商务网站237
14.1我们要实现什么目标237
14.2考虑电子商务网站的类型237
14.2.1使用在线说明书公布信息238
14.2.2接收产品或服务的订单240
14.2.3提供服务和数字产品243
14.2.4为产品或服务增值243
14.2.5减少成本243
14.3理解风险和威胁244
14.3.1网络黑客244
14.3.2不能招揽足够的生意245
14.3.3计算机硬件故障245
14.3.4电力、通信、网络或运输故障245
14.3.5广泛的竞争245
14.3.6软件错误245
14.3.7不断变化的政府政策和税收246
14.3.8系统容量限制246
14.4选择一个策略246
14.5下一章246
第15章电子商务的安全问题247
15.1信息的重要程度247
15.2安全威胁248
15.2.1机密数据的泄露248
15.2.2数据丢失和数据破坏249
15.2.3数据修改250
15.2.4拒绝服务251
15.2.5软件错误251
15.2.6否认252
15.3易用性,性能、成本和安全性253
15.4建立一个安全政策253
15.5身份验证原则254
15.6加密技术基础255
15.6.1私有密钥加密256
15.6.2公有密钥加密256
15.6.3数字签名256
15.7数字证书257
15.8安全的Web服务器258
15.9审计与日志记录259
15.10防火墙259
15.11备份数据259
15.11.1备份常规文件260
15.11.2备份与恢复MySQL数据库260
15.12自然环境安全260
15.13下一章261
第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.5Web服务器和PHP的安全性
16.5.1保持软件的更新
16.5.2查看php.ini文件
16.5.3Web服务器配置
16.5.4Web应用的商业主机服务
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实现身份验证262
17.1识别访问者262
17.2实现访问控制263
17.2.1保存密码265
17.2.2密码的加密267
17.2.3保护多个网页268
17.3使用基本身份验证269
17.4在PHP中使用基本身份验证270
17.5在Apache的.htaccess文件中使用基本身份验证271
17.6使用mod_auth_mysql身份验证276
17.6.1安装mod_auth_mysql276
17.6.2使用mod_auth_mysql277
17.7创建自定义身份验证277
17.8进一步学习278
17.9下一章278
第18章使用PHP和MySQL实现安全事务279
18.1提供安全的事务处理279
18.1.1用户机器280
18.1.2Internet281
18.1.3我们的系统281
18.2使用加密套接字层(SSL)282
18.3屏蔽用户的输入284
18.4提供安全存储284
18.5存储信用卡号码285
18.6在PHP中使用加密技术286
18.6.1安装GPG286
18.6.2测试GPG288
18.7进一步学习293
18.8下一章293
第四篇PHP的高级技术
第19章与文件系统和服务器的交互295
19.1文件上载295
19.1.1文件上载的HTML代码296
19.1.2编写处理文件的PHP297
19.1.3避免常见上载问题300
19.2使用目录函数300
19.2.1从目录读取300
19.2.2获得当前目录的信息302
19.2.3创建和删除目录302
19.3与文件系统的交互302
19.3.1获取文件信息302
19.3.2更改文件属性304
19.3.3创建、删除和移动文件305
19.4使用程序执行函数305
19.5与环境变量交互:getenv()和putenv()308
19.6进一步学习308
19.7下一章308
第20章使用网络函数和协议函数309
20.1了解可供使用的协议309
20.2发送和读取电子邮件309
20.3使用其他Web站点的数据310
20.4使用网络查找函数312
20.5备份或镜像一个文件
20.5.1使用FTP备份或镜像一个文件316
20.5.2上传文件321
20.5.3避免超时321
20.5.4使用其他的FTP函数322
20.6进一步学习322
20.7下一章323
第21章日期和时间的管理324
21.1在PHP中获取日期和时间324
21.1.1使用date()函数324
21.1.2使用UNIX时间戳325
21.1.3使用getdate()函数326
21.1.4使用checkdate()函数检验日期有效性327
21.1.5格式化时间戳
21.2在PHP日期格式和MySQL日期格式之间进行转换327
21.3在PHP中计算日期329
21.4在MySQL中计算日期329
21.5使用微秒331
21.6使用日历函数331
21.7进一步学习332
21.8下一章332
第22章创建图像333
22.1在PHP中设置图像支持333
22.2理解图像格式334
22.2.1JPEG334
22.2.2PNG334
22.2.3WBMP335
22.2.4GIF335
22.3创建图像335
22.3.1创建一个背景图像336
22.3.2在图像上绘图或打印文本337
22.3.3输出最终图形338
22.3.4清理339
22.4在其他页面中使用自动生成的图像339
22.5使用文本和字体创建图像339
22.5.1创建基本画布342
22.5.2将文本调整到适合按钮342
22.5.3放置文本345
22.5.4将文本写到按钮上345
22.5.5完成345
22.6绘制图像与用图表描绘数据346
22.7使用其他的图像函数352
22.8进一步学习352
22.9下一章353
第23章在PHP中使用会话控制354
23.1什么是会话控制354
23.2理解基本的会话功能354
23.2.1什么是cookie354
23.2.2通过PHP设置cookie355
23.2.3在会话中使用cookie355
23.2.4存储会话ID356
23.3实现简单的会话356
23.3.1开始一个会话356
23.3.2注册一个会话变量356
23.3.3使用会话变量357
23.3.4注销变量与销毁会话357
23.4创建一个简单的会话例子357
23.5配置会话控制359
23.6通过会话控制实现身份验证360
23.7进一步学习365
23.8下一章365
第24章其他有用的特性366
24.1使用eval()函数对字符串求值367
24.2终止执行:die和exit367
24.3序列化变量和对象368
24.4获取PHP环境信息369
24.4.1找到所加载的PHP扩展部件369
24.4.2识别脚本所有者370
24.4.3确定脚本最近修改时间370
24.5暂时改变运行时环境370
24.6源代码加亮371
24.7在命令行中使用PHP372
24.8下一章372
第五篇创建实用的PHP和MySQL项目
第25章在大型项目中使用PHP和MySQL373
25.1在Web开发中应用软件工程374
25.2规划和运行Web应用程序项目374
25.3重用代码375
25.4编写可维护代码375
25.4.1编码标准375
25.4.2分解代码378
25.4.3使用标准的目录结构378
25.4.4文档化和共享内部函数378
25.5实现版本控制379
25.6选择一个开发环境380
25.7项目的文档化380
25.8建立原型381
25.9将逻辑和内容分离381
25.10优化代码382
25.10.1使用简单优化382
25.10.2使用Zend产品382
25.11测试383
25.12进一步学习383
25.13下一章384
第26章调试385
26.1编程错误385
26.1.1语法错误385
26.1.2运行时错误386
26.1.3逻辑错误391
26.2使用变量帮助调试392
26.3错误报告级别393
26.4改变错误报告设置394
26.5触发自定义错误395
26.6巧妙地处理错误396
26.7下一章398
第27章建立用户身份验证机制和个性化设置399
27.1解决方案的组成399
27.1.1用户识别和个性化设置399
27.1.2保存书签400
27.1.3推荐书签400
27.2解决方案概述400
27.3实现数据库402
27.4实现基本的网站403
27.5实现用户身份验证405
27.5.1注册405
27.5.2登录410
27.5.3登出413
27.5.4修改密码414
27.5.5重设遗忘的密码416
27.6实现书签的存储和检索420
27.6.1添加书签420
27.6.2显示书签422
27.6.3删除书签422
27.7实现书签推荐424
27.8考虑可能的扩展427
27.9下一章427
第28章创建一个购物车428
28.1解决方案的组成428
28.1.1创建一个在线目录428
28.1.2在用户购买商品的时候记录购买行为429
28.1.3实现一个付款系统429
28.1.4创建一个管理界面429
28.2解决方案概述429
28.3实现数据库432
28.4实现在线目录434
28.4.1列出目录434
28.4.2列出一个目录中的所有图书437
28.4.3显示图书详细信息438
28.5实现购物车440
28.5.1使用show_cart.php脚本440
28.5.2浏览购物车442
28.5.3将物品添加到购物库444
28.5.4保存更新后的购物车446
28.5.5打印标题栏摘要447
28.5.6结账447
28.6实现付款452
28.7实现一个管理界面454
28.8扩展该项目460
28.9使用一个已有系统461
28.10下一章461
第29章创建一个基于Web的电子邮件服务系统486
29.1解决方案的组成486
29.1.1电子邮件协议:POP3和IMAP
29.1.2PHP对POP3和IMAP的支持
29.2解决方案概述488
29.3建立数据库489
29.4了解脚本架构490
29.5登录与登出495
29.6建立账户498
29.6.1创建一个新账户499
29.6.2修改已有账户501
29.6.3删除账户501
29.7阅读邮件502
29.7.1选择账户502
29.7.2查看邮箱内容504
29.7.3阅读邮件消息507
29.7.4查看消息标题509
29.7.5删除邮件509
29.8发送邮件510
29.8.1发送一则新消息510
29.8.2回复或转发邮件512
29.9扩展这个项目514
29.10下一章514
第30章创建一个邮件列表管理器515
30.1解决方案的组成515
30.1.1建立列表和订阅者数据库516
30.1.2上载新闻信件516
30.1.3发送带附件的邮件516
30.2解决方案概述516
30.3建立数据库518
30.4定义脚本架构520
30.5实现登录526
30.5.1新账户的创建527
30.5.2登录529
30.6用户函数的实现531
30.6.1查看列表531
30.6.2查看邮件列表信息535
30.6.3查看邮件列表存档536
30.6.4订阅与取消订阅538
30.6.5更改账户设置539
30.6.6更改密码539
30.6.7登出540
30.7管理功能的实现541
30.7.1创建新的邮件列表541
30.7.2上载新的新闻信件543
30.7.3多文件上载的处理545
30.7.4预览新闻信件549
30.7.5发送邮件550
30.8扩展这个项目555
30.9下一章555
第31章创建一个Web论坛556
31.1理解流程
31.2解决方案的组成556
31.3解决方案概述557
31.4数据库的设计558
31.5查看文章的树型结构560
31.5.1展开和折叠561
31.5.2显示文章564
31.5.3使用treenode类564
31.6查看单个的文章570
31.7添加新文章572
31.8添加扩充578
31.9使用一个已有的系统578
31.10下一章578
第32章生成PDF格式的个性化文档579
32.1项目概述
32.1.1评估文档格式579
32.2解决方案的组成582
32.2.1问题与回答系统583
32.2.2文档生成软件583
32.3解决方案概述585
32.3.1提问585
32.3.2给答题评分587
32.3.3生成RTF证书589
32.3.4从模板生成PDF证书591
32.3.5使用PDFlib生成PDF文档595
32.3.6使用PDFlib的一个“HelloWorld”程序595
32.3.7用PDFlib生成证书598
32.4处理标题的问题605
32.5扩展该项目605
32.6下一章606
第33章使用XML和SOAP来连接Web服务607
33.1项目概述:使用XML和Web服务
33.1.1理解XML
33.1.2理解Web服务611
33.2解决方案的组成612
33.2.1使用Amazon的Web服务接口613
33.2.2XML的解析:REST响应
33.2.3在PHP中使用SOAP614
33.2.4缓存614
33.3解决方案概述614
33.3.1核心应用程序618
33.3.2显示特定种类的图书623
33.3.3获得一个AmazonResultSet类624
33.3.4使用REST发送和接收请求
33.3.5使用SOAP发送和接收请求
33.3.6缓存请求返回的数据636
33.3.7创建购物车639
33.3.8到Amazon付账642
33.4安装项目代码642
33.5扩展这个项目643
33.6进一步学习643
第34章使用Ajax构建Web2.0应用
34.1Ajax是什么?
34.1.1HTTP请求和响应
34.1.2DHTML和XHTML
34.1.3级联样式单(CSS)
34.1.4客户端编程
34.1.5服务器端编程
34.1.6XML和XSLT
34.2Ajax基础
34.2.1XMLHTTPRequest对象
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.2Ajax应用可用的JavaScript函数库
34.4.3Ajax开发人员网站
第六篇附录
附录A安装PHP及MySQL645
附录BWeb资源664
第1章PHP快速入门教程
第2章数据的存储与检索
第3章使用数组
第4章字符串操作与正则表达式
第5章代码重用与函数编写
第6章面向对象的PHP
第7章错误和异常处理
……

㈧ 用c语言写一个动态时间表要源代码

用到的数据结构:
time_t是一个long类型 代表机器时间,可由time( )函数获得。

日历时间用一个(char *) 类型的字符串表示。格式为:星期 月 日 小时:分:秒 年\n\0
可由函数ctime( ) asctime( ) 得到。

以tm结构表达的时间,结构tm定义如下:
struct tm { 可由函数localtime( ), gmtime( )得到
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst; };
//系统日期
struct date {
int da_year; /* Year - 1980 */
char da_day; /* Day of the month */
char da_mon; /* Month (1 = Jan) */ };
//系统时间
struct time {
unsigned char ti_min; /* Minutes */
unsigned char ti_hour; /* Hours */
unsigned char ti_hund; /* Hundredths of seconds */
unsigned char ti_sec; /* Seconds */ };

用到的函数:
char * asctime(struct tm * ptr) 将tm结构的时间转化为日历时间。
char *ctime(long time) 将机器时间转化为日历时间。
struct tm *gmtime(time_t *time) 将机器时间转化为tm时间

当ptr为空时,得到机器时间;非空时,设置机器时间。
time_t time(time_t *ptr) 得到或设置机器时间
double difftime(time_t time2, time_t time1) 得到两次机器时间差,单位为秒

long dostounix(struct data *d, struct time *t) 将DOS的日期和时间格式转换成UNIX标准
(机器时间(用到dos.h库).void unixtodos(long utime, struct date *d, struct time *t)
将UNIX格式的时间和日期转换成DOS格式(由time 和date两部分组成,只能由机器时间得到,并且用到dos.h库)
void getdate(struct date *d) 得到系统日期,d 存放得到的日期信息
void setdate(struct date *d)
void gettime(struct date *t) 得到系统时间 d 存放得到的时间信息
void settime(struct date *t)

C语言的标准库函数包括一系列日期和时间处理函数,它们都在头文件中说明。下面列出了这些函数。
在头文件中定义了三种类型:time_t,struct tm和clock_t。

在中说明的C语言时间函数

time_t time(time_t *timer);

double difftime(time_t time1,time_t time2);

struct tm *gmtime(const time_t *timer);

struct tm *localtime(const time_t *timer);

char *asctime(const struct tm *timeptr);

char *ctime(const time_t *timer);

size_t strftime(char *s,size_t maxsize,const char *format,const struct tm *timeptr);

time_t mktime(struct tm *timeptr);

clock_t clock(void);

下面是我从网上收集到的时间函数集
asctime(将时间和日期以字符串格式表示)
相关函数
time,ctime,gmtime,localtime
表头文件
#i nclude
定义函数
char * asctime(const struct tm * timeptr);
函数说明
asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
此函数已经由时区转换成当地时间,字符串格式为:"Wed Jun 30 21:49:08 1993\n"
返回值
若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime不同处在于传入的参数是不同的结构。
附加说明
返回一字符串表示目前当地的时间日期。
范例
#i nclude
main()
{
time_t timep;
time (&timep);
printf("%s",asctime(gmtime(&timep)));
}
执行
Sat Oct 28 02:10:06 2000

ctime(将时间和日期以字符串格式表示)
相关函数
time,asctime,gmtime,localtime
表头文件
#i nclude
定义函数
char *ctime(const time_t *timep);
函数说明
ctime ()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
此函数已经由时区转换成当地时间,字符串格式为"Wed Jun 30 21 :49 :08 1993\n"。若再调用相关的时间日期函数,此字符串可能会被破坏。
返回值
返回一字符串表示目前当地的时间日期。
范例
#i nclude
main()
{
time_t timep;
time (&timep);
printf("%s",ctime(&timep));
}
执行
Sat Oct 28 10 : 12 : 05 2000

gettimeofday(取得目前的时间)
相关函数
time,ctime,ftime,settimeofday
表头文件
#i nclude
#i nclude
定义函数
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函数说明
gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。
timeval结构定义为:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 结构定义为:
struct timezone{
int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/
int tz_dsttime; /*日光节约时间的状态*/
};
上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下
DST_NONE /*不使用*/
DST_USA /*美国*/
DST_AUST /*澳洲*/
DST_WET /*西欧*/
DST_MET /*中欧*/
DST_EET /*东欧*/
DST_CAN /*加拿大*/
DST_GB /*大不列颠*/
DST_RUM /*罗马尼亚*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以后)*/
返回值
成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。
范例
#i nclude
#i nclude
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf("tv_sec; %d\n", tv,.tv_sec) ;
printf("tv_usec; %d\n",tv.tv_usec);
printf("tz_minuteswest; %d\n", tz.tz_minuteswest);
printf("tz_dsttime, %d\n",tz.tz_dsttime);
}
执行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0

gmtime(取得目前时间和日期)
相关函数
time,asctime,ctime,localtime
表头文件
#i nclude
定义函数
struct tm*gmtime(const time_t*timep);
函数说明
gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
结构tm的定义为
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒
int tm_min 代表目前分数,范围0-59
int tm_hour 从午夜算起的时数,范围为0-23
int tm_mday 目前月份的日数,范围01-31
int tm_mon 代表目前月份,从一月算起,范围从0-11
int tm_year 从1900 年算起至今的年数
int tm_wday 一星期的日数,从星期一算起,范围为0-6
int tm_yday 从今年1月1日算起至今的天数,范围为0-365
int tm_isdst 日光节约时间的旗标
此函数返回的时间日期未经时区转换,而是UTC时间。
返回值
返回结构tm代表目前UTC 时间
范例
#i nclude
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf("%d%d%d",(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf("%s%d;%d;%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
}
执行
2000/10/28 Sat 8:15:38

localtime(取得当地目前时间和日期)
相关函数
time, asctime, ctime, gmtime
表头文件
#i nclude
定义函数
struct tm *localtime(const time_t * timep);
函数说明
localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
结构tm的定义请参考gmtime()。此函
数返回的时间日期已经转换成当地时区。
返回值
返回结构tm代表目前的当地时间。
范例
#i nclude
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*取得当地时间*/
printf ("%d%d%d ", (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);
printf("%s%d:%d:%d\n", wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
}
执行
2000/10/28 Sat 11:12:22

mktime(将时间结构数据转换成经过的秒数)
相关函数

㈨ 下面这段源代码是什么意思。。

Private Sub Command1_Click() '单击按钮
Dim sql As String '定义语句(数据库SQL语句)
Dim rs_add As New ADODB.Recordset '定义数据集变量
Call open_db '调用函数,函数未知,不过从字面意思即上下文可判断是数据库连接语句
If Trim(Text1.Text) = "" Then '如果文本框Text1没有输入内容
MsgBox "操作员名不能为空!", vbOKOnly + vbExclamation, ""
'提示"操作员名不能为空!"
Exit Sub '退出过程
Text1.setfoccus '无意义的语句,可能作者写错顺序了,设置文本框Text1获得焦点
Else '如果文本框Text1有内容
sql = "selesc*from 系统操作员表" 'SQL语句赋值,注意还没运行,不过写错了,应该是select * from 系统操作员表,空格也不能少的
rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic
'执行以上SQL语句
While (rs_add.EOF = False) '如果未到数据尾,即找到匹配数据
If Trim(rs_add.Fields(0)) = Trim(Text1.Text) Then
'如果找到的数据第一个字段跟输入的文本框Text1一致
MsgBox "已有这个用户!", vbOKOnly + vbExclamation, ""
'提示"已有这个用户!"
Text1.setfoccus '设置文本框Text1获得焦点
Text1.Text = "" '清空文本框1,2,3
Text2.Text = ""
Text3.Text = ""
Exit Sub '退出过程

Else '如果找到的数据第一个字段跟输入的文本框Text1不一致
rs_add.MoveNext '移动到下一个记录
End If
Wend
'以上代码是打开数据库,循环查找,看下输入的系统操作员是否与存在的数据库一致,不一致就继续找,一致就提示已有这个用户,反正找到最后还没有重复的就可以添加了,这样才不会使用户名重复,其实还有更好的SQL语句可以用,我不知道作者的意图也不敢妄加揣测

If Trim(Text2.Text) <> Trim(Text3.Text) Then
'如果文本框Text2,文本框Text3不一致提示"两次密码不一致!"并清空输入设置文本框Text2获得焦点,然后退出过程,这次的退出过程意义不大,可能节约了几微秒时间去执行一条语句而已吧,并不是不对,只是没必要什么时候都加上Exit Sub

MsgBox "两次密码不一致!", vbOKOnly + vbExclamation, ""
Text2.SetFocus
Text2.Text = ""
Text3.Text = ""
Exit Sub

Else '如果文本框Text2,文本框Text3输入一致
rs_add.AddNew '准备进行加入
rs_add.Fields(0) = Text1.Text '将文本框的内容导入数据库,从这里可以看出数据库的设计不太合理,把重复输入的两个密码框都导入那么数据的一致性就很难保证了,当然,代码写好点也没事,但浪费空间浪费时间的无意义举动很不好
rs_add.Fields(1) = Text2.Text
rs_add.Fields(2) = Text3.Text

rs_add.updata '更新数据库
rs_add.Close '关闭数据库,提示MsgBox "添加用户成功!"
MsgBox "添加用户成功!", vbOKOnly + vbExclamation, ""
Unload Me '卸载窗体
End If
End If

End Sub

这是个添加新用户的代码,text1输入用户名,text2输入密码,text3重复输入密码,然后先判断text1是否为空,为空就提示,不然就在数据库中查找看看有没有重复的,重复就提示,没有继续判断输入的密码一不一致,不一致提示,一致就可以添加了
不过从逻辑的角度看顺序可以改下更合理点,先判断输入的密码一不一致再连接数据库判断用户重复好些,这样可以减少CPU的负载,嘿嘿

㈩ 微信的一元悦购是不是骗人的

我买了16次,开完奖了我都只有10个悦购码,码没配完就开奖了,是不是骗人的大家自己分辨哈!相信你们懂得

热点内容
百度云下载文件夹 发布:2025-05-18 03:17:33 浏览:674
php云开发 发布:2025-05-18 03:12:41 浏览:447
sql语句显示表 发布:2025-05-18 03:12:30 浏览:690
数据库系统的例子 发布:2025-05-18 03:02:42 浏览:191
数字化储存与编译是什么 发布:2025-05-18 02:56:55 浏览:217
个人网站模板源码 发布:2025-05-18 02:51:17 浏览:490
主服务器ip地址 发布:2025-05-18 02:46:29 浏览:856
电脑配置太低玩不了绝地求生怎么办 发布:2025-05-18 02:38:39 浏览:797
存储过程怎么出错了 发布:2025-05-18 02:37:16 浏览:368
32寸算法 发布:2025-05-18 02:22:14 浏览:744