• 1. 24 十月 2018本书技术支持站点:http://www.17php.com1动态网站开发与全程实例ISBN书号:97-7-302-16213-1作者:聂庆鹏 毛书朋 王志乐版权所有 本书编写组PHP+MYSQL出版:清华大学出版社 本书的技术支持、意见反馈及勘误信息请访问http://www.17php.com 作者电子信箱:rznqp@163.com rzmsp@163.com
  • 2. 24 十月 2018本书技术支持站点:http://www.17php.com2第1章 PHP概述1.1 PHP的来龙去脉 1.2 PHP 可以做哪些事 1.3 PHP 的特点及其与其它语言的比较 1.4 PHP 常用开发工具 案例 1 登陆 Internet 了解 PHP 的应用情况 本章小结 练 习 题
  • 3. 24 十月 2018本书技术支持站点:http://www.17php.com31.1 PHP的来龙去脉1.1.1 PHP的概念 PHP是PHP: Hypertext Preprocessor(超文本预处理器)的字母缩写,是一种跨平台的开放源代码的服务器端嵌入式脚本语言。 与HTML不同的是,PHP代码是运行在服务端的,然后把结果返还到客户端来。使用 PHP 的一大好处是它对于初学者来说极其简单,可以很快的入门,只需几个小时就可以自己写一些简单的脚本,同时也给专业的程序员提供了各种高级的特性。 尽管 PHP 的开发是以服务端脚本为目的,但事实上其功能远不局限与此。请继续读后面的章节,在“PHP 可以做哪些事”一节中将获得更多的信息。
  • 4. 24 十月 2018本书技术支持站点:http://www.17php.com41.1 PHP的来龙去脉1.1.2 PHP的产生与发展 任何事物都有其产生和发展的过程,PHP也不例外。但PHP与其他脚本语言的不同在于,PHP能够诞生并且发展到今天的规模,可以说是全世界各位免费代码开发者共同努力的结果。它是通过Internet把众多程序员的编程精粹汇聚,再由PHP开发者将其转化到程序设计语言中才诞生的,可以说,PHP是Internet的产物,是开放源代码自由交流的胜利成果。 PHP的创建者是Rasmus Lerdorf
  • 5. 24 十月 2018本书技术支持站点:http://www.17php.com51.1 PHP的来龙去脉1.1.2 PHP的产生与发展 1995年,Rasmus Lerdorf对外发表第一个版本。 1996年底,已经有15000多个网站使用PHP/FI,到1997年,数量达到50000个。 1997年, PHP的第三个版本PHP3诞生。 1999年,PHP在网站中的应用数量超过了150000个。 PHP4的推出使PHP更加的成熟。 PHP目前的最新版本是PHP5。
  • 6. 24 十月 2018本书技术支持站点:http://www.17php.com61.2 PHP 可以做哪些事如果说PHP无所不能,大概是夸大了些,但如果说在Web开发上能完成任何一款服务器端程序所能完成的工作却一点也不为过,例如收集表单数据,生成动态网页,或者发送/接受cookies。 PHP 脚本主要用于以下三个领域: ※ 服务端脚本。 ※ 命令行脚本。 ※ 编写桌面应用程序。 有了PHP,我们可以轻松地进行Web开发,轻松的制作动态网 站、新闻系统等;轻松的实现对文件及文件夹的操作;轻松地进行电子商务的开发、数据的加密;与数据库相关联等等。我们将在以后的章节中向广大读者介绍PHP这些激动人心的功能。
  • 7. 24 十月 2018本书技术支持站点:http://www.17php.com71.3 PHP 的特点及其与其它语言的比较1.3.1 PHP的特点 PHP自产生以来一直都在发展中应用、在应用中发展,这是因为PHP不仅有着其它同类脚本所共有的功能,更有它自身的特色。 ● 完全免费 ● 代码完全开放 ● 语法结构简单 ● 功能强大 ● 强大的数据库支持 ● 代码执行效率高
  • 8. 24 十月 2018本书技术支持站点:http://www.17php.com81.3 PHP 的特点及其与其它语言的比较1.3.1 PHP的特点 PHP的先进之处还体现在以下几个方面: 学习过程短。 面向对象编程。 可伸缩性。 (下载源码就到源码网:www.codepub.com)
  • 9. 24 十月 2018本书技术支持站点:http://www.17php.com91.3 PHP 的特点及其与其它语言的比较1.3.2 PHP与其它CGI的比较
  • 10. 24 十月 2018本书技术支持站点:http://www.17php.com101.4 PHP 常用开发工具1.4.1 PHP 代码开发工具 1. EditPlus 简单阐述:速度快,支持多种语言的语法加亮,有project概念,但并不好用。无SCC(Source Code Control,源代码控制)集成,但仍是个优秀的编辑器。
  • 11. 24 十月 2018本书技术支持站点:http://www.17php.com111.4 PHP 常用开发工具1.4.1 PHP 代码开发工具 2. Dev-PHP 简单阐述::用Delphi开发的Opensource的PHP开发工具,较好的集成了PHP解析器和PHP-GTK库。性能和稳定性都很不错。只是在团队合作上比较薄弱,没有SCC和project的功能。但完全让你有理由舍弃掉EditPlus。
  • 12. 24 十月 2018本书技术支持站点:http://www.17php.com121.4 PHP 常用开发工具1.4.1 PHP 代码开发工具 3. PHPEdit 简单阐述:一个优秀的IDE. 调试功能丰富,项目管理功能丰富,带有SCC, 项目管理由一个Plugin, 集成有Grep,帮助文档工具,笔者推荐。现在最新的是2.6.1版本,安装包大小30M左右,安装时候只需要到其官网免费注册一下就可以获得一个月的试用期。
  • 13. 24 十月 2018本书技术支持站点:http://www.17php.com131.4 PHP 常用开发工具1.4.1 PHP 代码开发工具 4. Zend Studio 简单阐述:优秀的IDE, 各个功能丰富,Zend的拳头产品,带有CVS集成,项目管理也较为丰富,但作为商业软件,价格颇高,一般个人用户没有太大必要去购买。
  • 14. 24 十月 2018本书技术支持站点:http://www.17php.com141.4 PHP 常用开发工具1.4.2 网页设计工具 1. Micosoft FrontPage 2003 简单阐述:FrontPage是MicroSoft公司推出的Office系列中的一款制作网页的软件,简单易学,容易上手,有Word操作经验的人学起来会觉得很容易。对于以前用Frontpage 开发网页过程中出现的垃圾代码,相信用过的读者肯定深有体会。但FrontPage 2003的出现使这一问题得到了很大的改善。比起以前的版本,FrontPage 2003的功能更强大,界面更友好,产生的垃圾代码更少,开发效率更高。
  • 15. 24 十月 2018本书技术支持站点:http://www.17php.com151.4 PHP 常用开发工具1.4.2 网页设计工具 2. DreamWeaver 简单阐述:作为网页三剑客之一的DreamWeaver,在网站的设计与开发上与FrontPage各有优缺点,界面和FrontPage虽有差别,但若对其中一个比较熟悉后,对另一个的学习就会事半功倍,这里也就不再赘述。
  • 16. 24 十月 2018本书技术支持站点:http://www.17php.com161.4 PHP 常用开发工具1.4.3 文本编辑工具 1. UltraEdit 简单阐述:这款功能强大的文本编辑器,可以编辑文字、Hex、ASCII码,可以取代记事本,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。最新版本的软件修正了老版本存在的一些Bug,并新增了二十余项新功能。
  • 17. 24 十月 2018本书技术支持站点:http://www.17php.com171.4 PHP 常用开发工具1.4.3 文本编辑工具 2. NotePad(记事本) 简单阐述:这是WINDOWS自带的记事本 。 小节: 专业PHP开发工具推荐使用Dev-PHP与PHPEdit,功能丰富,全面好用,当然如果你舍得投入,也可以使用Zend Studio这款综合实力超群的工具。
  • 18. 24 十月 2018本书技术支持站点:http://www.17php.com18案例1 登陆Internet了解PHP的应用情况一、案例分析 本案例要求读者使用本地计算机到Internet上去搜索,浏览有关PHP的应用情况。读者只要使用任一台能连到Internet上的电脑就可以进行动手搜索了。 二、实施步骤 1、打开IE或其他浏览器。 2、登陆到baidu.com或google.com搜索引擎。 3、输入“PHP 应用”或其他读者想搜索的内容进行查找、浏览。
  • 19. 24 十月 2018本书技术支持站点:http://www.17php.com19本章小结 本章中我们着重介绍了PHP嵌入式脚本的概念、来龙去脉、特点、在网络中的应用和开发工具,PHP是免费的、嵌入式的、运行在服务端的,发展到现在已经到了第五个版本PHP5,它功能强大、语法简洁、易于掌握,它在Web开发中占用重要位置,可以通过多种工具来进行PHP开发等等。读者通过本章的学习,应能对PHP脚本有一种大体的认识,对各类开发工具有大体的了解并在以后的学习过程中熟练使用它们的一种或几种。
  • 20. 24 十月 2018本书技术支持站点:http://www.17php.com20练 习 题1. 试描述PHP的概念,嵌入式脚本的结构。 2. 描述PHP的特点及与其他脚本的区别。 3. 描述目前常用的PHP开发工具名称及各自特点? (下载源码就到源码网:www.codepub.com)
  • 21. 第2章 预备知识: HTML与JavaScript2.1 什么是HTML 2.2 HTML的文本标记及属性 2.3 插入图片和超链接 2.4 表格的使用 2.5 创建表单 2.6 JavaScript简介 2.7 JavaScript语法 2.8 JavaScript使用范例
  • 22. 2.1 什么是HTML2.1.1 HTML的概念 HTML(HyperText Markup Language)即超文本标识语言,是WWW的描述语言。 设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。我们只需使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。
  • 23. 2.1 什么是HTML2.1.1 HTML的概念 HTML只是一个纯文本文件。创建一个HTML文档,只需要两个工具,一个是HTML编辑器,一个WEB浏览器。 HTML编辑器是用于生成和保存HTML文档的应用程序,如记事本、写字板。WEB浏览器是用来打开WEB网页文件,提供给我们查看WEB资源的客户端程序,如Internet Explorer,Netscape等。
  • 24. 2.1 什么是HTML2.1.2 HTML的结构 HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所 需的信息,而主体则包含所要说明的具体内容。
  • 25. 2.1 什么是HTML2.1.2 HTML的结构 1: 2: 3: HTML文档范例 4:  5: 6:
                                          7: 这是一个HTML范例         8:
    9: 10:
  • 26. 2.1 什么是HTML2.1.2 HTML的结构 输入代码完毕保存文件的时候,应当注意几点: 1、文件名一栏,记得要把后缀名.html或者.htm加上; 2、保存类型,一定选择所有文件,否则会默认保存为文本文档(后缀.txt)。 当我们保存完毕之后,就会看到目录下多了 这样一个文件,这就说明我们把文件正确保存了,双击用默认的Internet Explorer打开。
  • 27. 2.1 什么是HTML2.1.3 HTML的标签及属性 一个HTML文档是由一系列的元素和标签组成。元素名不区分大小写,HTML用标签来规定元素的属性和它在文件中的位置。 “<”和 “>”括起来的句子,我们称它为标签,是用来分割和标签文本的元素,以形成文本的布局、文字的格式及五彩缤纷的画面。 标签通过指定某块信息为段落或标题等来标识文档某个部件,属性是标志里的参数的选项。
  • 28. 2.1 什么是HTML2.1.3 HTML的标签及属性 标签及属性格式如下: <标签名字 属性1=值 属性2=值 属性3……>内容 例如,范例中的这是一个HTML范例
  • 29. 2.1 什么是HTML2.1.4 HTML的开发工具 HTML的开发工具极多,只要是文本编辑软件都可以进行HTML代码编写,如上述范例,就是用Windows自带的记事本进行HTML编写的,简单实用,国外用HotDog pro编写的居多。笔者推荐用UltraEdit进行HTML的编写,或者用FrontPage 2003切换到代码界面进行编写。
  • 30. 2.2 文本与项目符号2.2.1 HTML的文本标签 1、换行符 在HTML文本中的换行需要用
    表示,它是个单标签,没有属性,虽然在HTML3.0之后可以写作

    ,但没有实际意义。在html文件中的任何位置只要使用了
    标签,当文件显示在浏览器中时,该标签之后的内容将显示下一行。在HTML源代码里,对回车符是忽略的,所以要想换行就用
    标签。
  • 31. 2.2 文本与项目符号2.2.1 HTML的文本标签 2、分段符

    标签所标识的文字,代表同一个段落的文字。不同段落间的间距等于连续加了两个换行符,用以区别文字的不同段落。它可以单独使用,也可以成对使用。单独使用时,下一个

    的开始就意味着上一个

    的结束。良好的习惯是成对使用。 分段符的写法是

    ,它有一个属性就是align,有三种取值:left、center和right,分别代表居左、居中和居右,默认是居左。此标签写法为

  • 32. 2.2 文本与项目符号2.2.1 HTML的文本标签 3、文字缩排
    标签可以用来建立一个引文,他特别适合较长文本的引用,引文显示时将会自动右移,左边有2个汉字的空白,加以区别。如图2-3所示,文本“这里是缩排”自动向右移动两个汉字的空白,而且缩排可以嵌套,文本“再次缩排”就是嵌套缩排得效果。
  • 33. 2.2 文本与项目符号2.2.1 HTML的文本标签 4、预排版文字标签
     
    1:
    2:
    3:海纳百川
    4:  有容乃大
    5:HTML预排版文字格式    
    6:
    7: 8:
  • 34. 2.2 文本与项目符号2.2.1 HTML的文本标签 5、居中对齐标签 文本在页面中使用
    标签进行居中显示,
    是成对标签,在需要居中的内容部分开头处加
    ,结尾处加
  • 35. 2.2 文本与项目符号2.2.1 HTML的文本标签 6、注释标签 在HTML文档中可以加入相关的注释标记,便于查找和记忆有关的文件内容和标识,这些注释内容并不会在浏览器中显示出来。
  • 36. 2.2 文本与项目符号2.2.1 HTML的文本标签 7、字体的设置。 文字 标题内容 特定文字样式标签。如粗体标签、斜体标签、下划线标签。当然还有一些其他的样式标签,这里不做详细介绍。
  • 37. 2.2 文本与项目符号2.2.1 HTML的文本标签 8、HTML的特殊符号表示方法特殊或专用字符字符代码特殊或专用字符字符代码 < < © © > > × × & & ® ® " " 空格  
  • 38. 2.2 文本与项目符号2.2.2 HTML的项目列表 1: 2:
      3:
    1. 星期一 4:
    2. 星期二 5:
    3. 星期三 6:
    4. 星期四 7:
    8:
  • 39. 2.2 文本与项目符号2.2.2 HTML的项目列表
      类 型描 述type=”1”表示列表项目用数字标号(1,2,3…)type=”A”表示列表项目用大写字母标号(A,B,C...)type=”a”表示列表项目用小写字母标号(a,b,c...)type=”I”表示列表项目用大写罗马数字标号(Ⅰ,Ⅱ,Ⅲ...)type=”i”表示列表项目用小写罗马数字标号(i,ii,iii...)
    1. 40. 2.2 文本与项目符号2.2.2 HTML的项目列表
    2. (1)disc实心园 (2)circle空心园 (3)square小方块
    3. 41. 2.2 文本与项目符号2.2.2 HTML的项目列表 1: 2:
        3:
      • 一月 4:
      • 二月 5:
      • 三月 6:
      7;
    4. 42. 2.3 插入图片和超链接2.3.1 HTML中图片的插入
    5. 43. 2.3 插入图片和超链接标签的属性 属 性描 述src图像的url的路径alt提示文字width宽度 通常只设为图片的真实大小以免失真height高度 通常只设为图片的真实大小以免失真align图像和文字之间的排列属性border边框,以像素为单位hspace水平间距vlign垂直间距
    6. 44. 2.3 插入图片和超链接2.3.2 HTML中背景图片的使用
    7. 45. 2.3 插入图片和超链接2.3.3 HTML中的超链接 超链接名称属性值描 述_parent在上一级窗口中打开,一般使用分桢的框架页会经常使用_blank在新窗口打开_self在同一个桢或窗口中打开,这项一般不用设置_top在浏览器的整个窗口中打开,忽略任何框架
    8. 46. 2.3 插入图片和超链接2.3.3 HTML中的超链接 链接地址 URL(Uniform Resourc Locator)中文名字为“统一资源定位器”。 绝对路径与相对路径
    9. 47. 2.3 插入图片和超链接2.3.3 HTML中的超链接 超链接的应用 在站点内部建立链接 外部连接 电子邮件连接 页内连接
    10. 48. 2.4 表格的使用 2.4.1 定义表格的基本标签 标 签描 述...
      用于定义一个表格开始和结束...定义一行,一组行标签内可以建立多组由标签所定义的单元格...定义单元格,一组标签将建立一个单元格,标签必须放在标签内
    11. 49. 2.4 表格的使用 2.4.2 表格标签及其属性---- 属 性描 述Width表格的宽度,可用像素或比分比表示height表格的高度,可用像素或百分比表示align表格在页面的水平摆放位置background表格的背景图片bgcolor表格的背景颜色border表格边框的宽度(像素为单位),可设置为0bordercolor表格边框颜色bordercolorlight表格边框明亮部分的颜色
    12. 50. 2.4 表格的使用2.4.2 表格标签及其属性----
    13. 属 性 描 述 bordercolordark 表格边框昏暗部分的颜色 cellspacing 单元格之间的间距 cellpadding 单元格内容与单元格边界之间的空白距离的大小
    14. 51. 2.4 表格的使用 2.4.2 表格标签及其属性----
    15. 行的暗边框颜色bordercolordark行的亮边框颜色bordercolorlight行的边框颜色bordercolor行的背景颜色bgcolor行内容的垂直对齐valign行内容的水平对齐align描 述属 性
    16. 52. 2.4 表格的使用 2.4.2 表格标签及其属性----
    17. 单元格边框颜色bordercolor单元格的底色bgcolor单元格内字画等的摆放贴 位置(垂直),可选值为: top, middle, bottomvalign单元格内字画等的摆放贴,位置(水平),align单元格向下打通的列数rowspan单元格向右打通的栏数colspan单元格的宽和高,接受绝对值(如 80)及相对值(如 80%)。 width/height描 述属 性
    18. 53. 2.4 表格的使用 2.4.2 表格标签及其属性----
    19. 单元格 背景图片 background单元格边框背光部分的颜色bordercolordark描 述属 性单元格边框向光部分的颜色bordercolorlight
    20. 54. 2.5 创建表单2.5.1 HTML中的表单标记
      ...
    21. 55. 2.5 创建表单2.5.2 表单中的输入标记一个复选框,checked属性用来设置该复选框缺省时是否被选中,普通按钮,当这个按钮被点击时,就会调用JavaScript事件重置按钮。提交到服务器的按钮,当这个按钮被点击时,就会连接到表单form属性action指定的url地址。单行的文本输入区域,size与maxlength属性用来定义此种输入区域显示的尺寸大小与输入的最大字符数输入区域类型及说明type属性取值
    22. 56. 2.5 创建表单单选按钮类型,checked属性用来设置该单选框缺省时是否被选中输入密码的区域,当用户输入密码时,区域内将会显示"*"号使用图像来代替Submit按钮,图像的源文件名由src属性指定,用户点击后,表单中的信息和点击位置的X、Y坐标一起传送给服务器隐藏区域,用户不能在其中输入,用来预设某些要传送的信息输入区域类型及说明type属性取值 2.5.2 表单中的输入标记
    23. 57. 2.5 创建表单2.5.3 表单中的下拉列表框 2.5.4 表单中的多行文本框
    24. 58. 2.6 JavaScript简介JavaScript是一种轻型的、解释性的程序设计语言,而且具有面向对象的能力。该语言的通用核心已经潜入了Netscape、Internet Explorer和其他的Web浏览器中,它能使Web程序设计增色不少。JavaScript的客户端版本把可执行的内容添加到了网页中,这样一来,网页就不是静态的HTML了,而是包含与用户进行交互的程序、控制浏览器的程序以及动态的创建HTML内容的程序。
    25. 59. 2.6 JavaScript简介2.6.1 对JavaScript的误解 1、JavaScript是Java的一部分 对JavaScript最常见的误解是认为它是Sun Microsystems公司的程序设计语言Java的简化版本,但是除了语句上有一些相似之处以及都能提供网页中的可执行内容之外,JavaScript和Java是完全不相干的。相似的名称不过是一种行销策略罢了(该语言最初被称为LiveScript,后来才被该为JavaScript。
    26. 60. 2.6 JavaScript简介2.6.1 对JavaScript的误解 2、JavaScript只有客户端 这种说法是不全面的。JavaScript 分为三类:核心版、客户端JavaScript和服务器端 JavaScript,例如客户端是嵌入网页的,服务器端是嵌入Netscape网络服务器中的,当然,我们这本书只介绍客户端JavaScript,有兴趣的读者可以参考专门的JavaScript书籍。
    27. 61. 2.6 JavaScript简介2.6.2 客户端JavaScript的特性 1、控制文档的外观和内容 2、对浏览器的控制 3、与表单的交互
    28. 62. 2.7 JavaScript语法2.7.1 在什么地方插入 JavaScript 你可以在 HTML 文档的任意地方插入 JavaScript,甚至在之前插入也不成问题。一般的做法是将其插入到之间,我们也推荐你这样做。
    29. 63. 2.7 JavaScript语法2.7.1 在什么地方插入 JavaScript
    30. 64. 2.7 JavaScript语法2.7.2 JavaScript中的变量 1、JavaScript基本语法 <语句>; 其中分号“;”是JavaScript 语言作为一个语句结束的标识符。 语句块的概念 语句块是用大括号“{ }”括起来的一个或 n 个语句。在大括号里边是几个语句,但是在大括号外边,语句块是被当作一个语句的。语句块是可以嵌套的,也就是说,一个语句块里边可以再包含一个或多个语句块。
    31. 65. 2.7 JavaScript语法2.7.2 JavaScript中的变量 2、变量 var 变量名 [= <值>]; 变量的赋值 一个变量声明后,可以在任何时候对其赋值。赋值的语法是: <变量> = <表达式>;
    32. 66. 2.7 JavaScript语法2.7.3 表达式与运算符 表达式与数学中的定义相似,表达式是指具有一定的值的、用运算符把常数和变量连接起来的代数式。一个表达式可以只包含一个常数或一个变量。运算符可以是四则运算符、关系运算符、位运算符、逻辑运算符、复合运算符。
    33. 67. 2.7 JavaScript语法2.7.4 JavaScript中的语句 1、注释语句 单行注释用双反斜杠“//”表示。 多行注释是用“/*”和“*/”括起来的一行到多行文字。
    34. 68. 2.7 JavaScript语法2.7.4 JavaScript中的语句 2、条件语句 (1)if 语句 (2)switch 语句
    35. 69. 2.7 JavaScript语法2.7.4 JavaScript中的语句 3、循环语句 (1)for语句 for (<变量>=<初始值>; <循环条件>; <变量累加方法>) <语句>; (2)while语句 while (<循环条件>) <语句>;
    36. 70. 本章小结 本章中我们着重介绍了HTML源代码以及客户端JavaScript的应用,在HTML中,读者应掌握好HTML结构、字体、表格、表单等的书写方法,在JavaScript中,应重点掌握JavaScript在表单验证中的作用。
    37. 71. 练 习 题 1. 试写出HTML的字体、表格、表单的源代码; 2. 试写出JavaScript的条件语句、循环语句; 3. 完成JavaScript对表单输入内容的验证,并实现注册网页的功能;
    38. 72. 第3章 PHP服务器环境配置 3.1 PHP服务器概述 3.2 安装PHP前的准备工作 3.3 PHP5+IIS服务器安装配置 3.4 PHP5+APACHE服务器安装配置
    39. 73. 3.1 PHP服务器概述HTML网页的基本运行原理,即客户端通过浏览器向服务器发出页面请求,服务器收到请求后直接将所请求的页面发回给客户端,然后客户端就能在浏览器中看到页面的显示效果。这是一个比较简单、直接的过程,只需要一台安装了Web服务软件的服务器就能完成。
    40. 74. 3.1 PHP服务器概述PHP网站和用其他语言开发的动态网站运行原理基本相同,其流程 如下图:
    41. 75. 3.1 PHP服务器概述通过以上流程图可以看出,PHP程序通过Web服务器接收访问请求,在服务器端处理请求然后再通过Web服务器向客户端发送处理结果。在客户端接收到的只是程序输出的处理结果,是一些HTML标记,而无法直接看到PHP代码。这样能够很好的保证代码的保密性和程序的安全性。 此外,在服务器端运行代码还可以降低对客户端的要求,客户端不需要配置PHP环境,只需要安装普通浏览器即可浏览PHP网站。 PHP和其他服务器端嵌入式脚本语言一样,需要首先搭建专门的服务器环境。只有配置好服务器环境,一台服务器才能运行PHP网站。
    42. 76. 3.2 安装PHP前的准备工作 3.2.1软硬件环境 硬件的要求非常简单,在学习阶段你只要有一台普通计算机就足够了。 软件方面则需要根据自己的情况进行选择。我们主要从操作系统、Web服务软件两个方面来考虑。
    43. 77. 3.2 安装PHP前的准备工作 3.2.1软硬件环境 PHP能够运行在目前所有的主流操作系统上,包括 Linux、Unix及其各种变种(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows系列、Mac OS X、RISC OS 等。 PHP已经支持了大多数的Web服务器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd等。这些Web服务器各有特点,目前以Apache和IIS的使用最为广泛。
    44. 78. 3.2.2 获取PHP安装资源包PHP安装资源包中包括了安装和配置PHP服务器的一切文件以及大量PHP扩展函数库。 PHP安装资源包的获取有很多途径,比如登陆PHP官方网站下载,或者通过其他软件下载网站下载。 强烈建议到PHP的官方网站下载:http://www.php.net
    45. 79. 3.2.2 获取PHP安装资源包
    46. 80. 3.3 PHP5+IIS服务器安装配置 3.3.1 IIS简介及其安装 IIS(Internet Information Server)是目前使用较为广泛的Web服务器之一。它操作简单,使用方便,功能强大。IIS由微软公司开发,目前也只能运行在微软公司的Windows系列操作系统上。包括Windows2000、Windows XP及Windows Server 2003等版本。 部分版本的Windows操作系统如Windows 2000 Server、Windows Server 2003等,在安装系统时默认自动安装IIS。其他版本的则默认不安装。
    47. 81. 3.3 PHP5+IIS服务器安装配置 3.3.1 IIS简介及其安装 要检查自己的操作系统是否已经安装了IIS,可以打开控制面板,找到“管理工具”(Windows XP为“性能和维护”,然后找到“管理工具”),打开管理工具,看里面是否有“Internet信息服务管理器”的快捷方式。如果有,则证明IIS已经安装,否则可能没有安装。另外一个快捷的方法是直接打开开始菜单的“运行”窗口,输入“inetmgr”命令,回车运行,看是否能打开IIS管理界面,如果能打开,则表示已经安装了IIS,否则说明没有安装。
    48. 82. 3.3 PHP5+IIS服务器安装配置 3.3.1 IIS简介及其安装 安装IIS的方法:控制面板>“添加或删除程序”>“添加/删除Windows组件”>出现“Windows组件向导”界面
    49. 83. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 1、解压和拷贝 把下载的PHP安装资源包php5.1.6-win32.zip 解压,并拷贝到PHP的安装目录,这里我们假设为C:\php5\ 。
    50. 84. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini 在你的安装目录下,找到一个名为php.ini-dist的文件。这个文件就是PHP的配置文件。这个文件里面存储了所有PHP运行时所需要的参数。通过修改这个文件可以实现对PHP的自由控制。现在我们需要打开并编辑这个文件,注意,现在这个文件的扩展名是.ini-dist,需要首先把扩展名修改为.ini,然后记事本打开。打开之后,可以看到许多令人眼花缭乱的参数,但是我们需要修改的参数十分有限。
    51. 85. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini php.ini中的参数形式为:参数名 = 参数值 如session.auto_start = 0 ,前面的“session.auto_start”就是参数名,“0”就是参数值。
    52. 86. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini   1)首先找到short_open_tag 参数(可以用记事本的查找功能),这个参数用来设置是否可以使用
    53. 87. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini 2)找到register_globals 参数。这个参数相当重要。很多php初学者或者曾经使用PHP3版本的朋友会在这个地方遇到麻烦。它用来是设置是否允许PHP自动将外部提交的数据注册为全局变量,这是一个涉及到程序安全的参数。至于其如何影响程序安全,我们不再赘述,读着可以参阅相关资料,在这里我们建议您将它设置为off。如果以前就是off,则不需要做任何修改。
    54. 88. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini 3)找到extension_dir 参数 ,此参数设置PHP扩展函数库的查找路径。将其值相应修改为 “你的安装目录\ext\”。也就是本例中的“C:\php5\ext\”。
    55. 89. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini 4)找到file_uploads 参数 ,还有下面连续的两个upload_tmp_dir 和upload_max_filesize,这三个参数是用来控制有关文件上传的。分别表示的意思是: 是否允许文件上传(on/off),上传文件的暂存路径、上传文件的最大字节数。这个你可以根据自己的需要来修改和填写,也可以使用默认值。upload_tmp_dir 最好填写,以保证将来可以顺利用PHP实现上传文件功能。我们可以在C:\php5\下创建一个UPLOADS文件夹,并将upload_tmp_dir设置为“C:\php5\UPLOADS\”。此处的文件夹可以任意指定,但必须保证指定的文件夹存在。
    56. 90. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 2、配置php.ini  5)找到 session.save_path 参数 ,这个参数用来设置Session的保存路径,我们在后面的章节中会详细讲解Session的使用。我们可以指定任意一个目录来存放Session,在本例中,我们不妨设置为“C:\php5\sessions\”。当然这个目录也必须首先创建。接着往下看几行,找到session.auto_start 参数 ,对于初学者,我们强烈建议将它设置为 1 ,这样服务器一启动,便自动支持Session,在编写代码时就可以不必手工开启它。
    57. 91. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 3、添加系统变量 1)进入控制面板并打开“系统”图标(或在桌面的“我的电脑”图标上点击鼠标右键,选择“属性”)。 2)选择“高级”标签页,点击“环境变量”按钮,打开环境变量设置窗口。如图所示。
    58. 92. 3.3 PHP5+IIS服务器安装配置 3.3.2 PHP的安装 3、添加系统变量 3)在“系统变量”栏中找到“Path”这一项,选中此项并点击“编辑”按钮,出现变量修改对话框,如图所示。在“变量值”一栏的后面将你的PHP安装目录添加上。本例中就是“;c:\php5”。注意不要遗漏了分号“;”,这个分号的作用是与前面的一个路径分隔开来。 4)依次点击“确定”按钮关闭窗口,然后重新启动计算机(必需重新启动,注销无效)。
    59. 93. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 打开控制面板,找到“管理工具”-> “Internet 信息服务”。(Windows XP系统为控制面板->性能和维护->管理工具) 或者直接在“开始”->“运行”中输入inetmgr命令,回车运行,打开IIS管理器,如图所示:
    60. 94. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 在管理器左侧的目录树中找到“默认网站”,在上面点击鼠标右键,在菜单中选择“属性”,打开“默认站点属性”对话框。点击对话框上方选项卡中的的“主目录”标签,切换到主目录面板,如图所示:
    61. 95. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 然后点击面板下方的“配置”按钮,进入“应用程序配置”窗口,选择选项卡中的“映射”标签,打开应用程序映射配置面板,如图所示:
    62. 96. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 点击面板上的“添加”按钮,我们来添加一个.php文件扩展名的映射。在打开的“添加/编辑应用程序扩展名映射”的窗口中,在“可执行文件”中选择“浏览”,找到刚才的PHP安装路径“C:\php5\php5isapi.dll”(如果你打开了这个目录,没有找到这个文件,那一定是你在打开文件对话框中没有选择文件类型为“所有文件”或*.dll文件),然后在下面的“扩展名”中填入您想使用的php程序的扩展名,可以使用“.php”,“.php5”等等,这个完全看您自己的爱好。还要注意下面的“脚本引擎”和“检查文件是否存在”前面要打勾选中。如图所示:
    63. 97. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 重新启动IIS 在开始->运行中输入“net stop iisadmin”命令,回车运行。按照提示输入Y,回车,稍等之后IIS 就已停止。然后再在运行中输入“net start w3svc”命令,回车运行,稍作等待之后IIS就已启动完成。至此,IIS与PHP的关联工作大功告成! 在开始->运行中输入“IISreset”命令
    64. 98. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 如果你使用Windows2000系统(IIS5.0版本),那么建立关联的方法和上面所讲的几乎完全相同。只有些许细微差别,读者可以自行试验一下。如果你使用Windows Server 2003系统(IIS6.0版本),那么你还需要进行一个步骤,就是添加应用程序扩展。方法如下:
    65. 99. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 打开IIS管理器,在左侧目录树中找到“Web服务扩展”项目,选择“添加一个新Web扩展”,如图。
    66. 100. 3.3 PHP5+IIS服务器安装配置3.3.3 将PHP与IIS建立关联 在打开的“新建Web服务扩展”对话框中,在“扩展名”中输入“php”,在“要求的文件”中点击“添加”按钮,选择PHP安装目录下的php5isapi.dll,并将下面的“设置扩展状态为允许”勾选,如图所示: 这时点击“确定”,可以看到右侧的“Web服务扩展”列表中已经有了名为“php”且状况为“允许”的服务扩展。至此,PHP与IIS的关联工作全部完成!
    67. 101. 3.3 PHP5+IIS服务器安装配置3.3.4 设置主目录和虚拟目录 所谓主目录,就是服务器的默认站点在服务器上的存放位置。比如某服务器IP地址为10.0.0.10,那么当我们输入http://10.0.0.10这个地址来访问网站时,服务器如何知道网站存放的位置呢?假设网站存放在D:\wwwroot\目录下,我们只要在IIS中将主目录设置为D:\wwwroot\,那么在访问http://10.0.0.10这个地址时IIS会自动到此目录下去搜索文件。比如我们写好了程序index.php,我们将其存放在D:\wwwroot\,这时我们只需要输入http://10.0.0.10/index.php即可看到该程序的运行结果。
    68. 102. 3.3 PHP5+IIS服务器安装配置3.3.4 设置主目录和虚拟目录 1、IIS服务器主目录设置
    69. 103. 3.3 PHP5+IIS服务器安装配置3.3.4 设置主目录和虚拟目录 2、IIS虚拟目录设置 虚拟目录访问的方式是在服务器地址后面加一个虚拟目录名。如“http://localhost/虚拟目录名/”。 虚拟目录之所以称之为“虚拟”,还有另外一层含义。那就是通过地址栏里的访问地址,无法确定网页的存放位置。比如“http://localhost/bbs/”这个地址,无法确定“/bbs”这个目录是主目录下面的一个子目录还是一个虚拟目录。因为虚拟目录可以存在于服务器上的任何位置,因此这就隐藏了实际的网页存储位置。有时候这对于网站安全有所帮助。
    70. 104. 3.3 PHP5+IIS服务器安装配置3.3.4 设置主目录和虚拟目录 2、IIS虚拟目录设置 创建一个虚拟目录的步骤如下: 打开IIS管理器,展开“网站”,在“默认网站”上点击右键,选择“新建”->“虚拟目录”菜单。打开“新建虚拟目录向导”。如图所示。
    71. 105. 3.3 PHP5+IIS服务器安装配置3.3.4 设置主目录和虚拟目录 2、IIS虚拟目录设置 虚拟目录创建完成后,我们的网页,不论是HTML静态网页还是PHP程序,都可以放在“D:\wwwroot\”目录下,然后用“http://localhost/ceshi/文件名”这样的地址访问即可!
    72. 106. 3.3 PHP5+IIS服务器安装配置3.3.5 编写并运行一个PHP测试程序 PHP环境信息   
    73. 107. 3.4 PHP5+APACHE服务器安装配置 3.4.1 APACHE简介 Apache是目前世界上使用最为广泛的Web服务器之一,根据NetCraft所作的调查,世界上百分之五十以上的Web服务器都在使用Apache。 1995年4月,最早的 Apache 0.6.2版由Apache Group公布发行。 Apache Group 是一个完全通过Internet进行运作的非盈利机构, 由它来决定Apache web服务器的标准发行版中应该包含哪些内容。Apache为开放源代码软件,允许任何人对其修改、扩充、更新。
    74. 108. 3.4 PHP5+APACHE服务器安装配置 3.4.1 APACHE简介 和其他服务器相比,Apache拥有以下主要特性: 1) 几乎可以运行在所有的计算机平台上。 2) 支持最新的http/1.1协议。 3) 简单而且强有力的基于文件的配置(httpd.conf)。 4) 支持通用网关接口(CGI) 、FASTCGI。支持虚拟主机,支持http认证.。 5) 具有用户会话过程的跟踪能力。 6) 支持Java Servlets。 7)运行效率高,成本低。
    75. 109. 3.4 PHP5+APACHE服务器安装配置 3.4.2 Apache的获取 由于Apache也是免费软件,因此有很多途径可以获取Apache的安装文件。最稳妥的方法当然还是从其官方网站直接下载。Apache的官方网站是http://www.apache.org。
    76. 110. 3.4 PHP5+APACHE服务器安装配置 3.4.3 APACHE的安装 双击启动Apache安装程序,出现软件的欢迎界面 点击“Next”按钮,出现Apache许可协议,阅读完毕许可协议之后选择“I accept the terms in the license agreement”,表示接受许可协议中的条款 再点击“Next”,出现Apache服务器注意事项,阅读完毕后点击“Next”,出现服务器信息设置界面。如图所示。
    77. 111. 3.4 PHP5+APACHE服务器安装配置 3.4.3 APACHE的安装 此处要求设置一些服务器基本信息。分别是网络域名、服务器名、管理员信箱以及Apache的工作方式。如果只是在自己的机器上使用Apache,前三个选项可以保持空白,不需要设置。第四个选项有两种选择,我们建议选择第一项,也就是“针对所有用户,工作在80端口,安装为服务”。安装为服务的意思是将Apache安装为Windows的一个服务,当机器启动时自动启动Apache。
    78. 112. 3.4 PHP5+APACHE服务器安装配置 3.4.3 APACHE的安装 设置完成之后,点击“Next”进入下一步。这时出现安装类型窗口,在这里有“Typical”和“Custom”即“典型安装”和“用户自定义安装”两种选择,对于对Apache不太熟悉的初学者,我们建议直接使用“典型安装”。
    79. 113. 3.4 PHP5+APACHE服务器安装配置 3.4.3 APACHE的安装 继续点击“Next”,出现Apache安装位置选择窗口。Apache默认被安装到C:\Program Files\Apache Group\目录下。如果你希望安装在其他位置,可以点击“Change”按钮来选择另外一个位置。我们这里采用默认位置,点击“Next”,这时出现“安装准备已就绪”窗口。如果你不需要对前面进行过的步骤做修改,就可以直接点击“Install”按钮开始安装Apache。安装开始后会出现安装进度条,如图所示
    80. 114. 3.4 PHP5+APACHE服务器安装配置 3.4.3 APACHE的安装 全部安装进行完成后,会出现安装成功的提示窗口,点击“Finish”按钮结束安装程序,Apache的安装完成了!为了验证我们的安装是否成功,打开浏览器,在地址栏中输入http://localhost/或者http://127.0.0.1/,这时如果看到图所示的页面,那么说明你的Apache已经成功安装并开始服务了!
    81. 115. 3.4 PHP5+APACHE服务器安装配置 3.4.4 将PHP与APACHE建立关联 在将PHP与Apache建立关联之前,首先应该保证PHP已经被成功地安装。安装过程参考本章3.3.2一节。我们接下来的所有工作都是建立在此基础之上的。PHP安装好之后就可以按照以下步骤对Apache进行配置。
    82. 116. 3.4 PHP5+APACHE服务器安装配置 3.4.4 将PHP与APACHE建立关联 1、找到Apache配置文件。
    83. 117. 3.4 PHP5+APACHE服务器安装配置 3.4.4 将PHP与APACHE建立关联 2、修改Apache主目录。 在httpd.conf中找到“DocumentRoot”参数,将其值修改为D:/wwwroot/。 从图中可以看出,Apache的配置文件与PHP的形式上有所不同。PHP配置文件中以“=”作为参数名和参数值的分隔符,而Apache中使用空格。还有一点就是PHP配置文件中表示路径时目录分隔符用“\”,而Apache中用“/”,这一点必须注意,不要因为粗心大意导致配置失败。
    84. 118. 3.4 PHP5+APACHE服务器安装配置 3.4.4 将PHP与APACHE建立关联 3、向Apache中加入PHP模块 有两种方式可以将PHP与Aapche建立关联,一种是CGI方式,另一种是模块方式。这里我们采用的是模块方式。在httpd.conf中任意位置插入以下两句代码: LoadModule php5_module "c:/php5/php5apache2.dll" AddType application/x-httpd-php .php 第一句代码的作用是使得Apache在启动时载入PHP模块。 第二句的作用是使Apache能够识别.php的扩展名。必须注意的是第一条语句中的php5apache2.dll,容易错写成php5apache.dll,因为在PHP的安装目录下这两个文件都存在。之所以这里要使用php5apache2.dll是因为我们采用的Apache版本为2.0.59,属于Apache2.0.x系列。如果使用的Apache版本是1.3.x,那么此处就应该使用php5apache.dll。 HP模块。
    85. 119. 3.4 PHP5+APACHE服务器安装配置 3.4.4 将PHP与APACHE建立关联 指定php.ini文件的存放路径 Apache中还有另外一个重要参数,用来指定php.ini文件的存放位置。由于我们的PHP安装在了c:\php5,php.ini的位置就是c:\php5\php.ini。在httpd.conf中任意位置加入下面一条语句: PHPIniDir "C:/php5" 或者 PHPIniDir "C:/php5/php.ini"
    86. 120. 3.4 PHP5+APACHE服务器安装配置 这样一来,PHP便知道到何处去搜索php.ini,这样php.ini中的设置才能生效。添加完成后如图3-30所示:
    87. 121. 案例二 将本地机器配置成PHP服务器,并显示出PHP配置信息 一、案例分析 本案例要求读者将自己使用的本地计算机配置成为PHP服务器,并编写程序显示PHP配置信息。对于此案例,应首先根据自己本地计算机所使用的操作系统来选择PHP版本和服务器软件。如果使用Windows操作系统,则一般选用IIS或Apache作为服务器软件。然后按照所学内容,安装配置PHP,然后将PHP与服务器软件建立关联。最后书写一个简单程序来输出PHP配置信息。
    88. 122. 案例二 将本地机器配置成PHP服务器,并显示出PHP配置信息 二、实施步骤 参照本章所讲内容,完成以下步骤: 1、下载合适的PHP版本。 2、按步骤完成PHP的安装工作。 3、下载安装服务器软件。 4、将服务器软件与PHP建立关联。 5、设置好本地服务器的主目录和虚拟目录 6、编写一个PHP程序并运行,输出PHP配置信息。
    89. 123. 本章小结本章中我们着重介绍了PHP服务器环境搭建的方法。并以PHP+IIS和PHP+Apahce为例详细讲解了Windows平台上的PHP服务器搭建过程。对PHP的配置和Apache的配置作也作了一定介绍。尤其是主目录和虚拟目录的设置。读者通过本章的学习,应能熟练掌握PHP与IIS/Apache搭配的服务器配置方法。
    90. 124. 练 习 题 1. 试描述PHP程序的运行流程。 2. 目前常用的服务器软件有哪些? 3. 如何将PHP与Apache建立关联? 4. 主目录下面的子目录和虚拟目录有何不同?
    91. 125. 第4章 PHP5的基本语法 4.1 PHP语法概述 4.2 PHP的常量和变量 4.3 PHP的运算符和表达式 4.4 PHP的流程控制 4.5 PHP的系统函数与自定义函数 4.6 PHP5的类与对象
    92. 126. 4.1 PHP语法概述4.1.1 一个简单的PHP程序 "hello, world!" 几乎已经变成了所有程序语言的第一个范例。因此,在这儿也不例外,我们就先用 PHP 来写一个输出 "hello, world!"的简单的PHP程序。
    93. 127. 4.1 PHP语法概述4.1.1 一个简单的PHP程序 1: 2: 3: 4: First program 5: 6: 7: 10: 11:
    94. 128. 4.1 PHP语法概述4.1.1 一个简单的PHP程序 我们再来通过浏览器窗口“查看=>源文件”操作来查看其源文件如下: First program for PHP hello, world!
    95. 129. 4.1 PHP语法概述4.1.2 PHP嵌入HTML的方式 1、利用分界符“” 这是PHP最为普通的嵌入方式强烈建议使用此方式,这种写法可以为你的程序在跨平台使用时减少不必要的麻烦! 2、利用分界符“” 这种方式是简写方式,必需在php.ini文件中将shor_open_tag设置为On(PHP5中默认设置为On),否则编译器将不予解析。 3、利用分界符“” 这是类似于JavaScript和VBScript风格的嵌入方式 4、利用分界符“<%”和“%>” 这是一种具有ASP风格的嵌入方式,必须在“php.ini”文件中设置asp_tags为On,否则编译器将不予解析。 强烈建议少用这种方法,因当 PHP 与 ASP 源代码混在一起时就麻烦喽!
    96. 130. 4.1 PHP语法概述4.1.2 PHP嵌入HTML的方式 友情提示:其实,在编写 PHP 程序最好的方法,是先处理好纯 HTML 格式的文件之后,再将需要变量或其它处理的地方改成 PHP 程序。这种方法,可以让您在开发上达到事半功倍的效果。
    97. 131. 4.1 PHP语法概述4.1.3 PHP程序的注释方法 在 PHP 的程序中,加入注释的方法很灵活。可以使用 C 语言、C++ 语言或者是 UNIX 的 Shell 语言的注释方式,而且也可以混合使用。具体方法如下: 1、“//” :这是从C++语法中借鉴来的,该符号只能注释一行。 2、“/*”和“*/” :这是C语言的注释符,符号之间的都将被注释掉。 2、“#” :这是UNIX 的 Shell 语言风格的注释符,也只能注释一行。
    98. 132. 4.1 PHP语法概述4.1.4 PHP的文件引用 引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。 require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。 include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
    99. 133. 4.1 PHP语法概述4.1.4 PHP的文件引用 下面我们先建立一个名为“4-4.php”的文件,输入如下代码: 1: 2: 3: 4: PHP文件的引用 5: 6: 7: "; 9: include ("include.msp"); 10: //引用同目录下名为“include.inc”的php文件 11: ?> 12: 13:
    100. 134. 4.1 PHP语法概述4.1.4 PHP的文件引用 然后我们再建立一个名为“include.msp”的文件,其代码如下: 1: 2:
    101. 135. 4.1 PHP语法概述4.1.4 PHP的文件引用 友情提示:“include.msp”为被引用的文件名,只要保证该文件的类型为文本类型,它的名字可以任意命名,包含其后缀。这样你是不是可以作出很有个性的文件呢?
    102. 136. 4.2 PHP的常量和变量 4.2.1 PHP的常量类型 PHP的常量包含两种:一种是系统预定义常量,另一种是自定义常量。 PHP中预定了很多系统常量,这些系统常量可以很好地帮助我们了解系统当前的情况,而且这些常量可以随时调用。具体列举如下:
    103. 137. 4.2 PHP的常量和变量 4.2.1 PHP的常量类型 1、__FILE__ 这个默认常量是 PHP 程序文件名。若引用文件 (include 或 require)则在引用文件内的该常量为引用文件名,而不是引用它的文件名。 2、__LINE__ 这个默认常量是 PHP 程序行数。若引用文件 (include 或 require)则在引用文件内的该常量为引用文件的行,而不是引用它的文件行。 3、PHP_VERSION 这个内建常量是 PHP 程序的版本,如 '3.0.8-dev'。 4、PHP_OS 这个内建常量指执行 PHP 解析器的操作系统名称,如 'Linux'。 5、TRUE 这个常量就是真值 (true)。
    104. 138. 4.2 PHP的常量和变量 4.2.1 PHP的常量类型 6、FALSE 这个常量就是伪值 (false)。 7、E_ERROR 这个常量指到最近的错误处。 8、E_WARNING 这个常量指到最近的警告处。 9、E_PARSE 本常式为解析语法有潜在问题处。 10、E_NOTICE 这个常式为发生不寻常但不一定是错误处。例如存取一个不存在的变量。 这些 E_ 开头形式的常量,可以参考 error_reporting() 函数,有更多的相关说明。
    105. 139. 4.2 PHP的常量和变量 4.2.1 PHP的常量类型 1: 2: 3: 4: PHP预定义常量 5: 6: 7: "; 10: echo(__FILE__); 11: echo "

      "; 12: echo(__LINE__); //输出12 13: echo "

      "; 14: echo PHP_VERSION; 15: echo "

      "; 16: echo PHP_OS; 17: ?> 18: 18:

    106. 140. 4.2 PHP的常量和变量 4.2.1 PHP的常量类型 当然我们在实际编写程序时,仅使用以上的系统预定义常量是不够用。define() 的功能可以让我们自行定义所需要的常量。用法详见下例: 1: 2: 3: 4: PHP定义常量 5: 6: 7: 11: 12:
    107. 141. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 PHP中预先定义了很多变量,我们可以随时在脚本中引用。PHP的预定义变量将在后面的章节和附录中涉及到。我们下面主要讲解自定义变量。 PHP 的变量类型不多,有以下五种: ①string :字符串 ②integer :整型 ③double (floating point number):双精度型(浮点型) ④boolean : 布尔型 ⑤array :数组 ⑥object :对象
    108. 142. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 PHP的变量属于松散的数据类型,具体使用时应注意以下几点: ①变量名要以“$”开头,且区分大小写; ②变量不必要预先定义或声明; ③变量在使用时编译器可动态进行类型指定和转换; ④变量如果未赋值而直接使用,变量值将被视为空; 友情提示:最好使用相同的变量命名风格,以免在团队合作或自己查找错误的时候因变量大小的问题,浪费许多无谓的时间,那就得不偿失了。变量之间若要转换类型,当然是很自由的,但浮点数转成整数就有点牵强了,不过可以将浮点数转成字符串,也是很好处理的。
    109. 143. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 1、字符串(string) 无论是单一字符或数千字的字符串都是使用这个变量类型。值得注意的是要指定字符串给字符串变量时,要在头尾都加上双引号或单引号 (例如: “这是字符串”或’这是字符串’)。而且在PHP中也提供一些转移字符,用以辅助那些已经被程序语法结构占用了的特殊字符,其列表如下:
    110. 144. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 1、字符串(string) 友情提示:以上的转义字符PHP中'和"是不一样的,而且也可能无效,在使用时一定要测试通过了之后再用哦!再比如若“\n”换行无效,你可以使用“
      ”来换行。转移字符含 义\"双引号\\反斜线\n换行\r回车\t制表符 (TAB)\$美元符号($)\x两位数字表示十六进位字符
    111. 145. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 2、整型(integer): 在 32 位的操作系统中,它的有效范围是 -2,147,483,648 到 +2,147,483,647。要使用 8 进位整数可以在面加 0(零),要使用 16 进位整数可以在面加 0x。如: ①$int1=1234 //十进制正整数 ②$int1=-1234 //负整数 ③$int1=01234 //八进制整数 ④$int1=0x1234 //十六进制整数
    112. 146. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 3、双精度型(浮点型)(double (floating point number)) 在 32 位的操作系统中,它的有效范围是 1.7E-308 到 1.7E+308。如: ①$float1=666.66 ②$float2=6.6666e2 //表示6.6666乘以10的2次方,为指数形式的浮点数 应当注意的是,浮点型变量显示所用的十进制数的个数由php.ini文件中的precision定义,预定值为12,即浮点数的最长为14个数字。
    113. 147. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 4、布尔型(boolean) 布尔型也就是逻辑型,其值非真即假,只要用于条件表达式和逻辑表达式中,用以控制程序流程。这种类型是从PHP4种才开始存在的。通常 1 即为 true,0 为 false。 要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。
    114. 148. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 例:文件4-7.php:PHP变量的使用=>字符串、整型、浮点型、布尔型
    115. 149. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 5、数组(array) 数组变量可以是一维、二维或者更多维数组,其中的元素也很自由,可以是字符串、整型、浮点型、布尔型,甚至是数组或则对象。PHP还同时支持以数字为下标的索引数组(scalar array)和以字符串为下标的关联数组(associative array),这二者虽没有任何区别,但也算得上是PHP比别的语言特别的地方之一吧!在PHP中可以使用list()函数或者array()函数来创建数组,也可以直接进行赋值。
    116. 150. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 5、数组(array) 用array()函数创建数组的方法如下例: 文件4-8.php:用array()函数创建PHP数组 文件4-9.php:逐一给数组元素赋值 文件4-10.php:数组元素简洁赋值-
    117. 151. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 5、数组(array) PHP中多维数组与一维数组的区别在于多维数组有两个或多个下标,他们的用法基本上是一样的。下面的例子就是采用逐一给二维数组元素赋值的方法来创建和使用二维数组的。
    118. 152. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 5、数组(array) 文件4-11.php:多维数组的逐一赋值法 文件4-12.php:用嵌套的array()函数创建PHP数组
    119. 153. 4.2 PHP的常量和变量 4.2.2 PHP的变量类型 6、对象(object) object 为对象类型变量,目前在 PHP 中的默认类并不是太多,不过相信有了大家的努力一定会丰富起来的。我们将在4.6节中单独讲解对象的使用。
    120. 154. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 PHP的运算符大部分是从C语言中借用而来的,共分以下几类: 算术运算符:+、-、*、/、%、++、-- 字符串运算符:. 赋值运算符:=、+=、-=、*=、/=、%=、.= 位运算符:& 、| 、^ 、<< 、>> 、~ 逻辑运算符:&& (And) 、|| (Or) 、xor (Xor) 、! (Not) 比较运算符:< 、> 、<= 、>= 、== 、===、!= 其他运算符:$、& 、@ 、-> 、=>、? :
    121. 155. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 1、算术运算符号 就是用来处理四则运算的符号,这是最简单,也最常用的符号,尤其是数字的处理,几乎都会使用到算术运算符号. 例:文件4-13.php:算术运算符的应用 符号意义+加法运算-减法运算*乘法运算/除法运算%取余数++累加--累减
    122. 156. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 友情提示:PHP中的除法运算得到的结果是整数就是整数,是实数就是实数。PHP中的求模运算会对两操作数自动取整。另外,在PHP中字符也可以进行自增运算,这样是不是就可做成选择题的a、b、c、d选项序号呢?
    123. 157. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 2、字符串运算符 字符串运算符号只有一个,就是英文的句号“.”。它可以将字符串连接起来,变成合并的新字符串,也可以将字符串与数字连接,这时类型会自动转换, 具体用法见实例:文件4-14.php:字符串运算符的应用
    124. 158. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 3、赋值运算符 符号意义=将右边的值赋给左边的变量+=将左边的值加上右边的值赋给左边的变量-=将左边的值减去右边的值赋给左边的变量*=将左边的值乘以右边的值赋给左边的变量/=将左边的值除以右边值赋给左边的变量%=将左边的值对右边取余数赋给左边的变量 .=将左边的字符串连接到右边
    125. 159. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 4、位运算符 PHP中的位运算符有6个,常用于二进制的运算场合,其具体含义如下: 符号意义&按位与|按位或^按位异或<<按位左移>>按位右移~按位取反
    126. 160. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 4、位运算符 其中“~”是单目运算符,其他的都是双目运算符。与、或、异或和取反的运算规则如下: 0&0=0 0&1=0 1&0=0 1&1=1 (与:有假就假,都真才真) 0|0=0 0|1=1 1|0=1 1|1=1 (或:有真就真,都假才假) 0^0=0 0^1=1 1^0=1 1^1=0 (异或:相等为假,不等为真) ~0=1 ~1=0 友情提示:在对十进制进行位运算时要先转为二进制,然后按上述规则进行计算。
    127. 161. 4.3 PHP的运算符和表达式5、逻辑运算符 逻辑运算通常用来测试真假值。逻辑运算经常用在条件判断和循环处理中,用来判断条件是否满足和是否该离开循环或继续执行循环。逻辑运算符的具体含义如下: 符号意义&& (and)逻辑与|| (or)逻辑或xor逻辑异或!逻辑非
    128. 162. 4.3 PHP的运算符和表达式5、逻辑运算符$x$y$x && $y$x || $y$x xor $y!$x000001010111100110111100
    129. 163. 4.3 PHP的运算符和表达式 4.3.1 PHP的运算符 6、比较运算符 比较运算符和逻辑运算的用法差不多,通过比较大小来测试真假值,经常用在条件判断和循环处理中,用来判断条件是否满足和是否该离开循环或继续执行循环。比较运算符的具体含义如下: 友情提示:“===”为PHP 4 中新增的比较运算符,用于类型判等。例如:”3”===3将判为假。其他的比较运算符和C语言的基本一致,这儿就不再多说了。 符号意义<小于>大于<=小于或等于>=大于或等于==等于(不包括类型)===完全相等(包括类型)!=不等于
    130. 164. 4.3 PHP的运算符和表达式4.3.1 PHP的运算符 7、其他运算符: 其中比较特殊的是三目运算符“ ? : ”,例如: (expr1) ? (expr2) : (expr3); 表示如果expr1的运算结果为true,则执行expr2;否则执行expr3。实际上它有点类以 if...else 循环,但可以让程序较精简有效率。 此外,还有用于新对象的定义符new、用于数组下标引用的方括号“[]”、表示结合性的大括号“{}”等。 友情提示:PHP中的运算符是十分丰富的,而且使用起来也很灵活,希望大家多多上机实践练习哦! 符号意义$用于定义变量&变量的地址 (加在变量前引用变量)@屏蔽错误信息 (加在函数前)->引用对象的方法或者属性=>用于给数组元素赋值? :三目运算符
    131. 165. 4.3 PHP的运算符和表达式4.3.1 PHP的运算符 8、运算符优先级与结合性
    132. 166. 优先级结合方向运算符附加信息1(最高)非结合newnew2左[array()3非结合++ --递增/递减运算符 4非结合! ~ - (int) (float) (string) (array) (object) @类型 5左* / %算数运算符 6左+ - .算数运算符和字符串运算符7左<< >>位运算符 8非结合< <= > >=逻辑运算符 9非结合== != === !==逻辑运算符 10左&位运算符和引用11左^位运算符 12左|位运算符 13左&&逻辑运算符 14左||逻辑运算符 15左? :三元运算符 16右= += -= *= /= .= %= &= |= ^= <<= >>= 赋值运算符 17左and逻辑运算符 18左xor逻辑运算符 19左or逻辑运算符 20左,多处用到
    133. 167. 4.3 PHP的运算符和表达式4.3.2 PHP的表达式 表达式,就是由操作数、操作符以及括号等所组成的合法序列。简单地说,PHP中的常量或变量通过运算符连接后就形成了表达式,例如“$a=1”为一个表达式。表达式也有值,如上面的这个表达式的值就是1。 根据表达式中运算符类型的不同我们又可以把表达式分成:算术表达式、字符串连接表达式、赋值表达式、位运算表达式、逻辑表达式、比较表达式、其他表达式等。 最常见的表达式是比较表达式和逻辑表达式,这种表达式的值只能是真或假,在下面一节的流程控制中,会大量使用这两种表达式。 友情提示:“$a=1”为表达式,“$a=1;”则为一条语句。一定要分清楚哦!
    134. 168. 4.4 PHP的流程控制 在任何一种编程语言中,所有的程序都由3种基本的结构组成,即:顺序结构、分支结构、循环结构。 程序是由若干的语句组成的,如果在程序中的语句的执行顺序是从上到下依次逐句执行的,那么这个程序的结构就是顺序结构,在这种结构中没有分支和反复,这也是最简单、最常见的流程结构,我们这里就不再多讨论。
    135. 169. 4.4 PHP的流程控制 PHP中提供了4条流程控制语句来实现分支结构和循环结构,即: ①if……else…… 条件语句 ②switch 分支选择语句 ③do……while…… 循环语句 ④for 循环语句 此外PHP还提供了break语句和continue语句,用以跳出分支结构或循环结构,下面我们就将这些语句逐一进行详细的介绍。
    136. 170. 4.4 PHP的流程控制 4.4.1 if……else……语句 if……else……语句共有三种基本结构,此外每种基本结构还可以嵌套另外两种结构,而且嵌套的层次也可以不止是一层。
    137. 171. 4.4 PHP的流程控制 4.4.1 if……else……语句 1、只有if的语句 这种结构可以当作单纯的判断,可解释成 "若某条件成立则去做什么事情"。语法如下: if (expr) { statement }
    138. 172. 4.4 PHP的流程控制 4.4.1 if……else……语句 1、只有if的语句 这种结构可以当作单纯的判断,可解释成 "若某条件成立则去做什么事情"。语法如下: if (expr) { statement } 其中的 expr 为判断的条件表达式,通常都是有比较表达式或逻辑表达式来充当,而 statement 为符合条件的执行语句部分程序,若程序只有一行,可以省略大括号 {}。如果expr 为真,则执行statement 语句或语句体。
    139. 173. 4.4 PHP的流程控制 4.4.1 if……else……语句 2、if……else……语句 这种结构可解释成 "若某条件成立则去做什么事情,否则去做什么事情"。其语法如下 if (expr) { statement1 } else { statement2 }
    140. 174. 4.4 PHP的流程控制 4.4.1 if……else……语句 3、else if语句 前面的两种分支结构只能实现二路分支,用包含else if的语句则可以实现多路分支,其语法如下: if (expr1) { statement1 } else if(expr2) { statement2 } else if …… else { statementn }
    141. 175. 4.4 PHP的流程控制 4.4.1 if……else……语句 例:文件4-15.php:if……else……的应用 在上述3种基本结构中,如果在statement语句体中还有if……else……语句,就构成嵌套的if……else……语句。 友情提示:在使用嵌套的if……else……语句时,一定要注意else和if的匹配、{和}的匹配。只有else语句没有if的语句是不存在的。
    142. 176. 4.4 PHP的流程控制 4.4.2 switch语句 嵌套的if……else……语句可以处理多分支流程情况,但使用起来比较繁琐而且分析也不太清晰,为此PHP中又引进了switch语句。其语法如下 switch (expr) { case expr1: statement1; break; case expr2: statement2; break; : : default: statementN; break; } 其中的 expr 条件,通常为变量名称。而 case 后的 exprN,通常表示变量值。冒号后则为符合该条件要执行的部分。一定要注意break为跳离循环,千万不能省略不写。
    143. 177. 4.4 PHP的流程控制 4.4.2 switch语句 例:文件4-16.php:switch的应用 友情提示:在设计switch语句时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。
    144. 178. 4.4 PHP的流程控制 4.4.3 do……while……语句 在PHP中,do……while……循环语句有两种结构,一种只有while……部分,另一种是do……while……两部分都有。 1、只有while……部分的语句 其语法如下 while (expr) { statement } do { statement } while (expr); 2、do……while……两部分都有的语句 其语法如下:
    145. 179. 4.4 PHP的流程控制 4.4.3 do……while……语句 其中的 expr 为判断的条件,通常都是用逻辑表达式或比较表达式充当判断的条件。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。 二者的区别在于:前者是先判断再执行,后者是先执行再判断。对于expr开始为真的情况,而且是没有区别的。如果expr开始为假,则前者不执行任何语句就跳出循环,而后者仍要执行一次循环才能跳出循环。
    146. 180. 4.4 PHP的流程控制 4.4.3 do……while……语句 例:文件4-17.php:do……while……的应用
    147. 181. 4.4 PHP的流程控制 4.4.4 for语句 For语句仅有单纯的一种,没有其他变化,但同时他也是最复杂,功能最强大得循环,任何while循环和do……while……循环都可以用for循环代替,其语法如下: for (expr1; expr2; expr3) { statement } 其中expr1为条件的初始值,expr2为判断的条件,通常都是用比较表达式或逻辑表达式充当判断的条件,expr3为执行statement后要执行的部份,即循环步长,用来改变条件,供下次的循环判断,如加1、减1等等。而 statement 为符合条件后执行的语句或语句体,若statement只有一条语句组成,则可以省略大括号 {}。
    148. 182. 4.4 PHP的流程控制 4.4.4 for语句 例4-17程序的主体部分可以用for循环改写如下: "; } ?>"; } ?>10) break; //循环标志结束,跳出循环 echo $i.". 以后不敢了
      "; } ?>"; $i++; } ?>
    149. 183. 4.4 PHP的流程控制 4.4.5 break和continue语句 我们在switch和for语句的举例中都用到了break语句,他的作用就是跳出整个的switch或for语句体,执行其外的下面的语句。而continue经常用在for或do……while……循环语句中,表示跳出本次循环,继续进入下一次的循环。
    150. 184. 4.4 PHP的流程控制 4.4.5 break和continue语句 例:文件4-18.php:break/continue的应用
    151. 185. 4.5 PHP的系统函数与自定义函数在程序的编写过程中往往会有一些要反复用到的功能某块,如果每次都要重复编写这些代码,不仅浪费时间,而且还会使程序变得冗长、可读性差,维护起来也很不方便,此时我们就想到了函数。PHP 5允许程序设计者将常用的流程或者变量等元件,组织成一个固定的格式。也就是说用户可以自行组合函数或者是类。这样在编写好函数或则类之后,我们在使用时就不必关心其中的细节,拿过来就可以用;要做功能修改时,只需修改函数中的内容,所有对此函数的调用都会发生相应的变化,不必一个一个地去改动。此外,使用函数还能减少对系统资源的耗用,因为每一次函数调用结束后,都会释放掉它所占用的资源。PHP 5 中的函数有可以分为系统函数和自定义函数,系统函数在后面的章节和附录中都将涉及到,本节主要讲解自定义函数。
    152. 186. 4.5 PHP的系统函数与自定义函数4.4.1 函数的定义和调用 PHP 5中的函数C语言一样。函数定义的语法为: function 函数名(形式参数列表) { 函数体; return 返回值; }
    153. 187. 4.5 PHP的系统函数与自定义函数4.4.1 函数的定义和调用 PHP 5中的函数有无返回值都允许。而且,在函数的名称上,PHP 对于大小写的管制比较松散。可以在定义函数时写成大写的名字,而在使用时使用小写的名字。总之,对函数而言,不用管大小写,只要注意名称没有重复就可以了。不过,PHP 5 对用户自定义函数名也是有一些要求的,具体如下: ①不能与PHP的内部函数同名 ②不能与PHP的关键字重名 ③不能以数字或下划线开头 ④不能包含点号“.”和中文字符 函数体是实现函数功能的语句体,与for循环等不一样,函数体中即使只有一条语句,外面的大括号也不能省略。
    154. 188. 4.5 PHP的系统函数与自定义函数4.4.1 函数的定义和调用 函数调用的语法为: 函数名(实际参数列表); 实际参数列表要与形式参数列表相对应(有默认参数时实际还要与默认参数对应)。如果实际参数比形式参数多,多于的参数会被自动舍弃;如果实际参数比形式参数少,实际参数会被一一填入形式参数中,不足部分以空参数代替。实际参数和形式参数之间的传递机制会在下一小节中讲述。 如果函数有返回值,还可以利用函数调用为变量赋值,其语法为: 变量名=函数名(实际参数列表);
    155. 189. 4.5 PHP的系统函数与自定义函数4.4.1 函数的定义和调用 4-19.php:函数的定义和调用=>求阶乘
    156. 190. 4.5 PHP的系统函数与自定义函数4.4.2 函数的参数传递 在使用函数时,要填入与函数形式参数个数相同的实际参数(有默认参数的除外),在程序运行过程中,实际参数就会传递给相应的形式参数,然后在函数中实现对数据的处理和返回。 在由实际参数向形式参数传递的过程中,共有值传递、引用传递、默认参数3种机制。
    157. 191. 4.5 PHP的系统函数与自定义函数4.4.2 函数的参数传递 1、值传递 作为值传递,就是将实际参数的值拷贝到形式参数中。然后由形式参数参与函数内部的计算,函数调用结束后,实际参数的值不会发生改变。 用这种方式调用的函数一般都有返回值或输出值,否则函数调用实际上什么也没有做。例4-19就是使用的这种传递方式。初学者一般常使用这种传递方式。
    158. 192. 4.5 PHP的系统函数与自定义函数4.4.2 函数的参数传递 2、引用传递 如果要实现形式参数改变时实际参数也发生相应的改变,就要使用引用传递的方式。参数的引用传递也有两种方法: ①在函数定义的时候,在形式参数前面加上“&”符号,例如: function fun(&$var1){……} ②在函数调用的时候,在实际参数前面加上“&”符号,例如: function fun($var1){……} fun(&$var2) 如果形式参数$var1的值在函数中发生改变,实际参数$var2的值也会发生相应的改变。
    159. 193. 4.5 PHP的系统函数与自定义函数4.4.2 函数的参数传递 3、默认参数 PHP 5还支持有默认值的参数,即在函数定义时可以为一个或多个形式参数指定默认值。
    160. 194. 4.5 PHP的系统函数与自定义函数4.4.2 函数的参数传递 例:文件4-20.php:函数参数的传递
    161. 195. 4.5 PHP的系统函数与自定义函数4.4.3 用函数的同名变量实现可变函数 PHP 5 中还提供了可变函数的机制,可以方便地利用变量实现对函数的调用。使用的基本格式为: Function fun(){……} $var=”fun”; $var(); 其中调用$var()就相当于调用函数fun(),$var()为可变函数。 可变函数与普通函数调用时的最大区别就在于可变函数前面有”$”,有此符号,系统就会认为是可变函数。 友情提示:如果写成$var=”fun()”,则“$var”只是一个普通的字符串而已,再调用语句“$var;”不会实现fun()函数的功能。
    162. 196. 4.5 PHP的系统函数与自定义函数4.4.3 用函数的同名变量实现可变函数 例;文件4-21.php:函数的同名变量实现可变函数
    163. 197. 4.5 PHP的系统函数与自定义函数4.4.4 用函数调用实现递归与嵌套 PHP 5中的函数支持递归赫嵌套。所谓递归就是一个函数在自己的函数体内调用自身。所谓嵌套,就是一个函数在其函数体内调用其他函数。 例:文件4-22.php:函数递归实现阶乘运算 例:文件4-23.php:使用递归求解斐波那契数列 例:文件4-24.php:函数嵌套求闰年
    164. 198. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 PHP 5 的变量用范围的不同可以分为若干种类,比如局部变量、全局变量、静态变量、动态变量、引用变量、预定以变量、外部变量等,下面我们就前5种变量的进行如下讲解。
    165. 199. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 1、局部变量和全局变量 PHP中的变量是有作用范围的,一般情况下,变量的作用域是包含变量的PHP程序块,也就是“”之间的代码或者“{”、“}”之间的代码。如果其中还有include()或require()函数包含的文件,变量的作用域也可以扩展到这些文件里。 在主程序中定义的变量只在主程序中有效,在函数中定义的变量只在函数中有效,在函数之外就无效了。
    166. 200. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 1、局部变量和全局变量 如果要在函数中引用主程序中的变量的值,使用PHP定义的$GLOBALS数组,$GLOBALS数组是一个以变量名为下标的数组,我们可以直接调用。 还有一种实现跨域调用功能的方法就是使用全局变量,值得注意的是PHP中的全局变量并不是对整个程序都可见,我们在主程序中也可以访问函数中的全局变量,但是我们在函数中并不能访问主程序的全局变量。其定义的语法为: global $变量名; 例:文件4-25.php:局部变量和全局变量
    167. 201. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 1、局部变量和全局变量 例:文件4-25.php:局部变量和全局变量 友情提示:在PHP函数中使用$GLOBALS数组,是不是和我们在4.4.2节中讲到的参数传递有异曲同工之效呢?为了防止程序中变量的混乱,建议尽量不要使用全局变量,至少应尽可能少地使用全局变量。
    168. 202. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 2、静态变量和动态变量 静态变量只能用于函数范围内,与普通局部变量不同之处在于:当该函数运行结束时,静态变量不会丢失自己的值。静态变量的定义方法为在变量名前冠以“static”关键字。 PHP中的动态变量允许一个变量的值作为另一个变量的变量名,前提条件是这个值要符合变量命名的规则。
    169. 203. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 2、静态变量和动态变量 文件4-26.php:静态变量与动态变量 通过上例我们不难看出静态变量与普通变量的区别,在函数fun2()中静态变量$int2只被初始化了一次,在该函数退出时$int2的值不会丢失,所以反复调用函数fun2()时,$int2的值会累加。 友情提示:静态变量虽然在函数结束时值不会丢失,但其作用域只在本函数中,在函数之外仍然无效。动态变量的实现思想是否与4.4.3节中用函数的同名变量实现可变函数的思想相吻合呢?
    170. 204. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 3、引用变量 PHP 5中支持引用变量,这是从C++语言中借用而来的。对一个变量进行引用产生新变量后,新变量可以看作是原变量的一个别名,改变其中任何一个的值,两个值都会发生改变。使用引用变量的方法是赋值时在右边变量前加“&”符号, 具体实例 :文件4-27.php:引用变量
    171. 205. 4.5 PHP的系统函数与自定义函数4.4.5 变量在函数中的使用 3、引用变量 引用变量在进行赋值时,系统只是简单将新变量执行原变量的地址,其中没有变量复制的操作,所以速度非常快。如果参数是大数组或对象,使用引用变量进行参数传递能节省内存并加快程序运行速度。不过其副作用就是引用值改变,原变量也会发生改变,因此是否能使用引用变量进行参数传递要视具体情况而定。
    172. 206. 4.6 PHP5的类与对象要想成为一名合格的PHP程序员,您必须掌握类和对象。您肯定知道变量和函数,但类和对象可能就是另一回事。如果您不定义、使用类和对象,您就无法创建完美的系统。即使您决定在自己的代码中不使用面向对象的编程,您仍可能需要了解面向对象的编程。比如,如果您要使用第三方库,那么您就必须学会实例化对象和调用方法。下面我们就来逐步学习类和对象的相关知识。
    173. 207. 4.6 PHP5的类与对象4.6.1 类和对象的概念 简单地说,类是一个由变量和方法组成的独立程序块或功能某块。这些由变量和方法结合通常能实现单个功能或一组功能。类可以直接用作组织数据和功能的简单方法,就像一组函数和变量一样,但使用类可以忽略函数和变量的存在。类可用于在内存中生成多个实例。这样的实例我们就称作对象。每个对象可以访问一组相同的函数(在面向对象上下文中叫做方法)和变量(叫做特性或实例变量),但每个变量的实际值在每个对象中是不同的。
    174. 208. 4.6 PHP5的类与对象4.6.1 类和对象的概念 我们知道,角色可以扮演游戏中的一个单元——比如坦克。类可为坦克设置一组变量:防御和进攻能力,范围,健康状况,等等。该类也可以定义一组函数,其中包括 move() 和 attack()。当系统包含一个坦克类时,该类可用于生成数十个或数百个坦克对象,每个对象都潜在地具有自己的健康状况或范围特征。因此,类是用于生成对象的蓝图或模板。
    175. 209. 4.6 PHP5的类与对象4.6.2 类的定义和对象的创建 class 类名(参数类表){ 代码块(类变量集与函数集) } 我们可以看出,类是由关键字、类的名称和代码块组成。其中类名可以包含字母、数字和下划线字符的任何组合,但不能以数字打头。 对象创建的方法为: $对象名=new 类名(参数类表);
    176. 210. 4.6 PHP5的类与对象4.6.2 类的定义和对象的创建 在类的主体中,可以声明叫做属性的特殊变量。在 PHP 4中,属性必须用关键字var调用。这在PHP 5仍是合法的语法,但主要是为了提高PHP 5的兼容性。事实上,PHP 5中属性的可见度是可以设置为 public、private和protected。声明为 public 的属性可以在类外部写入和读取,声明为 private 的属性只在对象或类上下文中可见。声明为 protected 的属性只能在当前类及其子类的上下文中可见(在继承部分将会看到这些内容起作用)。可以使用 private 属性来真正锁定类。如果将属性声明为 private 并试图从类范围外部访问它,PHP 引擎将抛出致命错误。 方法,简单地说就是在类中声明的函数。我们来使用对象的某个方法时的语法为: $对象名->方法名(参数类表);
    177. 211. 4.6 PHP5的类与对象4.6.2 类的定义和对象的创建 例:文件4-28.php:类的定义和对象的创建 对于上面的实例程序,我们依次作下面的四种修改,并查看结果,我们不能发现public和private的区别: ①去掉第31、33行的屏蔽,屏蔽第30、32行; ②去掉第11、13行的屏蔽,屏蔽第10、12行; ③同时执行①和②的操作。
    178. 212. 4.6 PHP5的类与对象4.6.3 用构造函数实现类的初始化 在日常生活中,我们往往希望类中的一些属性,在我们声称对象的时候有个初始值,使用类的构造函数就可以达到此目的。 构造函数是类中的一个特殊函数,这个函数的函数名与类名相同,而且在对象生成时会自动调用。下面我们就对例4-28进行以下改造,改造结果如下: 例:文件4-29.php:构造函数实现类的初始化
    179. 213. 4.6 PHP5的类与对象4.6.4 类继承 PHP 5中的类的继承功能比以前的版本有很大提高,下面我们就着重讲解一下使用extends来实现类的继承。通过已有类的继承我们可以扩充类的功能,而且可以省去很多重复编码,大大降低了程序开发的复杂度。 一个类继承其他类时,可以继承其中所有的属性和方法,这种继承其他类的类我们称为派生类(或子类),被继承的类我们称为父类。创建派生类的语法如下: class 派生类(子类)名 extends 父类名 例:文件4-30.php:类的继承
    180. 214. 4.6 PHP5的类与对象4.6.5 同名函数实现类的多态 当派生类(子类)中的某个函数的函数名与其父类中的某个函数名重复时,系统在派生类对象中会自动选用派生类中,这就是类的多态。在类的继承中,对同一功能而言,子类相对于父类往往应该有一些特殊性,这些特殊性功能的实现就依赖于类的多态。而在真正的使用中类的多态和类的继承往往是同时出现的。 例:文件4-31.php类的继承与多态
    181. 215. 案例4 利用类和对象的知识编写PHP程序,在网页上输出含九九乘法表在内的任意维的乘法表(如六乘六的乘法表)。
    182. 216. 案例4 利用程序输出九九乘法表,我想在任何一种语言中实现都是不困难,而且他也是一个常用的例子。下面我们就具体分析一下如何利用类和对象的思想输出九九乘法表以及任意维数的乘法表。 (1)我们先建一个类名为table,这是我们实现功能的主要部分; (2)在类中定义一个公共变量$x; (3)利用构造函数初始化乘法标的维数为9,也就是定义公共变量$x为9; (4)编写一个函数print_table(),功能为打印出乘法表,其维数为$x,这样table类就编写完成;
    183. 217. 案例4 (5)初始化一对象$table1为table类; (6)对象$table1调用其方法print_table,这样就打印出了九九乘法表; (7)再初始化一对象$table2也为table类; (8)设置$table2的属性x为6; (9)对象$table2调用其方法print_table,这样就打印出了六六乘法表;
    184. 218. 案例4 文件4-32.php:类和对象输出乘法表
    185. 219. 本章小结 本章中我们着重介绍了PHP 5的程序结构、变量和常量、运算符和表达式,PHP 5的程序流程控制和自定义函数以及类和对象的基本概念和应用。这些知识都是我们学好PHP 5的基础。学习过C语言的读者应该发现,本章内容虽比较多,但难度不是太大。值得注意的是PHP 5中的自定义函数以及类和对象如果掌握好了,并能运用到实际开发中,特别是类和对象思想运用得熟练了,将会是我们的繁琐的开发效率和模块化进程大大提高,让我们事半功倍。
    186. 220. 练 习 题 1. PHP 5支持哪些数据类型? 2.PHP 5中的操作符有哪些类型? 3.PHP 5中哪几种流程结构? 4.PHP 5中实现分支结构和循环结构都有哪些语句? 5.PHP 5中如何定义类和对象? 6.PHP 5的类中变量有几种类型? 7.PHP 5中如何使用对象? 8.仿照文件4-32.php把文件4-16.php改写成用类和对象的方法实现相同的功能的程序。
    187. 221. 第5章 PHP5内置数组和常量5.1 PHP5的内置数组简介 5.2 接收表单数据和URL附加数据 5.3 用Cookie和Session实现用户登录 5.4 用内置数组获取服务器环境信息
    188. 222. 5.1 PHP5的内置数组简介PHP 提供了一套附加的内置数组(也称为预定数组),这些数组变量包含了来自 web 服务器(如果可用)、运行环境、和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制。)
    189. 223. 5.1 PHP5的内置数组简介①$GLOBALS(Global 变量) 包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量的名称。
    190. 224. 5.1 PHP5的内置数组简介②$_SERVER(服务器变量) 变量由web服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用)。
    191. 225. 5.1 PHP5的内置数组简介③$_GET(HTTP GET 变量) 经由URL请求提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用)。
    192. 226. 5.1 PHP5的内置数组简介④$_POST(HTTP POST 变量) 经由HTTP POST方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组(依然有效,但反对使用)。
    193. 227. 5.1 PHP5的内置数组简介⑤$_COOKIE(HTTP Cookies) 经由HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。
    194. 228. 5.1 PHP5的内置数组简介⑥$_FILES(HTTP 文件上传变量) 经由HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)。
    195. 229. 5.1 PHP5的内置数组简介⑦$_ENV(环境变量) 执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。
    196. 230. 5.1 PHP5的内置数组简介⑧$_REQUEST(Request 变量) 经由GET,POST 和 COOKIE机制提交至脚本的变量,因此该数组并不值得信任(建议尽量少用,甚至不用)。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义
    197. 231. 5.1 PHP5的内置数组简介⑨$_SESSION(Session 变量) 当前注册给脚本会话的变量。类似于旧数组$HTTP_SESSION_VARS 数组(依然有效,但反对使用)。
    198. 232. 5.1 PHP5的内置数组简介⑩$php_errormsg(前一个错误消息) $php_errormsg 是包含 PHP 产生的上一错误消息内容的变量。该变量在发生错误并且 track_errors 选项打开(默认为关闭)后才有效。
    199. 233. 5.1 PHP5的内置数组简介下面的章节我们就常用的内置数组做较详细的讲解。
    200. 234. 5.2 接收表单数据和URL附加数据 在网页的数据传递中不外乎两种方式,一种是接收表单数据(也称为POST方法),另一种是URL附加数据(也称为GET方法)。下面我们就先来学习一下表单接收数据的方法。 例:文件5-1.php:表单数据传递
    201. 235. 5.2 接收表单数据和URL附加数据 例:文件5-2.php:URL附加数据传递
    202. 236. 5.2 接收表单数据和URL附加数据 上面的例子,我们仅仅传递了一个数据,如果我们要传递多个数据应该如何做呢?我们只需要把第7行的“5-2.php?show_tag=1”代码改写成诸如“5-2.php?show_tag=1&date_name=date”的代码,就传递了两个数据,也就是说我们在传递多个数据的时候要用“&”j进行连接或分割。
    203. 237. 5.2 接收表单数据和URL附加数据 通过上面的两个例子,我们不难发现两种数据传递方法的不同点:GET方法可以在地址栏中显示出来,也就是比较暴露存在着安全隐患,而POST方法则比较隐蔽,特别是隐藏表单的使用,不仅可以增加程序的安全性,还可以传递一些不需要用户输入或不能让用户更改的贯穿若干个网页之间的量值。
    204. 238. 5.2 接收表单数据和URL附加数据 友情提示:有了这两种数据传递的方法,我们是不是就可以完成许许多多的交互功能了呢?GET方法的数据,我们是否可以通过其它的方法来增加程序的安全性呢?如果我们传递诸如“id=34&del_id=56”,被人肯定知道传递的是数据表中或其它的id和del_id而且其值为34和56,但是如果我们要传递“34,56”或“34-56”,谁又会知道我们传递的是什么东西呢,而我们在接收到数据的时候,我们只需要根据需要进行字符截取就可以使用了。这样不就大大提高了GET房法数据传递的安全性了吗?
    205. 239. 5.3 用Cookie和Session实现用户登录 Cookie和Session在WEB技术中占有非常重要的份量。由于网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。因此我们必须通过Cookie或Session记录用户的有关信息,以供用户再次以此身份对web服务器提供要求时作确认,例如,我们在某些网站中常常要求用户登录,但我们怎么知道用户已经登录了呢,如果没有Cookie和Session的话,登录信息是无法保留的,那岂不要让用户在每一页网页中都要提供用户名和密码。
    206. 240. 5.3 用Cookie和Session实现用户登录 Cookie是一种在浏览器端储存数据并以此来跟踪和识别用户的机制。PHP 透明地支持 HTTP Cookie。而且从客户端发送的cookie都会被PHP 5自动包括进$_COOKIE的全局数组。如果希望对一个Cookie变量设置多个值,则需在 cookie 的名称后加 “["值名称"] ”符号。
    207. 241. 5.3 用Cookie和Session实现用户登录 Setcookie 语法: int setcookie(string name, string value, int expire, string path, string domain, int secure); 本函数的参数除了第一个 name 之外,都是可以省略的。参数 name 表示 cookie 的名称;value 表示这个 cookie 的值,这个参数为空字符串则表示取消浏览器中该 cookie 的资料;expire 表示该 cookie 的有效时间;path 为该 cookie 的相关路径;domain 表示 cookie 的网站;secure 则需在 https 的安全传输时才有效。
    208. 242. 5.3 用Cookie和Session实现用户登录 Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者访问的URL的附加数据来传送给服务器,然后服务器读Session的目录。也就是说,session id是取得存储在服务上Session变量的身份证。如果配置文件“php.ini”中没有设置“session.auto_start=1”,那么要使用Session就必须先运行代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。
    209. 243. 5.3 用Cookie和Session实现用户登录 PHP中的Session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的Cookie出现问题的时候就会影响Session了。必须注意的是:session不一定必须依赖Cookie,这也是Session相比Cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL附加数据中,这样再通过session id就能跨页使用Session变量了。
    210. 244. 5.3 用Cookie和Session实现用户登录 例:5-3.php:COOKIE实现用户登录的表单 例:5-4.php:SESSION实现用户登录的表单
    211. 245. 5.4 用内置数组获取服务器环境信息 $_SERVER是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。数组的实体由web服务器创建,但是并不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。 $_SERVER是一个“superglobal”,或者可以描述为自动全局变量。这就意味它在所有的脚本中都有效,而且在函数或方法中不需要使用global $_SERVER,我们直接访问就可以了。
    212. 246. 5.4 用内置数组获取服务器环境信息 课本P130-131 例:5-5:服务器信息的获取
    213. 247. 案例5 用PHP内置数组接收表单数据 一、案例分析 仔细分析本案例,实际上就是变量接收和条件语句,具体制作步骤如下: (1)设计一简单的用户自我介绍界面,即设计已提交表单,在第二章的案例中已经给出; (2)接收标单中所有的变量; (3)用条件语句判断变量是否合法,如果合法就输出,否则给出错误信息并给出返回按钮。
    214. 248. 案例5 用PHP内置数组接收表单数据 二、具体代码 anli1.php anli2.php
    215. 249. 本章小结 本章中先整体介绍了PHP 5的内置数组,又通过实例着重讲解了网页间数据传递与接受的方法,用Cookie和Session实现用户登陆的方法以及他们的异同点,用内置数组可以获取哪些服务器信息以及获取方法。通过这一章的的学习,我们就能设计和制作出很多具有很强交互功能的网页了,比如小型运算器,用户登陆,选择题以及猜谜语小游戏等,此外我们还可以随时获取服务器的各种信息。
    216. 250. 练 习 题 1.PHP 5 为我们提供了哪些内置数组,各代表什么意思? 2.PHP 5中实现网页间数据传递,可以使用哪几种方法? 3.PHP 5中Cookie和Session都可以实现用户登陆,他们有什么区别? 4.PHP 5中我们可以通过内置数组获取哪些服务器信息,如何获取?
    217. 251. 第6章 PHP5常用函数介绍 6.1 PHP5内置函数概述 6.2 数组函数 6.3 字符串处理函数 6.4 时间日期函数 6.5 数学函数 6.6 图像处理函数 6.7 其他函数
    218. 252. 6.1 PHP5内置函数概述6.1.1 标准函数与扩展函数 PHP中的函数分为内置函数和用户自定义函数两大类。 PHP中的内置函数也大体分为两大类,一是标准函数库,二是扩展函数库。标准函数库中的函数存放在PHP内核中,可以在程序中直接使用,不需要其他任何声明、载入等操作。而扩展函数库中的函数一般并不能直接使用,而是按照个人不同的需求来有选择地开启或者关闭。
    219. 253. 6.1 PHP5内置函数概述6.1.1 标准函数与扩展函数 扩展函数按照功能的不同被分门别类地封装在多个DLL函数库中,这些DLL库存放在PHP安装文件夹下。在PHP5中,扩展函数被存放在PHP安装目录的ext/ 子目录下。如图6-1所示: 当我们需要用到这些扩展函数库中的函数时,只需要在PHP.INI配置文件中将此扩展库打开即可。它们在PHP.INI中的位置如图6-2所示:
    220. 254. 6.1 PHP5内置函数概述6.1.2 启用扩展函数库 打开一个扩展库的方法很简单,只需要将“;extension=php_xxx.dll”前面的分号“;”去掉,并且保存php.ini,然后重新启动IIS或者APACHE,此时php.ini生效,此扩展随即可以使用。
    221. 255. 6.2 数组函数 6.2.1 数组函数一览 详见自编教材P136
    222. 256. 6.2 数组函数 6.2.2 array()函数 Array()函数用来建立一个新数组。函数的参数可以是一个混合类型。 例6-1 func_array.php
    223. 257. 6.2 数组函数 6.2.3 count()函数 count()函数 使用count()函数可以用来统计一个数组中元素的个数。这在循环遍历一个未知长度的数组时尤其有用。 例6-2 func_count.php
    224. 258. 6.2 数组函数 6.2.4 each()函数 Each()函数可以返回一个数组中当前元素的键和值并将数组指针向前移动一步。因此它常常被用在一个循环中来遍历一个数组。 例6-3 func_each.php
    225. 259. 6.2 数组函数 6.2.5 current()、reset()、end()、next()和prev()函数 这5个函数的作用都是用来进行数组内部指针操作的。 Current():返回当前内部指针所指的元素的值。当到达数组末尾时返回false。 Reset():将内部指针指向数组的第一个元素,并返回其值。数组为空时返回false。 End():将内部指针指向数组的最后一个元素,并返回其值。 Next():将数组指针指向当前元素的下一个元素,并返回其值。到达末尾时返回false。 Prev():将数组指针指向当前元素的上一个元素,并返回其值,当到达顶端时返回false。
    226. 260. 6.2 数组函数 6.2.5 current()、reset()、end()、next()和prev()函数 在这里要注意current()函数和next()函数的不同。他们虽然都是取出一个元素值,但是current()并不移动指针。也就是说current()返回的是未移动指针之前所指向的元素的值,而next()返回的是移动指针之后所指向的元素的值。
    227. 261. 6.3 字符串处理函数 6.3.1 字符串函数处理一览 详见自编教材P143
    228. 262. 6.3 字符串处理函数6.3.2 trim(),ltrim(),rtrim(),chop()和strlen()函数 这5个函数的功能类似。 Chop()函数与rtrim()函数作用相同,都是去除字符串右端的空格。 Ltrim()函数去除字符串左端的空格。 Trim()函数去除字符串左右两端的空格。 Strlen()函数输出字符串长度。
    229. 263. 6.3 字符串处理函数6.3.3 ucwords(),ucfirst(),strtoupper(),strtolower()和str_word_count()函数 Ucwords()函数将每个单词的首字母大写. Ucfirst()函数将整个字符串首字母大写. Strtoupper()函数将全部字母都大写. Strtolower()函数将所有字母都变成小写. Str_word_count()函数统计字符串中单词个数.
    230. 264. 6.3 字符串处理函数6.3.4 字符串查找函数 1.substr_count()函数: substr_count()函数的格式为: int substr_count ( string haystack, string needle [, int offset [, int length]] ) Substr_count()函数用来统计一个字符串needle在另一个字符串haystack中出现的次数。该函数返回值是一个整数。有两个可选参数offset和length分别表示要查找的起点和长度。值得注意的是,offset是从0而不是从1开始计算的
    231. 265. 6.3 字符串处理函数6.3.4 字符串查找函数 2.strrpos()函数和strpos()函数: substr_count()函数的格式为: int strrpos ( string haystack, mixed needle [, int offset] ) 该函数返回字符needle在字符串haystack中最后一次出现的位置。这里needle只能是一个字符,而不能是一个字符串。如果提供一个字符串,PHP也只会取字符串的第一个字符使用,其他字符无效。参数offset也是用来限制查找的范围.
    232. 266. 6.3 字符串处理函数6.3.4 字符串查找函数 2.strrpos()函数和strpos()函数: strpos()函数的格式为: int strpos ( string haystack, mixed needle [, int offset] ) 该函数与strrpos函数仅一字之差。但功能相差很大。strpos()函数的needle参数允许使用一个字符串,而且返回的是这个字符串在haystack中第一次出现的位置,而不是最后一次。
    233. 267. 6.3 字符串处理函数6.3.4 字符串查找函数 3. strstr()函数和strrchr()函数: Strstr()函数和strrchr()两个函数的格式分别是: string strstr ( string haystack, string needle ) string strrchr ( string haystack, string needle ) 由此可见,这两个函数均返回一个字符串,而不是返回一个表示位置的整数。两个函数除了函数名不同,使用方法完全相同。但是其作用略有不同。Strstr()函数用来查找一个子串needle在一个字符串haystack中第一次出现的位置,并返回从此位置开始的字符串。Strrchr()函数查找一个字符needle在一个字符串haystack中最后一次出现的位置并返回从此位置开始之后的字符串。
    234. 268. 6.3 字符串处理函数6.3.5 字符串替换函数 (1) nl2br()函数 该函数的名字看起来比较怪,中间包含一个数字“2”,用汉语念起来似乎有点别扭。实际上这里的“2”在英文中念“two”,与“to”谐音。这里的“2”实际上就是“to”的一种缩写而已。明白了这一点之后,函数名字和功能都一目了然了。在很多中文参考资料中,将此函数的功能描述为“将换行符替换成HTML的换行符
      ”,在本书中我们也沿用这一解释。但是如果查阅英文版PHP手册,会发现大意为“在每一行前插入HTML换行标记
      ”。也就是说是“插入”而不是“替换”。但是我们在使用此函数时,就其效果而言相当于“替换”,因此我们仍然采用一贯的解释,将其归为字符串替换函数。
    235. 269. 6.3 字符串处理函数6.3.5 字符串替换函数 (1) str_replace()函数 str_replace函数允许我们将一个字符串中的任意子串全部替换为另外一个子串。其使用格式如下: mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] ) 这个格式看起来有点复杂。我们的简化解释如下:str_replace()函数将subject中的所有search替换成replace,并把替换的次数存放在count中,其中count参数为可选。这里的search、repalce、subject以及整个函数的返回值都是mixed类型,也就说提供的参数可以是多种类型。常用的有字符串和数组。
    236. 270. 6.3 字符串处理函数6.3.6 字符串截取函数 PHP中常用字符串截取函数有substr()等。 Substr()函数的使用格式如下: string substr ( string string, int start [, int length] ) 本函数返回一个字符串中从指定位置开始指定长度的子串。参数string为原始字符串,start为截取的起始位置(从0开始计),可选参数length为要截取的长度。值得一提的是,参数start和length均可以用负数,start为负数时说明从倒数第start个字符开始取;length为负数时表示从start位置开始取到倒数length的位置结束。
    237. 271. 6.3 字符串处理函数6.3.7 字符串分割函数 (1) explode()函数 array explode ( string separator, string string [, int limit] ) explode函数用来将一个字符串按照某个指定的字符分割成多段,并将每段安顺序存入一个数组中。该函数的返回值就是一个数组。separator参数为分割符,可以是一个字符串,也可以是单个字符。string为要处理的字符串。参数limit为可选,如果设置了limit,则返回的数组包含最多limit个元素,并且最后那个元素将包含 string 的剩余部分。
    238. 272. 6.3 字符串处理函数6.3.7 字符串分割函数 (2) str_split()函数 array str_split ( string string [, int split_length] ) str_split()函数将一个字符串以一定长度为单位分割成多段,并返回由每一段组成的数组。str_split()函数不是以某个字符串为分割依据,而是以一定长度为分割依据。参数string为要分割的字符串,可选参数length设置分割的单位长度。
    239. 273. 6.4 时间日期函数6.4.1 时间日期函数一览表 详见自编教材P161
    240. 274. 6.4 时间日期函数6.4.2 获取当前时间的Unix时间戳 Unix时间戳是指从Unix纪元(格林威治时间1970年1月1日00时00分00秒)开始到当前时间为止相隔的秒数。因此很显然Unix时间戳应该代表一个很大的整数。Unix时间戳在很多时候非常有用,尤其在对时间进行加减时作用最为明显。比如当前时间是“2006年10月10日 10点10分10秒”,在这个时间基础上加上25天8小时55分58秒,会得到一个什么时间呢?可能推算起来比较复杂。因为除了时间进位以外,还涉及到不同月份天数可能不同(可能是28天、29天、30天、31天)等等。所以用数学方法直接加减是不行的。如果我们使用Unix时间戳,那么在第一个时间的基础上加上一定的秒数,得到的就是第二个时间的Unix时间戳。然后用PHP的有关函数把这个时间戳转换成普通时间格式显示即可。
    241. 275. 6.4 时间日期函数6.4.3 获取指定时间的Unix时间戳 PHP给我们提供了mktime()函数和strtotime()函数来完成这个操作。 使用格式: int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year]]]]]] ) 本函数的作用是根据给出的参数返回Unix时间戳。6个参数全都是整数,分别代表小时、分钟、秒、月、日、年。参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。当全部参数都被省略时,获得的就是当前时间的Unix时间戳。
    242. 276. 6.4 时间日期函数6.4.3 获取指定时间的Unix时间戳 strtotime()函数允许我们使用一个时间字符串作为参数来获取Unix时间戳。这个时间串的顺序与我们中文习惯较为吻合。如“2000-11-12 10:34:55”表示2000年11月12日10时34分55秒。该字符串指代了一个具体的时间,可以作为strtotime()函数的参数,来获得这个时间的Unix时间戳。
    243. 277. 6.4 时间日期函数6.4.4 从Unix时间戳取得时间日期信息 前面我们学习了如何获得一个时间的Unix时间戳。虽然用Unix时间戳有利于我们在计算机中进行时间的计算,但是在显示时间时还是应该显示成通用的“年月日时分秒”以及星期几等格式,而不是直接输出一个Unix时间戳。PHP中提供了date()和getdate()等函数来实现从Unix时间戳到通用时间日期的转换。
    244. 278. 6.4 时间日期函数6.4.4 从Unix时间戳取得时间日期信息 (1) getdate()函数 getdate()函数用来将一个Unix时间戳格式化成具体的时间日期信息,其使用格式如下: array getdate ( [int timestamp] ) 其中参数timestamp就是一个Unix时间戳。如果不指定参数,则默认使用当前时间。该函数返回一个数组,数组中存放了详细的时间信息。通过数组下标可以取得数组中的元素值。其下标与值得对应关系见表6-4。(自编教材P164)
    245. 279. 6.4 时间日期函数6.4.4 从Unix时间戳取得时间日期信息 (1) date()函数 date()函数区别于getdate()函数,可以将一个Unix时间戳所代表的时间按照某种容易识读的格式输出出来。该函数的使用格式: string date ( string format [, int timestamp] ) 该函数直接返回一个字符串。这个字符串就是一个指定格式的日期时间。参数format是一个字符串,用来指定输出的时间的格式。可选参数timestamp是要处理的时间的Unix时间戳。如果参数为空,那么默认值为当前时间的Unix时间戳。 函数的重点是如何使用format参数。format参数必须由指定的字符构成,不同的字符代表不同的特殊含义。见表6-5。(自编教材P166)
    246. 280. 6.5 数学函数数学函数一览表详见自编教材P169
    247. 281. 6.6 图像处理函数 PHP提供了一系列函数,来实现在网站编程中对图像进行编辑。虽然使用这些函数能够实现的功能十分有限,无法和功能强大的专业图形图像软件相比,但是在很多需要动态生成图像、自动批量处理图像等方面,能给PHP网站开发者带来巨大帮助。其中最为典型的应用有随机图形验证码、图片水印、数据统计中饼状图、柱状图的生成等等。
    248. 282. 6.6 图像处理函数 PHP的图像处理函数都封装在一个函数库中,这就是GD库。 开启GD库: 用记事本打开你的php.ini配置文件,利用查找功能找到“;extension=php_gd2.dll”这一行,将最前面的分号去掉,然后保存,重新启动IIS(Apache),这时候GD库已经被自动加载了。
    249. 283. 6.6 图像处理函数 6.6.1 用图象处理函数绘制Png图形 由于本部分函数个数较多,而且具体使用方法较为复杂,要在很有限的篇幅内进行一个较全面的介绍是十分困难的。我们这里仅给出两个例子,让读者先体会一下PHP图像处理函数的简单使用。 详见自编教材P174
    250. 284. 6.6 图像处理函数 6.6.2 用图象处理函数制作水印效果 所谓图像水印,就是在图像上标上一些特殊的图形或符号,用来作为图像所有者的标志或者防止图片被盗用。 除了png格式,我们还可以把图像输出为jpg、gif等常用的格式。而且我们不仅可以直接创建一个图像流来绘制图形,还可以将一张已有的图片作为图像流读入,然后在此基础上对图像进行处理。 详见自编教材P176
    251. 285. 6.7 其他函数据粗略统计,PHP5提供的函数总数达3800多个,分属于160多个类别。可以说是体系极为庞大。这些函数涵盖了PHP编程的方方面面,给PHP开发者带来巨大的便利和强有力的支撑。 虽然本章中我们已经用了很大的篇幅来介绍一些最常用的函数,但和PHP全部函数比起来,仍然只是极小的一部分。除此之外,还有数据库函数、XML函数、Socket函数、正则表达式函数、COM与DOM函数、压缩函数、MAIL函数等等。这么多的函数必然不是短期学习能够掌握的,这就要求读者首先充分了解PHP函数的体系,然后通过长时间不断的学习、积累,最终达到较高的水平。 建议读者必备一份中文版的官方PHP手册。
    252. 286. 案例6 完整图像验证码程序开发一、案例分析 (1)数字随机产生. (2)为增加辨认的难度,在图象上加一些象素点,随机生成两条虚线. (3)打乱数字的位置.
    253. 287. 案例6 完整图像验证码程序开发二、案例编写 showimg.php:生成验证码,将验证码写入图片,并输出图片 login.html:调用showimg.php,将用户输入的验证码提交到check.php进行验证。 check.php:用来验证用户输入的验证码是否正确。
    254. 288. 本章小结本章中我们着重介绍了PHP5的常用函数,并介绍了PHP函数的总体体系。主要讲解了数组函数、字符串处理函数、日期时间函数、图像处理函数等常用函数。读者在学完本章后应熟练掌握20-30个常用PHP函数的使用方法,并能够参考PHP手册自行学习其他函数的使用方法。
    255. 289. 练 习 题1. 从网络上下载PHP手册,了解PHP的函数体系。 2. 编制程序,练习数组函数、字符串处理函数的使用。 3. 常用的时间/日期函数有哪些?在使用时应注意什么问题? 4. 编写一个绘图程序,在图像上绘制一个简易人物形状,并适当添加文字信息。
    256. 290. 第7章 PHP5文件与目录操作 7.1 文件操作 7.2 目录操作 7.3 文件上传的实现 案例7 利用文件操作实现支持头像上传的用户注册程序
    257. 291. 7.1 文件操作在网络编程中要用到的文件操作大致可以分为两大类,一种是普通文件的操作,另一种是数据库文件的操作。在普通文件的操作中应当属对记事本文件的操作最为简单,下面我们就来探讨一下,PHP对文件(以记事本为例)的操作。 实际上,PHP对文件的操作已经给我们规定好了若干个内置函数。我们要想利用PHP对文件进行操作,就是我们在PHP中对相关文件处理函数的应用。现在就常用的文件处理函数讲解如下:
    258. 292. 7.1 文件操作1. resource fopen ( string filename, string mode [, bool use_include_path ] ) 打开文件或者 URL。 其中string filename是要打开的文件名,必须为字符串形式。如果filename是"scheme://..."(如http://...)的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果PHP认为filename指定的是一个本地文件(如"num.txt"),将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。 string mode是打开文件的方式,必须为字符形式,其可能值列表如下: ’r’,只读形式,文件指针指向文件的开头。
    259. 293. 7.1 文件操作1. resource fopen ( string filename, string mode [, bool use_include_path ] ) ’r+’,可读可写,文件指针指向文件的开头。 ’w’,只写形式,文件指针指向文件的开头,打开同时清除所有内容,如果文件不存在,将尝试建立文件。 ’w+’,可读可写,文件指针指向文件的开头,打开同时清除所有内容,如果文件不存在,将尝试建立文件。 ’a’,追加形式(只可写入),文件指针指向文件的最后,如果文件不存在,将尝试建立文件。 ’a+’,可读可写,文件指针指向文件的最后,如果文件不存在,将尝试建立文件。
    260. 294. 7.1 文件操作2. string fgets ( int handle [, int length] ) 从文件指针中读取一行。 其中int handle是要读入数据的文件流指针,由fopen函数返回数值。 int length是要读入的字符个数,实际读入的字符个数是length-1。 从handle指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。出错时返回 FALSE。
    261. 295. 7.1 文件操作3. int fwrite ( resource handle, string string [, int length] ) 写入文件。同int fputs(resource handle, string str, int [length])。 fwrite() 把 string 的内容写入文件指针handle处。如果指定了length,当写入了 length 个字节或者写完了string以后,写入就会停止。 fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。
    262. 296. 7.1 文件操作4. bool fclose ( resource handle ) 关闭一个已打开的文件指针。 将 handle 指向的文件关闭。如果成功则返回 TRUE,失败则返回 FALSE。 文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。
    263. 297. 7.1 文件操作例:文件7-1.php:访客计数器 我们不难发现制作一个文件类型计数器的基本思路是:打开一个文件读出文件里面的内容(数据)数据+1后再写入该文件关闭文件。由于当文件以可读可写方式打开时,文件的内容同时被清空,所有我们在做文件计数器是的具体的实际步骤是:以只读方式打开一个文件读出文件里面的内容(数据)关闭文件再以可读可写方式打开文件数据+后再写入该文件关闭文件。
    264. 298. 7.2 目录操作 目录的操作主要是利用相关的目录函数来实现的。我们就先来看一下有关的目录函数。 string getcwd ( void ) 取得当前工作目录。 bool chdir ( string directory ) 将当前目录改为directory。
    265. 299. 7.2 目录操作 new dir(sting directory) 此函数的作用是将输入的目录名转换为一个对象并返回,如下: class dir { dir ( string directory ) string path resource handle string read ( void ) void rewind ( void ) void close ( void ) }
    266. 300. 7.2 目录操作 该对象含有两个属性和3个方法。两个属性为: handle 目录句柄 path 打开目录的路径 三个方法为: read ( void ) 读取目录 rewind ( void ) 复位目录 close ( void ) 关闭目录 这三个方法与后面的将要介绍的readdir()、rewinddir()、closedir()三个函数的作用相同。
    267. 301. 7.2 目录操作 resource opendir ( string path ) 打开目录句柄。path为要打开的目录路径. string readdir ( resource dir_handle ) 返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。 dir_handle为目录句柄的 resource,之前由 opendir()打开。 成功则返回文件名,失败返回 FALSE。
    268. 302. 7.2 目录操作 void rewinddir ( resource dir_handle ) 倒回目录句柄。将dir_handle指定的目录流重置到目录的开头。 dir_handle为目录句柄的 resource,之前由 opendir()打开。 void closedir ( resource dir_handle ) 关闭目录句柄。关闭由dir_handle指定的目录流。 流必须之前被 opendir() 所打开。
    269. 303. 7.2 目录操作 array scandir ( string directory [, int sorting_order] ) 列出指定路径中的文件和目录。 返回一个array,包含有directory中的文件和目录。 参数directory是要被浏览的目录。 参数sorting_order是文件的排列顺序,默认的排序顺序是按字母升序排列。如果使用了可选参数 sorting_order(设为 1),则排序顺序是按字母降序排列。 bool chroot ( string directory ) 将当前进程的根目录改变为 directory。 本函数仅在系统支持且运行于 CLI,CGI 或嵌入 SAPI 版本时才能正确工作。此外本函数还需要root权限
    270. 304. 7.2 目录操作 例:文件7-2.php:目录输出 例:文件7-3.php:遍历图片显示
    271. 305. 7.3 文件上传的实现文件上传的功能也是我们经常使用的,有了文件上传的功能,我们不仅可以为我们的网站动态添加附件,以实现网页的文字编辑比较弱的功能,而且我们还可以实现网站中相关图片、Flash动画等的动态更新等等。下面我们就通过一个实例来了解一下文件上传的基本原理。 例:文件7-4.php:文件上传实例
    272. 306. 案例7 利用文件操作实现支持头像上传的用户注册程序 设计一简单的用户注册和登陆界面,将用户注册信息记入文本文件,并实现用户登陆与上传个人照片的功能。
    273. 307. 案例7 利用文件操作实现支持头像上传的用户注册程序 一、案例分析 仔细分析本案例,实际上就是文件操作和文件上传的综合应用,具体制作步骤如下: (1)设计一简单的用户注册界面,含有上传头像的表单项; (2)新建一接收用户注册信息的文件,本文件所要完成的主要功能为有:接收注册的用户名、登陆口令和头像文件,实现头像(一图片)的上传,把用户名、登陆口令和上传后的头像文件信息记录到一文本文件中;
    274. 308. 案例7 利用文件操作实现支持头像上传的用户注册程序 一、案例分析 (3)设计一简单的用户登陆界面(用用户注册的界面稍加修改即可); (4)新建一接收用户登陆信息的文件,本文件所要完成的主要功能有:接受登陆用户的用户名和登陆口令,从记录注册信息的文本文件中读出注册用户信息,检查接受的登陆用户名是否存在以及登陆口令是否正确,若正确输出登陆成功信息和头像图片,否则,输出错误信息。
    275. 309. 案例7 利用文件操作实现支持头像上传的用户注册程序 二、案例编写 login.html login_action.php land.html land_action.php
    276. 310. 本章小结本章中我们着重讲解了PHP 5对文件和目录的操作以及文件上传的实现。通过学习,我们应该能利用PHP 5中对文件和目录的相关操作,实现诸如文本计数器、目录和文件的遍历、不同类型文件的上传等,进而可以做出利用文本操作实现用户注册信息的记录和登陆信息的校验等。
    277. 311. 练 习 题 1. PHP 5中文件打开的方式有几种,各有什么样的文件操作权限? 2. PHP 5文本文件操作可否实现计数器的功能,若能,如何实现? 3. PHP 5中要实现文件的上传,你认为需要哪几步,具体代码事什么? 4. PHP 5中用哪些函数可以实现从文本文件中逐行读出数据?
    278. 312. 第8章 MYSQL数据库安装与使用 8.1 MYSQL数据库系统简介 8.2 MYSQL的安装与初始化设置 8.3 MYSQL中的数据类型 8.4 结构化查询语言(SQL)简介 8.5 MYSQL数据库管理工具 案例8 安装并配置Mysql,并建立一个用户信息表
    279. 313. 8.1 MYSQL数据库系统简介8.1.1 Web开发与数据库 动态网站开发离不开数据存储,数据存储则离不开数据库。在前面的章节中,我们曾做过一个例子,将注册用户的信息存储在一个文本文件中,可以在以后取用。这使得网站可以增加很多交互性因素。但是文本文件并不是存储数据的最理想方法。数据库技术的引入是给网站开发带来的巨大的飞跃。
    280. 314. 8.1 MYSQL数据库系统简介8.1.1 Web开发与数据库 所谓数据库,可以理解为用来存储信息的“仓库”。而“信息”就是我们要存储下来的一些数据。比如用户的姓名、年龄,产品的价格、简介,某一个日期时间甚至图像等等。总之一切可以在计算机中存储下来的数据都可以通过各种方法存储到数据库中。
    281. 315. 8.1 MYSQL数据库系统简介8.1.1 Web开发与数据库 信息并不是杂乱无章的直接放入数据库,而是以二维表的形式组织起来,一条一条存储于表中。这和我们日常生活中经常用到的各种表格形式上是一致的。表中的每一条信息称为一条“记录”。一个数据库中可以有若干张表,每张表中又可以存放若干条记录。比如前面讲到的用户注册程序,每一个用户的信息,比如用户名、密码、头像等,就可以作为一条记录,存储在一张表中。
    282. 316. 8.1 MYSQL数据库系统简介8.1.1 Web开发与数据库学号姓名性别年龄001张三男18002李四女19003王五男20…………
    283. 317. 8.1 MYSQL数据库系统简介8.1.1 Web开发与数据库 那么把数据以这种形式存放在数据库中能给我们带来什么好处呢?采取数据库技术可以给数据的存储和检索带来巨大好处,主要可以归纳为以下四点: 数据存储集约化,最大限度节省存储空间。 数据库专门的检索引擎能够极大提高数据检索速度。 数据库结构化查询语言(SQL)给数据管理带来了极大便利。 可以方便地对数据进行查询、增加、删除、修改。
    284. 318. 8.1 MYSQL数据库系统简介8.1.1 Web开发与数据库 当前市场上的数据库有几十种,其中有如Oracle、SQL Server等大型网络数据库,也有如Access、VFP等小型桌面数据库。对于网站开发而言,一般来说中小型数据库系统就能满足要求。Mysql就是当前Web开发中尤其是PHP开发中使用最为广泛的数据库。
    285. 319. 8.1 MYSQL数据库系统简介8.1.2 Mysql数据库简介 MySQL是MYSQL AB公司开的一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
    286. 320. 8.1 MYSQL数据库系统简介8.1.2 Mysql数据库简介 MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python等编程语言的编程接口,支持多种字段类型并且提供了完整的操作符。
    287. 321. 8.1 MYSQL数据库系统简介8.1.2 Mysql数据库简介 2001年MySQL4.0版本发布。在这个版本中提供了新的特性:新的表定义文件格式、高性能的数据复制功能、更加强大的全文搜索功能等。目前,MySQL已经发展到MySQL5.1,功能和效率方面都得到了更大的提升。
    288. 322. 8.1 MYSQL数据库系统简介8.1.2 Mysql数据库简介 大概是由于PHP开发者特别衷情于MySQL,因此才在PHP中建立了完美的MySQL支持。在PHP中,用来操作Mysql的函数一直是PHP的标准内置函数。开发者只需要用PHP写下短短几行代码,就可以轻松连接到Mysql数据库。PHP还提供了大量的函数来对MySQL数据库进行操作,可以说,用PHP操作Mysql数据库极为简单和高效,这也使得PHP+MySQL成为当今最为流行的Web开发语言与数据库搭配之一。
    289. 323. 8.1 MYSQL数据库系统简介8.1.2 Mysql数据库简介 当然,PHP支持的数据库远远不止MySQL一种。根据PHP官方提供的资料,PHP支持几乎全部当前主流的数据库。但是PHP和Mysql的搭配无论从性能上还是到易用性上都毫无疑问的成为了开发者的首选。此外,还有一个重要原因就是PHP和MySQL都是免费和开放源代码的,并且都有良好的跨平台特性。这使得搭建Web服务器的成本几乎为零,而且开发出来的程序具有可移植性,这些都是吸引开发者的重要原因。
    290. 324. 8.2 MYSQL的安装与初始化设置下载Mysql的安装包 http://www.mysql.com 或http://www.mysql.cn 解压缩,得到一个“setup.exe”的安装文件 双击此文件启动安装程序 安装配置 验证MySQL安装是否成功 “开始”->“运行”,输入“cmd” 开始”->“程序”->“附件”->“命令提示符”
    291. 325. 8.3 MYSQL中的数据类型 为了对不同性质的数据进行区分,以提高数据查询和操作的效率,数据库系统都将可存入的数据分为多种类型。如姓名、性别之类的信息为字符串型,年龄、价格、分数之类的信息为数字型,日期等为日期时间型。这就有了数据类型的概念。 就像编程语言一样,每种数据库都有自己支持的若干种数据类型。在数据库中建立表时,我们首先要考虑的就是这个表需要设置多少字段以及每个字段的数据类型。
    292. 326. 8.3 MYSQL中的数据类型 Mysql数据库中的数据类型分为三大类:数值类型、日期时间类型和字符串类型。各大类中包含的具体类型及其取值范围见表8-2
    293. 327. 8.4 结构化查询语言(SQL)简介 结构化查询语言(Structured Query Language),最早的是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言。SQL结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL得到了广泛的应用。如今无论是像Oracle 、Sybase、 SQL server这些大型的数据库管理系统,还是像Visual Foxporo,PowerBuilder这些桌面数据库开发系统,都支持SQL语言作为查询语言,Mysql同样也不例外。
    294. 328. 8.4 结构化查询语言(SQL)简介 Structured Query Language包含4个部分: 1、数据查询语言: SELECT 2、数据操纵语言: INSERT, UPDATE, DELETE 3、数据定义语言: CREATE, ALTER, DROP 4、数据控制语言: COMMIT WORK, ROLLBACK WORK
    295. 329. 8.4 结构化查询语言(SQL)简介 SQL可用于所有用户的数据库活动模型,包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的SQL 命令只需很少时间就能学会,高级的命令通过学习也不难掌握。SQL可以完成的功能包括: ● 查询数据 ● 在表中插入、修改和删除记录 ● 建立、修改和删除数据对象 ● 控制对数据和数据对象的存取 ● 保证数据库一致性和完整性
    296. 330. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 1、CREATE语句和SHOW语句 CREATE语句可以用来创建新的数据库和表。SHOW语句用来显示当前所有数据库或当前数据库下的所有表。下面看一个例子。
    297. 331. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 事例 : mysql> CREATE DATABASE student; mysql> SHOW DATABASES; mysql> USE student; mysql> CREATE TABLE info(name char(20),sex(2),age tinyint(2)); mysql> SHOW TABLES;
    298. 332. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 2、DROP语句 DROP语句用来删除一个数据库或者一个表。如果是删除一个数据库,那么这个数据库下的所有表也将被删除。如以下语句: mysql> DROP DATABSE D1; mysql> DROP TABLE tbl1;
    299. 333. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 3、INSERT 语句 INSERT语句用来向表中插入新的数据记录。每次插入一条。 mysql> INSERT INTO info VALUES(“张三”,”男”,20);
    300. 334. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 4、SELECT语句 SELECT语句用来查询出表中的数据。SELECT语句是SQL中最复杂的语句之一。因为用SELECT语句可以实现极为复杂的查询功能。可以查询某个表中全部记录、部分满足条件的记录、全部字段、部分满足条件的字段等等。还可以同时从多个表中查询满足条件的记录,以及对查询结果进行排序等。
    301. 335. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 4、SELECT语句 1)查询全部记录全部字段 mysql> SELECT * FROM info; 2)查询全部记录部分字段 mysql> SELECT name,age FROM info; 3)查询满足某个条件的记录 mysql> SELECT * FROM info WHERE age<19;
    302. 336. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 4、SELECT语句 4)查询某些记录,并对结果进行排序 mysql> SELECT * FROM info WHERE sex=”女” ORDER BY age ASC; “ASC”改为“DESC”
    303. 337. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 5、UPDATE语句 UPDATE语句可以对表中现有的记录进行修改。 1)修改全部记录的某个字段的值 mysql> UPDATE info SET age=25; 2)修改满足某条件的记录 mysql> UPDATE info SET age=23 WHERE name=”张三”;
    304. 338. 8.4 结构化查询语言(SQL)简介 8.4.2 常用SQL语句的使用 6、DELETE语句 DELETE语句用来删除表中的记录。可以一次删除全部记录,也可以删除满足指定条件的记录。 1)删除表中的全部记录 mysql>DELETE FROM info; 2)删除满足条件的记录 mysql> DELETE FORM info WHERE sex=”女”;
    305. 339. 8.5 MYSQL数据库管理工具 8.5.1 phpmyadmin的安装
    306. 340. 8.5 MYSQL数据库管理工具 8.5.2 phpmyadmin的使用 1)创建新数据库 2)选择数据库 3)选择并浏览表信息 4)浏览及编辑数据
    307. 341. 案例8 安装并配置Mysql,并建立一个用户信息表 第一部分是安装并配置Mysql 第二部分是建立一个用户信息表。 设计信息表的字段:登陆名、登录密码和头像三个字段。
    308. 342. 本章小结 本章中主要介绍了MySQL数据库的安装和配置步骤,并介绍了SQL的基本情况以及常用的SQL语句的写法。另外还介绍了一款功能强大的MySQL数据库管理工具。通过本章的学习,读者应熟练掌握MySQL数据库的安装配置方法,能够熟练使用基本的SQL语句进行数据库操作。能够熟练使用phpmyadmin进行数据库管理。
    309. 343. 练 习 题 1. MySQL安装过程中有哪些值得注意的问题? 2. 在WEB开发中使用数据库有何优点? 3. 常用的SQL语句有哪些?如何对查询结果进行排序? 4. 分别用SQL语句和phpmyadmin创建表register,其各字段情况如右:字段名类型name字符age数值birth日期
    310. 344. 第9章 PHP+MYSQL数据库编程 9.1 PHP操作MYSQL数据库的流程 9.2 连接数据库前的准备工作 9.3 PHP操作MYSQL方法详解 案例9 编写一个PHP+MySQL留言本程序
    311. 345. 9.1 PHP操作MYSQL数据库的流程 从根本上来说,PHP是通过预先写好的一些列函数来与MySQL数据库进行通信,向数据库发送指令、接收返回数据等都是通过函数来完成。图9-1给出了一个普通PHP程序与MySQL进行通信的基本原理示意图。
    312. 346. 9.1 PHP操作MYSQL数据库的流程
    313. 347. 9.1 PHP操作MYSQL数据库的流程 上图展示了PHP程序连接到MySQL数据库服务器的原理。可以看出,PHP通过调用自身的专门用来处理MySQL数据库连接的函数,来实现与MySQL通信。而且,PHP并不是直接操作数据库中的数据,而是把要执行的操作以SQL语句的形式发送给MySQL服务器,由MySQL服务器执行这些指令,并将结果返回给PHP程序。MySQL数据库服务器可以比作一个数据“管家”。其他程序需要这些数据时,只需要向“管家”提出请求,“管家”就会根据要求进行相关的操作或返回相应的数据。
    314. 348. 9.1 PHP操作MYSQL数据库的流程
    315. 349. 9.1 PHP操作MYSQL数据库的流程 明白了PHP操作MySQL的流程,我们就很容易掌握PHP操作MySQL的相关函数。因为以上几乎每一个步骤,都有相应的函数与之对应。开发PHP数据库程序时,只需要按照流程调用相关函数,数据库操作便可轻松实现。
    316. 350. 9.2 连接数据库前的准备工作 从PHP5开始,不知道出于什么考虑,PHP开发者放弃了对MySQL的默认支持,而是放到了扩展函数库中。因此要使用MySQL函数,需要首先开启MySQL函数库。 打开php.ini,找到“;extensions = php_mysql.dll”,将此行面前的分号“;”去掉,保存之后重新启动IIS/APACHE。
    317. 351. 9.3 PHP操作MYSQL方法详解 9.3.1 PHP操作MySQL常用函数 PHP中可以用来操作MYSQL数据库的函数见表9-1:(详见自编教材P228) 这些函数中,最常用的有mysql_connect()、mysql_select_db()、mysql_query()、mysql_fetch_array()、mysql_num_rows()、mysql_close()等。下面我们就着重介绍这几个函数的使用。
    318. 352. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 1、mysql_connect()函数 resource mysql_connect ( string server, string username , string password) 该函数返回类型为resource型,即资源型。三个参数分别为MySQL服务器地址、MySQL用户名、密码。这里的用户名可以用超级管理员的,也可以用用户表中存在的其他用户。如下面的语句将用超级管理员身份建立一个到本地服务器的连接: 例:$id=mysql_connect(“localhost”,”root”,”1234”);
    319. 353. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 1、mysql_connect()函数
    320. 354. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 1、mysql_connect()函数 如果出现下列提示: Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host […] 则说明MySQL服务器地址错误,可能是输入有错误,或者服务器没有启动,或者端口号不对。这时可以检查函数的第一个参数是否提供正确,MySQL是否已成功启动。
    321. 355. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 1、mysql_connect()函数 还有可能出现下列提示: Warning: mysql_connect() [function.mysql-connect]: Access denied for user […] 这说明用户名或密码有错误。或者本帐号没有在本MySQL服务器上登陆的权限。 我们这里之所以如此详细地讲解该函数,就是因为这时连接到MySQL数据库的第一步。只要这一步成功了,那么下面的所有函数便都能运行。连接到数据库是一切工作的起点。因此必须保证此步骤成功,才能继续下面的内容。
    322. 356. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 2、mysql_select_db()函数 例:文件9-1.php:连接到MySQL数据库服务器并选择数据库
    323. 357. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 3、mysql_query()函数 例:文件9-2.php:用PHP程序创建新数据库和表 例:文件9-3.php:用PHP向表中插入数据 例:文件9-4.php:用PHP从表中读出数据
    324. 358. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 array mysql_fetch_array ( resource result [, int result_type] ) 该函数的作用是,读取记录集result中的当前记录,将记录的各个字段的值存入一个数组中,并返回这个数组,然后将记录集指针移动到下一条记录。如果记录集已经到达末尾,则返回false。 array mysql_fetch_array ( resource result [, int result_type] ) 第二个参数result_type为可选,此参数用来设置返回的数组采用什么样的下标。有三个备选值:MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH。三个参数的含义如下:
    325. 359. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 ①MYSQL_ASSOC:返回的数组将以该记录的字段名称作为下标。如在本例中,要输出此数组中的“姓名”字段,可以用$info[‘name’]。这里$info是数组名,“name”是存放姓名的字段名。 ②MYSQL_NUM:返回的数组以从0开始的数字为下标。在本例中,返回的每条记录只有两个字段,那么数组也就只有两个元素,分别用$info[0]、$info[1]来引用。 ③MYSQL_BOTH:返回的数组既可以用字段名为下标,也可以用数字为下标。在本例中,既可以用$info[0]来取得姓名,也可以用$info[‘name’]来取得。
    326. 360. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 4、mysql_close()函数 此函数用来关闭一个数据库连接。其使用格式如下; bool mysql_close ( [resource link_identifier] ) 本函数只有一个可选参数link_identifier。此参数表示要关闭的连接的ID。也就是mysql_connect()函数执行成功后返回的一个连接标记。参数为空时表示关闭当前连接。该函数返回一个布尔型结果。当关闭成功时返回true,关闭失败是返回false。
    327. 361. 9.3 PHP操作MYSQL方法详解 9.3.2 PHP对MySQL数据库的操纵 4、mysql_close()函数
    328. 362. 9.3 PHP操作MYSQL方法详解9.3.3 PHP中数据分页的实现 在Web开发中经常遇到的一个问题就是,对大量数据进行分页显示。比如一个留言板有数千条留言,如果这些留言全都显示在一个页面上,页面将变得很大难以浏览,有时过大的页面还会导致浏览器停止相应。PHP中提供了非常简单方法,可以对数据进行分页。下面我们就来看一下。
    329. 363. 9.3 PHP操作MYSQL方法详解9.3.3 PHP中数据分页的实现 例:文件9-5.php:用PHP实现数据分页显示功能
    330. 364. 案例9 编写一个PHP+MySQL留言本程序一、案例分析 留言本是Web开发中比较典型的应用之一。留言本程序虽然简单,但是包括了表单提交、数据接收、写入数据库、读出数据库、分页等数据库编程的方方面面。能够熟练编写一个功能较全面留言本是Web开发人员的基本功。本案例我们就来编写一个留言本。这个留言本支持填写留言、浏览留言、管理员回复留言、删除留言等功能。
    331. 365. 案例9 编写一个PHP+MySQL留言本程序二、实施步骤 1、创建数据库和表 本例中我们一共用到1个数据库和2个表。数据库名为gbook。两个表为message和admin。Message表存放用户提交的留言以及管理员的回复。Admin用来存放管理员的用户名和密码。两个表的字段设置和字段数据类型见下表:
    332. 366. 案例9 编写一个PHP+MySQL留言本程序二、实施步骤 1、创建数据库和表 打开phpMyAdmin,按照上述设计创建数据库和表。 直接用SQL创建数据库和数据表
    333. 367. 案例9 编写一个PHP+MySQL留言本程序创建数据库: CREATE DATABASE `gbook` ; 创建表admin: CREATE TABLE `admin` ( `username` VARCHAR( 20 ) NOT NULL , `userpass` VARCHAR( 20 ) NOT NULL )
    334. 368. 案例9 编写一个PHP+MySQL留言本程序创建表message: CREATE TABLE `message` ( `id` INT( 4 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `author` VARCHAR( 20 ) NOT NULL , `addtime` DATETIME NOT NULL , `content` VARCHAR( 1000 ) NOT NULL , `reply` VARCHAR( 1000 ) NOT NULL )
    335. 369. 案例9 编写一个PHP+MySQL留言本程序二、实施步骤 1、创建数据库和表 创建完成后,可以在admin表中插入一条记录,也就是初始化一个管理员账号。我们不妨设置一个用户名为admin,密码为adminpass的管理员账号。
    336. 370. 案例9 编写一个PHP+MySQL留言本程序二、实施步骤 2、代码编写 本留言本一共用到6个页面。分别是: index.php:留言本首页 login.php:管理员登陆页面 send.php:用户填写留言页面 manage.php:管理员管理页面 reply.php:管理员进行回复的页面 logout.php:注销登录的页面
    337. 371. 案例9 编写一个PHP+MySQL留言本程序二、实施步骤 2、代码编写 理论上来讲,这几个页面的编写顺序是无关紧要的。但是为了更好的说明本程序开发的流程,可以采用下面的步骤:首先编写send.php,供用户提交留言,只有提交了留言才能进行后面的留言显示、留言管理等。然后编写index.php,本页面将显示10条最近的留言,并有分页功能;然后是login.php,供管理员登陆;然后是manage.php和reply.php,用来进行留言管理;最后是logout.php,用来注销登录。
    338. 372. 本章小结本章中主要介绍了PHP+MYSQL编程的具体方法和步骤。首先介绍了PHP连接MYSQL的原理和流程。然后介绍了连接前的注意事项。最后详细讲解了PHP操作MYSQL数据库的方法。在实例中我们还给出了一个留言本的全部代码,来说明PHP+MYSQL数据库编程的思路和方法。读者通过本章的学习,应熟练掌握PHP操作MYSQL的方法,熟练进行输入的插入、删除、修改和查询操作。
    339. 373. 练 习 题1. PHP连接MYSQL前需要做哪些准备工作? 2. 常用的PHP操作MYSQL的函数有哪些? 3. 在PHP中如何对多条记录进行分页? 4. 如果为案例9的留言本程序增加显示留言者IP地址的功能,数据库和程序需要做哪些改动?并请上机实现之。
    340. 374. 24 十月 2018本书技术支持:http://www.17php.com374第10章 PHP5程序开发综合范例10.1 需求分析 10.2 流程设计 10.3 数据库设计 10.4 代码编写 10.5 程序运行 10.6 本章小节 10.7 练习题
    341. 375. 24 十月 2018本书技术支持:http://www.17php.com37510.1 需求分析任何浏览者都有浏览任何板块、任何帖子以及任何回复的权限,而且任何浏览者都有权利注册本论坛没有注册过的用户。 任何注册用户都有浏览任何板块、任何帖子以及任何回复的权限,而且还有发新帖子、回复任何帖子的权限。任何注册用户都有被设为某子板块版主的机会。 版主有浏览任何板块、任何帖子以及任何回复的权限,而且还有发新帖子、回复任何帖子的权限。版主还有删除任板块的帖子和回复的删除权限。 管理员除了有版主所有的权限外。还有添加父板块、管理父板块、添加子板块、管理子板块、查看所有用户、删除用户、检索用户、自己密码更改等权限。
    342. 376. 24 十月 2018本书技术支持:http://www.17php.com37610.2 流程设计请看下图分解:
    343. 377. 24 十月 2018本书技术支持:http://www.17php.com377PHP概述HTML与JS服务器环境配置 基本语法 内置数组和常量 内置函数 文件与目录操作 MySQL5数据库 安装与使用 PHP5+Mysql5 数据库编程 准 备学习 PHP学习 DB案例开发 简单论坛系统的开发DB、TABLE create,drop TABLE alter insert,delete update select
    344. 378. 24 十月 2018本书技术支持:http://www.17php.com378PHP5+Mysql5 数据库编程 PHP概述HTML与JS服务器环境配置 基本语法 内置数组和常量 内置函数 文件与目录操作 MySQL5数据库 安装与使用 准 备学习 PHP学习 DB案例开发 简单论坛系统的开发DB、TABLE create,drop TABLE alter insert,delete update select
    345. 379. 24 十月 2018本书技术支持:http://www.17php.com379PHP5+Mysql5 数据库编程
    346. 380. 24 十月 2018本书技术支持:http://www.17php.com380PHP5+Mysql5 数据库编程 案例 9 留言本程序开发留 言留言查看留言管理留 言 回 复留 言 删 除管 理 员 登 陆管 理 员 登 出的功能 要实现数据表 Message 存放用户留言信息 留言内容 留言时间 管理员的回复 留言者数据表Admin 存放管理员的用户名和密码
    347. 381. 24 十月 2018本书技术支持:http://www.17php.com381PHP5+Mysql5 数据库编程 案例 9 留言本程序开发数据表 Message 存放用户留言信息 留言内容 留言时间 管理员的回复 留言人数据表Admin 存放管理员的用户名和密码留 言留言查看留言管理留 言 回 复留 言 删 除管 理 员 登 陆管 理 员 登 出的功能 要实现
    348. 382. 24 十月 2018本书技术支持:http://www.17php.com382PHP5+Mysql5 数据库编程 案例 9 留言本程序开发数据表 Message 存放用户留言信息 留言内容 留言时间 管理员的回复 留言人数据表Admin 存放管理员的用户名和密码字段名类型描述usernamevarchar(20)用户名userpassvarchar(20)用户密码字段名类型描述idint(4) 自增型按顺序为每篇留言自动分配一个唯一的ID号authorvarchar(20)留言人,20字节以内addtimeDATETIME留言日期时间contentvarchar(1000)留言内容。1000字节以内replyvarchar(1000)管理员回复,1000字节以内
    349. 383. 24 十月 2018本书技术支持:http://www.17php.com383PHP5+Mysql5 数据库编程 案例 9 留言本程序开发留 言留言查看留言管理留 言 回 复留 言 删 除管 理 员 登 陆管 理 员 登 出的功能 要实现send.phpindex.phplogin.phplogout.phpmanage.phpreply.php集成化程度太低数据库连接 单独拿出
    350. 384. 24 十月 2018本书技术支持:http://www.17php.com384案例开发 简单论坛系统的开发
    351. 385. 24 十月 2018本书技术支持:http://www.17php.com38510.3 数据库设计 案例开发 简单论坛系统的开发
    352. 386. 24 十月 2018本书技术支持:http://www.17php.com38610.3 数据库设计数据库详细字段设计:
    353. 387. 24 十月 2018本书技术支持:http://www.17php.com38710.4 代码编写详见自编教材P259
    354. 388. 24 十月 2018本书技术支持:http://www.17php.com38810.5 程序运行详见自编教材P316 (下载源码就到源码网:www.codepub.com)
    355. 389. 24 十月 2018本书技术支持:http://www.17php.com389本章小节本章中我们通过一个简易BBS系统的开发实例,详细介绍了PHP+MYSQL数据库开发的思路和方法。包括数据库设计的技巧、编程中的技巧、类和函数库的定义与使用、包含文件的使用等等。并且给出了全部核心代码。读者通过本章的学习,应当深入领会PHP+MYSQL数据库编程的思路,掌握数据库编程中常见问题的解决方案。并举一反三,具备自行设计和开发其他应用系统的能力。
    356. 390. 24 十月 2018本书技术支持:http://www.17php.com390练 习 题1. 在本章的简易论坛系统数据库设计中,父板块和子板块是通过什么建立关联的? 2. 在本章的简易论坛系统中,帖子主题和回复之间是通过什么建立关联的? 3. 如果实现论坛用户积分制度,即每发一篇帖子可以获得一定的积分,数据库应该如何修改?程序应当如何编写?并请试实现之。 4. 为开发好的程序建立安装程序有何好处?