《细说PHP》第四版 样章 第二章 PHP的应用与发展 1

学习任何编程语言之前,先了解一下它的应用与发展是很有必要的。从Web开发的历史看来,PHP、Python和Ruby几乎是同时出现的,都是十分有特点、优秀的开源语言,但PHP却获得了比Python和Ruby多得多的关注度。现在越来越多的新公司或者新项目,新的开发类型都在使用PHP,这使得PHP相关社区越来越活跃,而这又反过来影响到很多项目或公司的选择,形成一个良性的循环。就目前的情况来看,PHP是国内大部分Web项目的首选,很多公司的团队或项目逐渐从其他语言转到了PHP。PHP开发成本低,周期短,后期维护费用低,开源产品丰富,这些都是Python和Ruby无法比拟的。本章全面介绍了PHP的发展、行业的应用、突出的优势,以及一些学习PHP的方法和建议。学习一门技术,就先从了解一门语言开始吧!

2.1  PHP是什么

我们应用的所有软件,都是由计算机语言编写的。目前流行的编程语言有很多,例如PHP、Java、Python、JavaScript、C/C++和Go语言等,全世界有600多种编程语言,PHP则是众多计算机编程语言中的一种,用于网络开发,尤其适用于Web开发领域,主要目标是快速编写动态网页。PHP的语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,是一种通用的开源脚本语言。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的其他编程语言要高许多。PHP能运行在Windows、Linux等绝大多数操作系统环境中,常与开源免费的Web服务器(Apache或Nginx)和数据库(Mysql及Redis)配合使用,用于Linux平台上(简称LAMP/LNMP),具有最高的性价比,号称“Web架构黄金组合”,形成了现在非流行的Web开发技术。

2.1.1  从认识PHP开始

我们在第1章中重点介绍了Web开发构件,PHP是其中最重要的构件,是服务器端嵌入到HTML中的脚本语言。在PHP的定义中共用到了3个形容词:服务器端的语言、嵌入到HTML中的语言和脚本语言。分别介绍如下。

1.服务器端的语言

开发Web应用这种B/S结构的软件,不仅需要有编写客户端界面的语言,还要有编写服务器端业务流程的语言。例如,编写界面使用的HTML、CSS和JavaScript都是在用户发出请求后,服务器再将代码发送到客户端,并在客户端计算机的浏览器中解析执行的程序。而PHP则是服务器端运行的语言,只能在服务器端运行,而不会传到客户端。在PHP代码中如果有对文件类的操作,可以都是操作服务器上的文件,PHP获取的时间也只能是服务器上的时间。只有当用户请求时才开始运行,并且有多少请求,PHP程序就会在服务器中运行多少次。PHP根据不同用户的不同请求,完成在服务器中的业务操作,并将结果返回给用户。

2.嵌入到HTML中的语言

在HTML代码中可以通过一些特殊的标识符号将各式各样的语言嵌入进来。例如,前面章节中介绍的CSS、JavaScript都可以嵌入到HTML中,配合HTML一起完成一些HTML完成不了的功能,或者说是对HTML语言的扩展,而它们都是由浏览器解析的。PHP程序虽然也是通过特殊的标识符号嵌入到HTML代码中的,但和CSS或JavaScript不同的是,在HTML中嵌入的PHP代码需要在服务器中先运行完成。如果执行后有输出,则输出的结果字符串会嵌入到原来的PHP代码处,再和HTML代码一起响应给客户端浏览器去解析。

3.脚本语言

脚本语言,又称动态语言,我们在第1章中已经阐述过了。脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。PHP程序就是以文本格式保存在服务器端的,在请求时才由Web服务器中安装的PHP应用模块解析,并从上到下一步步地执行程序。

2.1.2  PHP都能做什么

PHP能做很多事,但PHP主要是在Web开发中用于服务器端的脚本程序。PHP需要安装PHP应用程序服务器去解释执行,是用来协助Web服务器工作的编程语言,也可以说是对Web服务器功能的扩展,并外挂在Web服务器上一起工作。用户如果通过浏览器访问Web服务器需要得到动态响应的结果,Web服务器就要委托PHP脚本编程语言来完成了。本书中可以用PHP来完成以下工作,但PHP的功能远不局限于此,如图2-1所示。

图2-1  PHP在Web中的功能展示

1.收集表单数据

表单(Form)是网络编程中最常用的数据输入界面。表单通常可以在提交时使用GET或POST方法将数据发送给PHP程序脚本。在PHP脚本中,可以以PHP变量的形式访问每一个表单域在PHP脚本中的使用。根据PHP版本和设置的不同,通过变量可以有3种方法来访问表单数据。所以在PHP中,获得用户输入的具体数据是非常简单的。

2.生成动态网页

PHP脚本程序和客户端的JavaScript脚本程序不同的是,PHP代码是运行在服务器端的。PHP脚本程序可以根据用户在客户端的不同输入请求,在服务器端运行该脚本后,动态输出用户请求的内容。这样客户端就能接收到想得到的结果,但无法得知其背后的代码是如何运作的。甚至可以将Web服务器设置成让PHP来处理所有的HTML文件,这样一来,用户就无法得知服务器端到底做了什么。

3.字符串处理

在编写程序代码或是进行文本处理时,经常需要操作字符串,所以字符串处理一直是程序员使用最多的技术之一。PHP是把字符串作为一种基本的数据类型来处理的。在PHP中提供了丰富的字符串处理函数,并使用强大的正则表达式来对字符串或文本进行搜索、查找、匹配、替换等操作。

4.动态输出图像

使用PHP并不局限于输出HTML文本。PHP通过使用GD扩展库还能用来动态输出图像,例如文字按钮、验证码、数据统计图等,还可以轻松地编辑图像,例如处理缩略图、为图片添加水印等,具有强大的图像处理功能。

5.服务器端文件系统操作

要想让数据可以长期保留,可以使用数据库或是文件系统来存取信息。在某些存取数据相对简单的应用中,或是一些特定的应用中,没有必要使用数据库,就可以采用文件操作。PHP可以利用文件系统函数任意操作服务器中的目录或文件,包括目录或文件的打开、编辑、复制、创建、删除,以及文件属性等操作。

6.编写数据库支持的网页

PHP最强大、最显著的特性之一是它支持很大范围的数据库。用户会发现利用PHP编写数据库支持的网页简单得难以置信。目前,PHP可以连接任何支持世界标准的数据库。

7.会话跟踪控制

我们访问Web服务器通常是使用HTTP协议完成的,但它是一个无状态的协议,没有一个内建机制来维护两个事务之间的状态。也就是说当一个用户在请求一个页面后再请求另一个页面时,HTTP将无法告诉我们这两个请求是来自同一个用户。所以可以在PHP中使用会话控制功能在网站中跟踪一个用户,这样就可以很容易地做到用户登录的支持,并根据某个用户的授权级别和个人喜好显示相应的内容,也可以根据会话控制记录该用户的行为。

8.处理XML文件

PHP具有极其有效的文本处理特性,支持从POSIX扩展或者Perl正则表达式到XML文档解析。为了解析和访问XML文档,PHP 4支持SAX和DOM标准,也可以使用XSLT扩展库来转换XML文档。PHP 5基于强健的libxm2标准化了所有的XML扩展,并添加了SimpleXML和XMLReader支持,扩展了其在XML方面的功能。

9.支持利用大量的网络协议

PHP还支持利用诸如LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows环境)等不计其数的协议的服务。还可以开放原始网络端口,使得任何其他的协议能够协同工作。PHP支持和所有Web开发语言之间的WDDX复杂数据交换。关于相互连接,PHP已经支持了对Java对象的即时连接,并且可以将它们自由地用作PHP对象,甚至可以用CORBA扩展库来访问远程对象。

10.服务器端的其他相关操作

如果将PHP用于电子商务领域,会发现其Cybercash支付、CyberMUT、VeriSign Payflow Pro及MCVE函数对于在线交易程序来说是非常有用的。另外,还有很多其他有趣的扩展库,例如mnoGoSearch搜索引擎函数、IRC网关函数、多种压缩工具(gzip、bz2)、日历转换、翻译等。

《细说PHP》第四版 样章 第二章 PHP的应用与发展 1的更多相关文章

  1. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

  2. Linux第一章第二章学习笔记

    第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...

  3. Windows程序设计(第五版)学习:第二章 Unicode简介

    第二章 Unicode简介 1,Windows通过双字节技术DBCS解决这个问题,代码页定义不同的字符集,称为ANSI字符集,比如日文为CP932,韩文为CP949,繁体中文为CP950,简体中文为C ...

  4. c#高级编程第七版 学习笔记 第二章 核心c#

    第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...

  5. CSS3秘笈复习:第一章&第二章&第三章

    第一章: 1.<cite>标签不仅可以将网页设置为斜体,还能给标题做上标记,使它便于被搜索引擎搜索到. 第二章: 1.import指令链接样式表: CSS本身有一种添加外部样式的方法:@i ...

  6. Practical Vim 第一章 & 第二章

    第一章:Vim 解决问题的方式 前言 本质上讲,我们的工作是重复性的.凡是可以简化重复性操作的方式,都会成倍地节省我们的时间. Vim 对重复性操作进行了优化.它之所以能高效地重复,是因为它会记录我们 ...

  7. Linux内核设计与实现 第一章 第二章

    第一章 Linux内核简介 Unix特点: (1)     Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2)     在Unix中,所有的东西都被当作文件对待,通过一套相 ...

  8. 《细说PHP》 第四版 样章 第二章 PHP的应用与发展 5

    2.5  如何学习PHP PHP以其简单易学的特点,以及敏捷开发的优势,从一个几乎不被人知的开源项目,慢慢成长为技术人员首选的动态Web设计工具,与其他语言相比,PHP表现得更好.更快.更简单易学.尽 ...

  9. 《细说PHP》 第四版 样章 第二章 PHP的应用与发展 4

    2.4  PHP的发展 最初创建时,PHP是一个简单的用Perl语言编写的程序,只是为了统计自己的网站有多少访问者.后来又用C语言重新编写,多年来,PHP经过无数开源贡献者的不断迭代,历经数个版本,已 ...

随机推荐

  1. 如何使用python远程操作linux

    在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试.但是在如此反复的测试操作中,就需要用到自动化测试方 ...

  2. Python中列表乘法需注意的问题/

    前几天看到一个关于Python的面试题 lst = [1, 2, [3]] lst1 = lst * 2  #  [1, 2, [3], 1, 2, [3]] lst1[2].append(4)  # ...

  3. Dockerfile优化

    总结: 1.编写.dockerignore文件 2.容器只运行单个应用 3.将多个RUN指令合并为一个 4.基础镜像的标签不要用latest 5.每个RUN指令后删除多余文件 6.选择合适的基础镜像( ...

  4. pycharm中将文件目录标记为sources root和sys.path.append()效果一样

    之前遇到一个问题,先放上项目目录图 右边是main.py,它要引用的一个模块是在LPRNET目录下的一个文件,但是从右边可以看到pycharm有红色的线提示有错误.但是由于我们append函数将该目录 ...

  5. Python目录教程集和资料分享

    以下整理的是python的基础笔记,需要python视频资料或更多的请关注我的公众号! 查看内容点击链接: Python简介及安装 Python的3种执行方式 变量及变量计算和引用 if, elif, ...

  6. 如何在Mac上使用Netstat命令

    macOS上的netstat命令是一个终端命令,用于显示有关Mac网络通信的详细信息.网络通信包括Mac通过所有端口和所有应用程序与外界进行交流的所有方式.掌握netstat可以帮助您了解计算机之间的 ...

  7. C#语法基础----变量 符号 数据转换

    变量的作用:为了更好的管理内存数据,不同类型的数据存放在不同的内存块中. 变量的特点:不同数据类型占用的存储空间大小不一样. 变量的意义:内存地址是一串十六进制数,非常不好记忆,通过变量可以快速找到数 ...

  8. Linux目录详解,软件应该安装到哪个目录

    原文地址:https://www.w3h5.com/post/336.html 我们应该知道 Windows 有一个默认的安装目录专门用来安装软件.Linux 的软件安装目录也应该是有讲究的,遵循这一 ...

  9. day99_12_3numpy的索引以及pandas的两个数据结构。

    一.索引与切片. nump的索引和python中的索引差不多,都是左开右闭区间. 如一个普通的array的索引,是由0开始的: res = np.array([1,2,3,4,5]) #### npa ...

  10. HashMap数据结构与实现原理解析(干货)

    HashMap 数据结构解析: HashMap内部使用hash表(本质是一个数组见图一) HashMap使用hash算法计算得到存放的索引位置,以此来加快查询速度,(比ArrayList还要快) 同样 ...