PHP:personal home page---hypertext preprocessor;一种脚本程序语言,扩展名为.php;代码嵌入在html代码中,嵌入的tag是<?php……?>;在此标签内也可以以文本的方式嵌入html.
.php文件先由服务器端的php脚本程序将其中的代码翻译成html代码,如果涉及到数据库操作,先连接到数据库,进行数据操作处理,然后将处理的结果及相应的php代码翻译成html,然后再发送到客户端,由浏览器读出;由此处理流程可见,php代码需要超文本预处理;
web服务器(处理程序和执行程序指定动作的脚本引擎)和数据库管理系统通常安装于同一台机器上以利于管理及安全维护;流量很大的网站通常会把Web服务器和数据库服务器分装在不同的主机,这样可集中资源并加快应用程序的运作,也让用户更容易连接到网站;
HTTP是网络上沟通与共享资源的协议;大多数服务器与浏览器都采用现行的http1.1标准;
给web服务器的请求有两种类型:
1 请求返回文件,通常是静态的HTML页面或图像;
2 请求运行脚本或一段程序代码,服务器则传送执行后的输出结果。通过HTTP请求PHP脚本,则需要一台运行Zend(PHP的脚本引擎)的服务器,才能处理脚本内的指示并返回以纯HTML格式输出的结果至浏览器;
Apache是一种开放源代码、快捷又有亲和力的Web服务器,能同步处理各地伟来的请求,而且被设计成在多任务操作系统下运行;Apache的概念并不复杂。在Unix平台上,Web服务器实际上是好几个一起运行的程序,由一个负责处理请求的服务器总协调,其他服务器则告知协调的服务器是否有空处理。如果空闲的服务器太少。协调服务器会启动新服务器;相对地,空闲服务器太多时,则会结束某些服务器以节省资源;
Apache的配置文件控制监听网络与服务请求的方式。服务器管理程序则通过150多种指令控制Apache的行主,可影响资源需求、响应时间、处理各种请求的灵活性、安全性、HTTP请求如何处理及记录日志,脚本引擎如何运行脚本以及操作其他众多方面。
PHP是一种被广泛支持、使用率很高的Web脚本编程语言,当然也是建立Web数据库应用程序的绝佳工具;PHP脚本可以被嵌入静态的HTML页面中,对于客户层的集成更为便利。缺点是脚本与外观可以会混合,不过通过模板技术可以解决大部分的问题。当请求含有PHP的网页时,Web服务器先执行PHP脚本,再以执行结果代替网页上的PHP程序代码。PHP有很多极好的函数库可以对DBMS进行自定义或快速访问;
PHP是一种功能完整的面向对象编程语言,附有超过110种的函数库,可以执行数学去处、排序、创建PDF文件、发送邮件等各种任务。还有15种以上的库可适用于各种数据库程序,并能快速访问数据库层;
Zend引擎:是PHP专用的脚本引擎,可以实现PHP的语法并提供运行函数库所需的工具。
MySQL:可以存放百万条数据;
SQL,standard query language标准查询语言,用于数据库与数据的定义和操作,常用的数据库都支持它。数据库服务器应用程序接口需通过SQL被访问;1986年成了标准;
数据库服务器和SQL具有数据与程序的独立性,存储数据的方法与访问数据的语言是独立的。不管是使用电子数据表还是文本文件,都很难管理复杂数据关联性。数据库服务器通常能秩序坦然地允许多名用户同时访问数据库。当然对于大大量数据的查询更快;
使用数据库的时机:
1 同一时间有多个用户需要访问数据;
2 数据量在中等以上,如上百万条;
3 存储的数据项互有关联;
4 数据需精确限制,如字段长度、类型、顾客编号的唯一性;
5 基础的、相关联的数据可产生全新或强化过的信息,因此这种数据需要通过查询来生成报告或调查结果等;
6 安全需求极高,需要管理访问数据的用户;
7 新增、删除、修改数据是个复杂的过程时;
如果只有单一数据类型且没有搜索需求,则不需使用数据库,数据应该被编码到中间层的Web脚本中;
PHP的语法与Javascript相似,它们都遵守C语言与Perl的语法;
PHP脚本代码需用起始与结束标记<?php与?>嵌入在HTML中,空白没有影响,PHP脚本是一系列语句,每一个完整的语句都以分号结尾。运行脚本PHP程序代码包括起始与结束标记将替换为其执行结果;.php文件其实质首先是一个.html文档,如果中间了PHP代码,则将扩展名改为.php后,就成了.php文件了;
学习PHP的重点当然在于创建动态页面,使网页容纳取自用户输入或数据库的内容。
HTML中能嵌入多段PHP的灵活性却也可能形成笨重且难以维护的程序代码。当然使用模板template可以分享程序代码与HTML。
字符串的引用使用引号来表示字符串的开始和结束;
PHP脚本的执行,从PHP引擎读取文件中的脚本开始。文件只是一连串字符,需经PHP引擎解读为程序语句、变量标识符、字符串直接量、HTML等。而PHP还需要知道文件的字符编码(character encoding),才能正确解释字符的意义。再说明白些,PHP需要知道每一个8位构成的字符分别是什么意思,当然字符编码PHP会默认以ISO-8859-1的标准即ASCII来解读字符;
数据会以不同的类型存在,这样才能进行适当的运算。在PHP中变量的类型会随着变量的值改变而改变;
常量声明,如define("PI",3.14159);常量为程序代码内部的参数带来整组改变的可能性。PHP有很多能在程序脚本中的内置常量,如M_PI;
条件(conditional)增加了程序的判断力与选择性,根据表达式的逻辑值来执行不同的的语句;
循环(loop)增加了脚本的控制性,
遍历或迭代(iterate)
PHP的内置函数gettype()\print_r()\var_dump()可以输出人能看得懂的去处结果与类型,这些函数有助于程序调试,特别是当用在数组与对象上时。当然也可使用诸如is_int()\I_string()\is_array()\is_object\is_float()\is_bool等
变量的测试、设定与解除
isset()会测试变量是否被设定为non-null;
empty()测试变量值是否等于false;
unset()用于解除变量;
用户自定义函数可组合相关语句为一个块。对于需要重复使用的代码而言,函数节省了复制语句的使用,也使程序代码更为容易维护。
include与require两个文件重用的函数,也可以读取外部的文件;程序可以引用多个文件,为了避免重新进行变量赋值与重新定义函数的问题,PHP提供了include_once与require_once两种结构语句,以确保文件内容只被引用过一次;
PHP数组是一组有顺序的变量,其中的每个变量,也就是元素(element),都有相应的键(key).允许使用字符串或整数做为键,如果没有指定键,PHP会在建立数组时自动赋予整数键。数组可以包含标量值或复合值;
基本数组的函数
count()
创建数组的函数,以下两个
array_fill()
range()
array_key_exists()
array_keys()
处理用户输入的数据
用户输入查询参数的方式,多半是通过HTML表单选择或键入数据,或是单击请求脚本的链接。
从浏览器传递数据至服务器
共有三种技巧可传递驱动查询处理过程的数据至web数据库应用程序:
1 通过HTML表单输入数据。
2 在URL里键入查询所需的数据
3 嵌入检索PHP脚本资源的超链接并提供该脚本所需的参数。
<a href="example.6-13.php?regionName=All&wineType=All">wines</a>
许多web数据库应用程序需要限制用户的访问。有些程序处理高敏信息,例如银行帐户明细,有些程序则是提供信息或服务给付费的用记。这些程序需要身份谁并授权给用户请求,其执行方式多半是收集用户名称与密码,再与用户名单比较。
HTTP认证
运用Apache进行认证
访问用户证书
使用IP地址限制访问
以数据库进行认证
基于表单的认证
我们会从web数据库应用程序中生成可打印的报表,最常见的web报表格式有:PDF,丰富文本格式RTF、PostScript、HTML、XML、EMAIL、text;
在PHP程序通常与一些外部资源进行交互,如文件、数据库和网络流等。通常这种交互是通过句柄来完成的,这些句柄保持对资源的引用,直到通信结束,句柄才能撤销,这些句柄就属于资源数据类型。
函数要绑定到变量才能返回资源,而该资源类的变量也并不能真正地保存一个值,实际上只保存了一个指针,指向所打开的资源类型变量。在使用时,直接调用指针就行,如果输出内容,我们将看到一个资源的ID号引用。
在PHP中,从数据库中取出的这些数据都将被存放到数组中;
将数据和对数据的操作作为一个相互依赖不可分割的整体,使应用程序更接近于我们周围的现实世界。
类可以看作是一个实体模板;
使用对象的字段:object->field;
使用对象的方法:object->methodname();
构造函数调用其他构造函数:classname::_construct();调用类本身的方法:$this->methodname;
PHP中提供了读取、写入文件的函数,把文件作为一个“容器”来存储用户输入的信息,减轻数据库的负担,如用户留言系统,每个用户会有一个自己对应的文件,如果有了新的留言,就不需删除以前该用户的留言内容,直接覆盖就可以了。这样不仅避免了操作数据库表的麻烦,同时也减少了数据库的压力;
PHP的文件上传函数:move_uploaded_file();
身份认证:
基本的HTTP身份认证
PHP身份认证;
基于PHP的基本认证;
基于文件的认证;
基于数据库的认证;
基于IP的认证;
网页之间的通信技术:cookie,session;
数据库的操作
直接操作,用命令行的方式或工具的方式;
使用程序进行操作,对于Web而言,可以使用程序对数据库进行相关操作;
PHP也可以生成HTML,XML,PDF文档,GIF,JPG,PNG图像和flash动画;
PHP最初定位于一个框架,是一些有用的工具的集合;
PHP 2 is a server-side HTML embedded scripting language.it has built-in access logging and access restriction features and also support for embedded SQL queries ot mSQL.
PHP4新的解析器被命名为zend引擎(两个人名的合写);
配置信息页面<?php phpinfo(); ?>
PHP可以使用GD扩展轻松地创建和处理图像。
PHP也有一些扩展可用于生成PDF格式的文档;
在PHP中,下面的值为false:
关键字false;
整数0
浮点数0.0
空字符串("")和字符串“0”;
元素个数为0的数组;
没有值或函数的对数;
NULL值;
类是面向对象设计的基本单元。类是一个包含属性(变量)和方法(函数)的结构的定义。一旦定义了一个类,可以用关键字new来生成这个类的任意多个对象。类的属性和方法可以用->符号来访问;
许多模块提供了一些函数来处理外部事务。例如:每一个数据库扩展至少有一个函数来连接数据库,一个函数来向数据库发送查询,一个函数来关闭数据库连接。因为可以同时打开多个数据库连接,连接函数需要提供标志不同连接的办法:资源(或称”句柄“)。这样,当你调用数据库查询和关闭函数时,才知道使用哪个链接。
资源实际上是整数。使用资源的主要好处是它会自己完成内存管理。当最后一个对资源值的引用销毁时,创建该资源的扩展被调用来为该资源释放所有内存、关闭所有连接等。
=赋值,赋值操作符用于设置或更新存放于变量中的值。之前看到的自动递增和自动递减操作符是高级的专用赋值操作符。基本的赋值操作符=将一个值赋给变量。左边的操作数总是一个变量,右边的操作数可以是任意表达式。右边操作数的值被存放在左边操作数命名的变量里。带操作的赋值,这些操作符由一个二元操作符后面直接跟着一个等号组成。它们的作用和对操作数本身应用二元操作符,然后把赋给左边的操作数。如$a+=5,和$a=$a+5是一样的。
==值相等
===值和类型相等;
逻辑操作符提供了建立复杂逻辑表达式的方法。逻辑操作符将操作数作为布尔值对待,并且返回布尔值。
for语句增加了计算器初始化和计数器控制表达式;计算机初始化表达式只在for语句的开始执行一次。每次经过循环时,条件表达式都要执行一次,以判断真假,计数器控制表达式在循环体运行之后被计算。
for语句常常比相同意思的while循环更简短和更容易阅读。
$counter=0
while($counter<10){
echo "counter is $counter\n";
$counter++;
}
下面是相应的更简明的for循环:
for($counter=0;$counter<10;$counter++)
echo "counter is $counter\n";
PHP提供了两种结构从其他模块加载代码和HTML:require和include.
因为一个单独的》PHP文件中包含PHP和非PHP的源代码,所以PHP有用特殊的标记来标识PHP代码块,标记内的代码被执行并以生成的输出来代替每块PHP源代码;
函数是一段完成指定任务的命名过的代码。函数节省了编译的时间,无论调用它们多少次,函数仅为当前页面编译一次。同时也便于维护和阅读。
在PHP中有两种数组:索引数组和关联数组。索引(indexed)数组的键名(key)是整数并且从0开始。关联(associative)数组的键名是字符串,看起来像有两个列的数据表。第一列是用于访问键值的键名,第二列是键值。
、
面向对象的编程让我们可以进行更干净的设计,更轻松的代码维护,并且大大提高了代码的可征用性。OOP诠释了数据及操作数据的代码之间的基本联系,它让你通过这种联系设计和实现程序。例如,一个BBS程序经党会跟踪使用者的信息。如果使用面向过程的语言,每个用户将是一个数据结构,那么训会存在许多用来操作用户数据的函数(建立新用户,得到用户信息等)而使用面向对象语言,每个用户将会是一个对象类型的数据结构,并带有隶属于它的代码。数据和代码仍然是原来的样子,但它们被看成是不可分割的一个单元。
、
继承inheritance是通过声明“类似”于已存在的类来定义一个新的类的过程。但新的类可以有它自己特有的属性或方法。已存在的类称为父类或基类,新定义的类被称为子灰或派生生类。继承是一个不需要复制粘贴就可以征用父类代码的方法。任何对父类的改进或修改都会自动传递给子类。
为了继承另一个类中的属性和方法,我们可以在类定义时使用extends关键字,加上基类的名称。
Web运行是基于HTTP协议的。HTTP协议规定了浏览器如何向Web服务器请求文件,以及服务器如何根据请求返回文件。
当一个Web浏览器请求一个Web页面时,它会发送一个HTTP请求消息给Web服务器。这个请求消息总是包含某些头部信息(header information),有时也会有消息主体(obdy).Web服务器也会返回一个回应消息作为响应,回应消息也包含善信息和消息主休。HTTP请求的第一行通常是这样的:
get /index.html http/1.1
这个例子中,请求是用Get方法,并采用了HTTP1.1协议来请求名称为index.html的服务器端文档。
最常用的两种HTTP方法是GET和POST。GET方法用于从服务器中获得文档、图像或数据库检索结果的信息。POST则用于向服务器发送信息。当用记在浏览器的地址栏中刍入一个URL并访问或者单击网页上的一个链接时,浏览器都使用GET方法。而用户提交一个表单时,即可以使用P)ST方法,也可以使用GET方法。
一个GET请求把表单的参数编码成URL形式,这也称查询字符串;
一个POST请求则通过HTTP请求的主体来传递表单参数,不需要考虑URL。
HTTP是一个无状态的通讯协议,这意味着一旦Web服务器完成了客户端的Web页面请求,空位之间的连接也就断开了。换句话说,我们无法使服务器识别来自于同一个客户端的一系列请求。
但是状态是很有用的。比如,如果不能跟踪来自于同一个用户的一系列请求,就无法设计一个购物车程序。你需要知道什么时候一个用户在购物车中放入物品,什么时候删除,当他想结帐的时候购物车中有些什么物品。
为了解决Web状态不维持的问题,程序员提出了不少在两次请求间跟踪状态信息的方法(这称为会话跟踪,session tracking).其中一种方法是使用隐藏的表单字段来传递信息。因为PHP以对待正常表单字段的方式来对待隐藏表单字段,所以可以通过$_GETt _POST数组访问隐藏表单字段的值。这样利用隐藏表单字段,就可以传递购物车的全部信息。另一种更常用的方法是给每一个访问的用户分配一个唯一标识符,并且通过一个隐藏表单字段传送ID。隐藏表单字段能在所有的浏览器使用,但它们只能用于一系列动态创建的表单,所以它们不如其他的技术那么通用。
另一个方法是URL重写,用户访问的第一个URL都加上附加的信息,附加信息作为URL的参数。例如,如果你为每个用户分配一个唯一的ID,你可以在每个URL中包含该ID。
实现状态维持的第三种方法是使用cookie.cooke是服务器给客户端的一些信息。在后继的请求中,客户端将把信息返回给服务器,这样就可以标识自己的身份。Cooke对于浏览器重复访问时保持客户端信息很有用,但一些浏览器不支持,用户也有可能禁用。所以使用cookie来维持状态的程序需要使用另一个叫回退(fallback)的机制。
PEAR DB系统允许使用相同的函数画访问任何数据库,而不是依赖于各种特定数据库的扩展。这是PHP访问数据库的两种方法。
如果使用特定的数据库扩展,则你的程序代码和所使用的数据库联系密切,因数据库而异。如果想要把数据库从MySQL迁移到PostgreSQL,将会代码的重大改动。PEAR DB隐藏了各种数据库特有的功能,在数据库系统间迁移只需要简单地发动一行程序代码。
对于大多数数据库,需要选用合适的数据库驱动来重新编译PHP。不能将自己的系统中没有的数据库客户端库编译进PHP。例如,如果没有安装Oracle客户端代码库,就不能在编译PHP时使用Oracle数据库选项。可以使用phpinfo()函数来检查你的PHP中是否安装了某种数据库。
PHP使用结构查询语言SQL来和关系型数据库通信。
DSN data source name,数据源名是一个字符串,它指定数据库的位置、数据库的类型、连接数据库时使用的用户名和密码等信息。
一旦有了DSN,就可以使用connect()方法来创建数据库连接。该方法返回一个数据库对象,利用它可以进行查询和引用参数。
在一个数据库对象上调用query()方法可以向数据库发送SQL。
PEAR DB提供两种从查询结果对象中获取数据的方法,一种是返回对应下一行的数组,另一种是存储行数组以参数形式传递的变量中。
你也可以使用另外一个方法来访问数据库信息,即一个被称为PDO(PHP Data Objects)的数据库扩展。PHP数据对象(PDO)扩展在PHP中定义了一个接口,可以用于访问不同类型的数据库。每个实现PDO接口的数据库驱动都可以像普通的扩展函数那样使用某种特定数据库的特性。
注意不能光靠PDO扩展本身执行任何数据库功能,必须使用一个特定数据库的PDO驱动来访问数据库服务器。
相对于PEAR DB这种基于PHP代码的数据库抽象层而言,PDO是更底层的实现试。
PHP支持使用GD和Imlib2扩展来创建图像。
一个包含图像和文字的标准Web页面是由一系列来自Web浏览器的HTTP请求来创建的,每一个请求的响应都来自于服务器。每个请求的响应只包含一种数据类型,每一个图像要求一个独立的HTTP请求和服务器进行通讯。因此当你看到包含一些文字和两幅图像的网页时,你就知道这个页面是由3个请求和相应的响应来完成的。
Web浏览器为该页面发送的一毒死请求类似于:
GET /page.html http/1.0
GET /image1.jpg http/1.0
GET /image2.jpg http/1.0
服务器为以上每个请求发送一个单独的响应。响应中的content-type头是这样的:
content-type:text/html
content-type:image/jpeg
content-type:image/jpeg
网站上的数据是以web文件的形式存在的,各种web文件可以进行分类,形成一个个独立的web应用程序,而一个网站可以容纳多个web应用唾弃。
大部分的数据库数据操作与数组有关;