php基础教程 (PHP for the Web: Visual QuickStart Guide (4th Edition) )
此文只是上书的阅读笔记,不适合他人做参考学习.
本书进阶版:PHP与MySQL动态网站开发(第4版)(同一作者)
1 变量名
所有的变量名必须以美元符号($)开头;
在美元符号后的第一个字符必须为字母(A~Z,a~z)或者下划线(),不能使用数字;
所有的变量名必须以美元符号($)开头; •在美元符号后的第一个字符必须为字母(A~Z,a~z)或者下划线(),不能使用数字;
2 索引数组 关联数组
数组使用键来创建和检索它们保存的值,其结果构成为一系列键-值对,看上去像是一个两列的数据表。有趣的是,在PHP中的数组结构非常灵活,它的键和值都可以使用数值或者字符串类型。数组甚至不必在此方面保持一致性(在第7章接触到具体示例时,你就会明白这里所说的意思)。
PHP有两种数组类型,区别在于键的格式。如果一个数组使用数值作为键(参见表2-5)那么它就是索引数组,如果它使用字符串作为键(参见表2-6),那么就是关联数组。在任何一种情况下,数组中的值都可以是任何变量类型(字符串、数值或者其他类型)。
3理解引号
PHP允许使用单引号(')和双引号("),但是它们将导致截然不同的结果。理解这一点是非常重要的,因此在接下来的示例中将演示使用这两种引号的区别。
规则描述如下:使用单引号引用的内容将照字面意思进行处理,而被双引号引用的内容需要进行推断。也就是说,双引号引用的变量名将被它的值所替代,正如在脚本2-3中看到的那样。但单引号引用的变量名不会被替代。
4GET 和 POST
GET和POST之间的区别在于将信息从表单向处理信息的脚本传递的方式。
GET将所有的信息聚集起来并作为URL的一部分进行传递,而POST并不让用户看到传递的信息。
一般来说,从服务器上请求信息时,使用GET请求。几乎所有用于搜索的页面都会使用GET(当你使用搜索引擎时,看一下它的URL),就像那些分页显示结果的页面一样(比如分类浏览产品)。相反,POST一般用于触发基于服务器的行为,比如提交一张联系表(发送Email)或提交某个博客的评论(评论添加到数据库和该博客的页面上)。
无论表单使用什么method,你都可以在预定义的$_REQUEST变量中访问表单数据。然而,$_GET和$_POST更明确,所以更可取。
5表单
表单最重要的两个元素 action method
6格式化数值
有两个函数适合达到格式化数值的目的。
第一个是round(),它用于对数值截取特定位数的小数。函数的第一个参数是需要格式化的数值,它既可以是一个数字,也可以是一个存有数值的变量。第二个参数是可选的,它代表需要取的小数位数。例如:round (4.30); // 4
round (4.289, 2); // 4.29
$num = 236.26985;
round ($num); // 236
另外一个可以用来格式化数值的函数是number_format()。number_format()同round()的工作方式类似,它有一个数值参数(或者有数字值的变量)以及一个可选的小数位数指定参数。这个函数通过千位分组来格式化数字,格式化的效果通常如下所示:
number_format (428.4959, 2); // 428.50
number_format (428, 2); // 428.00
number_format (123456789); // 123,456,789
出于一些复杂的原因,round()函数对于“精确”半数的情况(0.5、0.05、0.005等),舍去和进上的次数是一半对一半,四舍六入五成双.
number_format()函数接受两个可选参数,这两个参数分别用来指定使用什么字符代表小数点位数和千分号。这是非常有用的,例如,在某些文化的习惯中,将1 000.89写为1.00089。如果希望使用这些选项,请参看PHP手册中相关的语法描述。
7n12br 处理换行符
字符串中的换行符通常给PHP开发新手带来一些问题。用户可以在textarea表单元素中用敲击Return或者Enter的方式输入多行文本。每次敲击Return或者Enter的结果在字符串中都相当于产生一个换行符。这些换行符在textarea中会起作用,但是在PHP页面呈现中将不会产生任何效果.
8 HTML和PHP (PHP是一项被频繁用来向Web浏览器发送数据的服务器端技术)
数据将从一个HTML表单中输入,然后使用PHP在Web浏览器上打印出来。一个潜在的问题是,用户可以在表单中输入HTML字符,这将会对页面的格式产生影响,或许还会导致更糟的结果,从而引发安全方面的问题。
可以使用一些PHP函数来处理PHP字符串变量中的HTML标签。
•htmlspecialchars()将特定的HTML标签转换为实体版本。
•htmlentities()将所有的HTML标签转换为实体版本。
•strip_tags()移除所有的HTML和PHP标签。
9 字符串的编码和解码
urlencode()函数可以通过URL安全地将任意值传送到PHP脚本。顾名思义,这个函数接受一个字符串,并对之编码(en-code)(改变它的格式),以便它完全适合作为URL的一部分传输。这个函数用加号(+)替换掉空格,并且将特殊字符(如省略号)转换为较少出现问题的形式。
从表单直接发送的值,在被发送之前会自动进行URL—编码,接收脚本收到后再对其进行解码。
10字符串的加密和解密
可以使用crypt()函数来对数据进行加密,但是请注意没有解密选项可用(它是一种单向加密方式)。因此,可以用它来对密码进行加密并且保存,但是无法确定解码值。在Web应用程序中使用这个函数,可以在注册的时候对用户密码进行加密,然后当用户登录时,他们输入的密码同样会被加密,并且会对密码的两个加密版本进行对比。crypt()的语法如下:$data = crypt($data);
如果数据被存储在数据库中,也可以使用数据库应用程序(例如MySQL、PostgreSQL、Oracle或者SQL Server)中的内置函数来执行加密和解密。大多数技术都提供单向或者双向的加密工具,但还取决于你所使用的技术。
11创建模板,使用外部文件
可以将页面划分成特定的元素,然后使用特定的函数将它们合并到主PHP页面中,这样可以节省开发时间。需要使用的函数有include()和require():
include ('file.php'); 警告
require ('file.html');终止
这两个函数的工作方式相同,它们的区别也不是很大:如果include()函数失败了,PHP脚本会生成一个警告(参见图8-7),但继续运行。相反,如果require()失败了,它会终止脚本的执行
12常量
define();
13时间
date()函数可以接受另一个参数,这个参数称作时间戳(timestamp)。
时间戳是一个数字,表示从1970年1月1日午夜起计算的秒数——这一时刻也称作epoch。
time()函数可以返回当前时刻的时间戳。
mktime()函数可以返回一个给定的时间和日期的时间戳:
mktime(hour, minute, second, month, day, year);
因此下面的代码:$ts = mktime(12, 30, 0, 11, 5, 2011);
可以将从epoch到2011年11月5日12:30经过的秒数赋值给$ts变量。这个数值可以传递给date()函数,如下所示:date('D', $ts);这会返回Sat,它是用3个字母表示的一周中的某一天。
由于PHP是一种服务器端的技术,因此这些函数反映的是服务器上的日期和时间。要获取客户端(换句话说,就是用于浏览页面的Web浏览器所在的计算机)的时间,则必须使用JavaScript。
14使用一个php脚本完成表单处理所有流程
浏览器第一次访问login.php是GET请求.
login.php提交表单给自己是POST请求.
判别请求方式语句:$_SERVER['REQUEST_METHOD'] == 'POST'
15输出缓冲
要启用输出缓冲,请在页面的最顶端使用ob_start()函数。
在脚本的结尾处,调用ob_end_flush()函数,将积累下来的缓冲发送到Web浏览器。
或者,可以使用ob_end_clean()函数删除缓冲的数据而不进行传输。
这两个函数都会为当前脚本关闭输出缓冲。
16处理HTTP头
除了发送HTML、图片等信息外,Web服务器通常需要用其他一些方式与客户端通信。这些额外的通信需要使用HTTP头实现。
17 函数返回多个值
返回数组 小米阅读 583 网页版
18 文件
在创建可写文件和目录时,将它们放在Web根目录之外会更安全。换句话说,如果Web页面放置在C:\inetpub\wwwroot或/Users/username/Sites中,此时,如果你将项目放置在C:\inet-pub或/Users/username中,这些项目可以被本地运行的PHP访问到,但不能通过Internet访问。本章中的示例都遵从这种结构,你也应该严格遵守。
写入文件最简单的方式是使用file_put_contents()函数
PHP专用的常量PHP_EOL,表示当前操作系统的换行符
如果需要将新内容追加到文件中,加入FILE_APPEND常量作为第三个参数:
file_put_contents($file, $data, FILE_APPEND);
如果正在运行的PHP版本是安全模式的,或设置了open_basedir指令,则在使用PHP访问文件和目录时会受到一些限制。请使用phpinfo()函数来查看服务器上的这些设置。
- 读取文件
使用file_get_contents()会将文件中的所有内容按照一个字符串来读取:$data = file_get_contents($file);
如果文件每一行都有一些数据,就像例子中的quotes.txt,最好使用file()函数:$data = file($file);file()函数是PHP中非常有价值的一个内置工具。与file_get_contents()不同,它读取文件中的所有内容并将这些信息放置在一个数组中。数组的每个元素都包含了文件中的一行,这些行是用换行符(\n或\r\n)分隔的。
+文件上传
为了让用户能够上传文件,必须对标准的HTML表单作出3处更改。首先,初始form标签必须包含代码enctype="multipart/form-data",让浏览器知道表单数据将具备不同的类型:<form action="script.php" enctype="multipart/form-data" method="post">表单必须使用POST方法。