PHP
PHP基础教程
语法
-
PHP 脚本以<? php 开头 ,以?>结尾
-
php语句以 ;结尾,php代码块的关闭标签也会自动标名 ;
-
php支持的三种注释
//单行注释
单行注释
/*
多行注释
*/
-
php中,所有用户定义的函数、类和关键词都对大小写不敏感;
但所有变量都对大小写敏感
变量
变量规则:
- 以$符号开头,后跟变量名称
- 变量名称必须以字母或下划线开头,不能以数字开头
- 变量名称只能包含(A-Z,0-9,_)
- 变量名称对大小写敏感
三种不同的变量作用域:
- local(局部)
- global(全局)
- static(静态)
global 和 local
函数之外声明的变量拥有 global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 local 作用域,只能在函数内部进行访问。
在函数内部变量前使用 global,就可以在内部访问变量
static静态变量
通常,当函数完成/执行后,会删除所有变量;当需要不删除某个局部变量,可以使用static。每当函数被调用时,static变量所存储的信息都是函数最后一次被调用时所包含的信息。
输出方法
PHP echo 和 print 语句
- print 只能输出一个字符串,并始终返回1
- echo 能够输入一个以上的字符串
使用echo:
使用print:
数据类型
- 字符串是字符序列,可以是引号内的任何文本
- 整数(int) 不能包括逗号或空格,可以用十进制,八进制(前缀为0),十六进制(前缀为0x)三种格式规定
- 浮点数(float)是有小数点或指数形式的数字
- 逻辑 (bool) 是 true 或 false
- 数组(array)在一个变量中储存多个值
- 对象(class)是存储数据和有关如何处理数据信息的数据类型
- NULL值表示变量无值或不存在值
字符串函数
-
strlen() 函数返回字符串的长度
-
str_word_count() 函数对字符串中的单词进行计数
-
strrev() 函数反转字符串
-
strpos() 函数用于检索字符串内指定的字符或文本
[字符串首字符位置是0]
-
str_replace() 函数用于替换字符串中的文本
常量
设置常量,使用define()函数:
- 第一个参数定义常量的名称
- 第二个参数定义常量的值
- 第三个规定常量名是否对大小写不敏感,默认是 false
运算符
- 算数运算符:+ - * / %
例:$x % $y $x 除 $y 的余数
-
赋值运算符:
x=y 等同于 x=y
x+=y 等同于 x=x+y
x-=y 等同于 x=x-y
x*=y 等同于 x=x * y
x/=y 等同于 x=x/y
x%=y 等同于 x=x%y
-
字符串运算符:
串接 .
串接赋值 .=
-
递增/递减运算符
++$x 前递增 $x++ 后递增
--$x 前递减 $x-- 后递减
-
比较运算符
== 等于 $x == $y
=== 全等(完全相同) $x === $y
!= 不等于 $x != $y
<> 不等于 $x <> $y
!== 不全等(完全不同) $x !== $y,> 大于 $x > $y
< 小于 $x < $y
= 大于或等于 $x >= $y
<= 小于或等于 $x <= $y -
逻辑运算符
and、 && 与
or 、|| 或(至少一个)
xor 异或(有且仅有一个)
! 非
-
数组运算符
+,联合 $x + $y
==,相等 $x == $y
===,全等 $x === $y
!=、<>,不相等 $x != $y、$x <> $y
!,不全等 $x ! $y
if...else...elseif
-
if 语句 - 如果指定条件为真,则执行代码
-
if...else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
-
if...elseif....else 语句 - 根据两个以上的条件执行不同的代码块
if (条件) {条件为 true 时执行的代码; } elseif (条件) {条件为 true 时执行的代码; } else {条件为 false 时执行的代码; }
which
- switch 语句 - 选择多个代码块之一来执行
- 对表达式(通常是变量)进行一次计算
- 把表达式的值与结构中 case 的值进行比较
- 如果存在匹配,则执行与 case 关联的代码
- 代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
- 如果没有 case 为真,则使用 default 语句
while 循环
-
while - 只要指定条件为真,则循环代码块
while (条件为真) {要执行的代码; }
-
do...while - 先执行一次代码块,然后只要指定条件为真则重复循环
do {要执行的代码; } while (条件为真);
For 循环
-
for 循环执行代码块指定的次数
for (init counter; test counter; increment counter) {code to be executed; }
- init counter:初始化循环计数器的值
- test counter:: 评估每个循环迭代。如果值为 TRUE,继续循环。如果它的值为 FALSE,循环结束。
- increment counter:增加循环计数器的值
-
foreach 循环只适用于数组,并用于遍历数组中的每个键/值对
foreach ($array as $value) {code to be executed; }
函数
用户的函数声明以'function'开头
function functionName(){被执行的代码;
}
调用该函数时,使用'functionName()'即可;
当函数中有参数时,调用函数时,同时要传递信息
多个参数用,隔开
<?php
function familyName($fname,$year) {echo "$fname Zhang. Born in $year <br>";
}familyName("Li","1975");
familyName("Hong","1978");
familyName("Tao","1983");
?>
数组
数组能够在单独的变量名中存储一个或多个值
array();
三种数组类型:
索引数组,关联数组,多维数组
count()
函数用于获取数组的元素数
索引数组
索引时自动分配的,从0开始
如需遍历并输出索引数组的所有值,可以使用for循环:
关联数组
$id=array('aaa'=>'1','bbb'=>'2','ccc'=>'3');
$id['aaa']=1;
$id['bbb']=2;
$id['ccc']=3;
如需遍历并输出关联数组的所有值,可以使用foreach循环:
数组排序
- sort() - 以升序对数组排序
- rsort() - 以降序对数组排序
- asort() - 根据值,以升序对关联数组进行排序
- ksort() - 根据键,以升序对关联数组进行排序
- arsort() - 根据值,以降序对关联数组进行排序
- krsort() - 根据键,以降序对关联数组进行排序
sort举例:
asort举例:
超全局
超全局变量是在全部作用域中始终可用的内置变量
- $GLOBALS 全局变量
- $_SERVER 保存关于报头、路径和脚本位置的信息
- $_REQUEST 收集 HTML 表单提交的数据
- $_POST 收集 HTML 表单提交的数据,也常用于传递变量
- $_GET 收集HTML 表单提交的数据,也可收集 URL 中发送的数据
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
PHP表单
表单处理
单选
- isset 判断变量或元素是否存在
- action="" 表示提交到当前脚本
下拉菜单单选
- 通过select的name属性获取下拉菜单的值
checkbox 复选框
- checkbox 复选框可以选择多个值
- 通过name="q[]"以数组的方式获取
下拉菜单多选
- 下拉菜单是多选的( multiple="multiple")
$GET 和 $POST
GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中),GET 对所发送信息的数量也有限制,不适合发送敏感信息和密码;
通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制,由于变量未显示在 URL 中,无法将页面添加到书签
表单元素
-
< form>在html 中是表单的意思,是一个为用户输入创建HTML表单的标签
action:表示当前表单中的内容提交给哪个页面进行处理
method:表示当前表单提交的方式,常见的有get和post方式,默认是get提交
-
输入元素input
type="text" 单行文本输入框
type="password" 密码输入框
type="checkbox" 复选框
type="radio" 单选框
type="file" 文件域
type="submit" 将表单里的信息提交给表单属性action所指向的文件
type="reset" 将表单里的信息清空,重新填写
type="image" 图片提交按钮
type="button" 按钮
type="hidden" 隐藏域
-
select和option
用来实现下拉列表
<select name=""><option value="">内容</option> <option value="">内容</option> <option value="">内容</option></select>
默认情况下,提交时,它将option里面的内容作为提交的内容,但是通常会给option设置一个value属性,属性值我们通常用数字
-
textarea
定义多行文本输入控件。
元素通常用在表单中,用于收集用户的输入,如评论或评论
文本区域可以容纳无限数量的字符,并且文本以等宽字体呈现。
文本区域的大小由 cols 和 rows 属性(或使用 CSS)规定
也可以设置 placeholder 属性来实现占位符的效果
提交表单后需要 name 属性来引用表单数据(如果省略 name 属性,则不会提交文本区域的数据)
需要 id 属性将文本区域与标签(label)相关联
<textarea cols="30" rows="10"></textarea>
表单的HTML代码:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
$_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名$_SERVER["PHP_SELF"] 将表单数据发送到页面本身
htmlspecialchars() 函数把特殊字符转换为 HTML 实体,能够避免 $_SERVER["PHP_SELF"] 被利用
表单验证
- 通过 PHP trim() 函数去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
- 通过 PHP stripslashes() 函数删除用户输入数据中的反斜杠(\)
- 通过 test_input() 函数检查每个 $_POST 变量
<?php
// 定义变量并设置为空值
$name = $email = $gender = $comment = $website = "";if ($_SERVER["REQUEST_METHOD"] == "POST") {$name = test_input($_POST["name"]);$email = test_input($_POST["email"]);$website = test_input($_POST["website"]);$comment = test_input($_POST["comment"]);$gender = test_input($_POST["gender"]);
}function test_input($data) {$data = trim($data);$data = stripslashes($data);$data = htmlspecialchars($data);return $data;
}
?>
$_SERVER["REQUEST_METHOD"]是访问页面使用的请求方法
则脚本开头是在检查表单是否用 $_SERVER["REQUEST_METHOD"] 进行提交。如果 REQUEST_METHOD 是 POST,那么表单已被提交 - 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单
表单必填
<!DOCTYPE HTML>
<html>
<head><style>.error {color: #FF0000;}</style>
</head>
<body><?php
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";if ($_SERVER["REQUEST_METHOD"] == "POST") {if (empty($_POST["name"])) {$nameErr = "姓名是必填的";} else {$name = test_input($_POST["name"]);}if (empty($_POST["email"])) {$emailErr = "电邮是必填的";} else {$email = test_input($_POST["email"]);}if (empty($_POST["website"])) {$website = "";} else {$website = test_input($_POST["website"]);}if (empty($_POST["comment"])) {$comment = "";} else {$comment = test_input($_POST["comment"]);}if (empty($_POST["gender"])) {$genderErr = "性别是必选的";} else {$gender = test_input($_POST["gender"]);}
}function test_input($data) {$data = trim($data);// 去除输入中的空格$data = stripslashes($data);// 去除输入中的反斜杠$data = htmlspecialchars($data);// 转义特殊字符return $data;
}
?><h2>PHP 验证实例</h2>
<p><span class="error">* 必需的字段</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">姓名:<input type="text" name="name"><span class="error">* <?php echo $nameErr;?></span><br>电邮:<input type="text" name="email"><span class="error">* <?php echo $emailErr;?></span><br>网址:<input type="text" name="website"><span class="error"><?php echo $websiteErr;?></span><br>评论:<textarea name="comment" rows="5" cols="40"></textarea><br>性别:<input type="radio" name="gender">女性<input type="radio" name="gende" >男性<span class="error">*<?php echo $genderErr;?></span><br><input type="submit" value="提交">
- .error
是一个CSS规则,它将应用于具有 "error" 类的HTML元素,将这个类的颜色设置为红色
-
开始前先定义变量并设置为空值
-
$_SERVER["REQUEST_METHOD"] == "POST" 表示当前HTTP请求的方法是POST
-
PHP empty() 函数检查$POST变量是否为空
-
function test_input($data) 是一个用户自定义的函数,用于过滤和验证用户输入的数据,以防止潜在的SQL注入或其他安全漏洞
-
函数参数和返回值
参数:$data,表示用户输入的数据。
返回值:处理后的数据,已去除空格、反斜杠,并转义了特殊字符。 -
action="< ?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" 这段代码的作用是将表单提交的数据发送到当前页面本身,而不是跳转到另一个页面
-
< span class="error">
span标签在HTML中用于对内联元素进行分组,但它本身不提供视觉上的改变,可以用于将内容与其他元素分开,从而允许用户仅对所选文本进行更改;
class属性可以用于应用CSS样式,如颜色、字体大小等
验证名字、电邮和 URL
- preg_match() 函数检索字符串的模式
验证名字
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {$nameErr = "只允许字母和空格!";
}
验证 E-mail
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {$emailErr = "无效的 email 格式!";
}
验证 URL
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
=~_|]/i",$website)) {$websiteErr = "无效的 URL";
}
PHP高级教程
PHP多维数组
-
二维数组是数组的数组,三维数组是数组的数组的数组
-
数组的维度指示您需要选择元素的索引数
对于二维数组,需要两个索引来选取元素
在For循环中使用另一个For循环,来获得数组中的元素
PHP日期和时间
PHP date() 函数用于对日期或时间进行格式化
date(format,timestamp)
关于日期的字符:
- d-表示月里的某天
- m-表示月
- Y-表示年
- 1 - 表示周里的某天
关于时间的字符:
- h-带有首位零的12小时小时格式
- i-带有首位零的分钟
- s-带有首位零的秒
- a-小写的午前和午后
时区设置:
eg. date_default_timezone_set("Asia/Beijing")
mktime()创建日期:
mktime(hour,minute,second,month,day,year)
strtotime()用字符串来创建日期:
strtotime(time,now)
输出最近三周中周一的日期:
输出12月23日之前的天数:
- ceil 向上取整
- time() 用于获取当前的系统时间,该函数返回自Unix纪元
- /60/60/24 时间单位的换算,将秒换算成天
Include 文件
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件
include 'filename';
require 'filename'
include 与 require 的区别:
如果用 include 语句引用某个文件并且 PHP 无法找到它,脚本会继续执行;
如果使用 require 语句,echo 语句不会继续执行,在 require 语句返回严重错误之后脚本就会终止执行
当文件被应用程序请求时,使用 require;
当文件不是必需的,且应用程序在文件未找到时应该继续运行时,使用 include
文件处理
打开文件 fopen()
fopen() 的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式
读取文件 fread()
第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数
fread($myfile,filesize("file.txt"))
( 把file.txt文件读至结尾 )
关闭文件 fclose()
fclose() 函数用于关闭打开的文件
<?php
$myfile = fopen("file.txt" ,"r");
fclose($myfile);
?>
读取单行文件 fgets()
fgets() 函数用于从文件读取单行
<?php
$myfile = fopen("file.txt","r") or die ("Unable to open file!")
echo fgets($myfile);
fclose($myfile);
?>
(输出"file.txt"文件的首行)
调用 fgets() 函数之后,文件指针会移动到下一行
检查 End-Of-File feof()
feof() 对于遍历未知长度的数据很有用,检查是否已到达文件末尾
在 w 、a 和 x 模式下,无法读取打开的文件
$file = fopen("test.txt", "r");
while (!feof($file)) {$data = fgets($file);echo $data;
}
fclose($file);
读取单字符 fgetc()
fgetc() 函数用于从文件中逐字符地读取文件;
在调用该函数之后,文件指针会移动到下一个字符
<?php
$file=fopen("test.txt","r") or exit("无法打开文件!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
创建文件 fopen()
fopen() 函数也用于创建文件,如果用 fopen() 打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)
$myfile = fopen("testfile.txt", "w")
试图运行这段代码时发生错误,检查是否有向硬盘写入信息的 PHP 文件访问权限
写入文件 fwrite()
-
fwrite() 函数用于写入文件
-
fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
PHP 覆盖(Overwriting)
如果现在 "newfile.txt" 包含了一些数据,可以展示在写入已有文件时发生的的事情。所有已存在的数据会被擦除并以一个新文件开始。
文件上传
创建一个文件上传表单
<html>
<body><form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form></body>
</html>
-
< form>标签的 enctype 属性规定了在提交表单时要使用哪种内容类型在表单需要二进制数据时,比如文件内容,使用 "multipart/form-data"
-
< label>标签用于定义表单控件的标注,通过点击label中的文本,可以触发相关的表单控件;< label> 标签的 for 属性应当与相关元素的 id 属性相同。例如,< label for="file">Filename:< /label> 中的 for="file" 应当与 < input type="file" id="file"> 中的 id="file" 相匹配
这样,当用户点击"Filename:"时,焦点会自动跳转到文件输入框
-
< input> 标签的 type="file" 属性规定了应该把输入作为文件来处理
name="file"设置了输入字段的名称,用于表单提交时识别这个字段的数据
id="file"设置了输入字段的唯一识别符,用于CSS样式定位或JavaScript操作
创建上传脚本
<?php
if ($_FILES["file"]["error"] > 0){echo "Error: " . $_FILES["file"]["error"] . "<br />";}
else{echo "Upload: " . $_FILES["file"]["name"] . "<br />";echo "Type: " . $_FILES["file"]["type"] . "<br />";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";echo "Stored in: " . $_FILES["file"]["tmp_name"];}
?>
通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件
$_ FILES ["file"] ["name"] - 被上传文件的名称
$_ FILES ["file"] ["type"] - 被上传文件的类型
$_ FILES ["file"] ["size"] - 被上传文件的大小,以字节计
$_ FILES["file"] ["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"] ["error"] - 由文件上传导致的错误代码
上传限制
<?phpif ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)){if ($_FILES["file"]["error"] > 0){echo "Error: " . $_FILES["file"]["error"] . "<br />";}else{echo "Upload: " . $_FILES["file"]["name"] . "<br />";echo "Type: " . $_FILES["file"]["type"] . "<br />";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";echo "Stored in: " . $_FILES["file"]["tmp_name"];}}
else{echo "Invalid file";}?>
在这个脚本中,用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb
保存被上传的文件
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)){if ($_FILES["file"]["error"] > 0){echo "Return Code: " . $_FILES["file"]["error"] . "<br />";}else{echo "Upload: " . $_FILES["file"]["name"] . "<br />";echo "Type: " . $_FILES["file"]["type"] . "<br />";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";if (file_exists("upload/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " already exists. ";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);echo "Stored in: " . "upload/" . $_FILES["file"]["name"];}}}
else{echo "Invalid file";}
?>
cookie
cookie常用于识别用户,cookie 是服务器留在用户计算机中的小文件;每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie;通过 PHP,您能够创建并取回 cookie 的值
创建 cookie
setcookie() 函数用于设置 cookie
setcookie() 函数必须位于 < html> 标签之前
setcookie(name,value,expire,path,domain);
name:必需参数,规定cookie的名称
value:必需参数,规定cookie的值
expire:可选参数,规定cookie的过期时间,默认为当前会话结束时。时间戳格式。
path:可选参数,规定cookie的有效路径。浏览器在发送cookie时只会发送对应路径及祖先路径的cookie。例如,如果path设置为/dir/,则只有路径为/dir/及其子目录的请求会携带该cookie
domain:可选参数,规定cookie的域名。只能设置为当前域或当前域的上级域
取回Cookie的值
$_COOKIE 变量用于取回 cookie 的值
<?php
// Print cookie
echo $_COOKIE["user"];// 把所有cookie都显示在页面上
print_r($_COOKIE);
?>
print_r是一个PHP函数,用于打印变量的易于理解的信息;
当使用print_r($_COOKIE)时,它会显示当前页面所有cookie的名称和值
使用 isset() 函数来确认是否已设置了 cookie:
<?php
if (isset($_COOKIE["user"]))echo "Welcome " . $_COOKIE["user"] . "!<br />";
elseecho "Welcome guest!<br />";
?>
删除cookie
将日期更换为过去的时间点
setcookie("user", "", time()-3600);
Session 变量
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量;UID 存储在 cookie 中,亦或通过 URL 进行传导
开始 PHP Session
在您把用户信息存储到 PHP session 中之前,首先必须启动会话
session_start() 函数必须位于 < html> 标签之前
<?php ssession_start();?>
储存 Session 变量
使用$_SESSION变量存储和取回session变量
<?php
session_start();
$_SESSION['views']=1;
?><html>
<body><?php
echo "Pageviews=".$_SESSION['view'];
?></body>
</html>
创建page-view计数器
<?php
session_start();if(isset($_SESSION['views']))$_SESSION['views']=$_SESSION['views']+1;else$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
终结Session
删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数
unset() 函数用于释放指定的 session 变量:
<?php
unset($_SESSION['views']);
?>
通过 session_destroy() 函数彻底终结 session:
<?php
session_destroy();
?>
session_destroy() 将重置 session,将失去所有已存储的 session 数据
发送电子邮件
mail() 函数
用于从脚本中发送电子邮件
mail(to,subject,message,headers,parameters)
to 规定email接收者
subject 规定email的主题
message 定义要发送的信息
headers 规定附加的标题,比如 From、Cc 以及 Bcc,在发送电子邮件时具有特定的含义和用途
From:这个标题用于标识邮件的发件人地址。在发送邮件时,需要在邮件头部指定发件人的邮箱地址,以便收件人知道邮件的来源
Cc:Carbon Copy的缩写,意为抄送;在发送邮件时,如果希望将邮件副本同时发送给其他人,可以在Cc字段中添加这些人的邮箱地址;这样,原始收件人和抄送对象都能收到邮件的副本,但抄送对象不会出现在收件人列表中
Bcc:Blind Carbon Copy的缩写,意为密送。与Cc类似,Bcc也用于发送邮件副本,但与Cc不同的是,Bcc中的收件人不会在邮件中显示出来,即原始收件人和密送对象都不会知道对方的存在。这通常用于保护隐私或避免不必要的干扰
这些标题在发送电子邮件时,能够帮助用户精确地控制邮件的接收者和可见性
parameters 对邮件发送程序规定额外的参数
发送简易的email:
在自己的站点制作一个反馈表单:
向指定的 e-mail 地址发送了一条文本消息
$_REQUEST是PHP中的一个超全局变量,用于获取通过HTTP请求发送的数据。它包含从GET请求、POST请求和Cookie中获取的数据,因此可以同时处理GET和POST请求的数据。
错误处理
错误处理的几种办法:
- 简单的 "die()" 语句
- 自定义错误和错误触发器
- 错误报告
使用 die() 函数
举例:
<?php
if(!file_exists("welcome.txt")){die("File not found");}
else{$file=fopen("welcome.txt","r");}
?>
当文件不存在时,会得到信息
File not found
创建自定义错误处理器
创建了一个专用函数,可以在 PHP 中发生错误时调用该函数
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):
error_function(error_level,error_message,
error_file,error_line,error_context)
Set Error Handler
PHP 的默认错误处理程序是内建的错误处理程序,我们打算把上面的函数改造为脚本运行期间的默认错误处理程序。
创建一个错误处理程序
触发错误
在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的;在 PHP 中,这个任务由 trigger_error() 完成。
错误记录
使用 error_log() 函数,可以向指定的文件或远程目的地发送错误记录
这个方法不适合所有的错误。常规错误应当通过使用默认的 PHP 记录系统在服务器上进行记录。
异常处理
异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程,这种情况称为异常。
当异常被触发时,通常会发生:
- 当前代码状态被保存
- 代码执行被切换到预定义的异常处理器函数
- 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
Try,throw和catch
- Try - 使用异常的函数应该位于 "try" 代码块内,如果没有触发异常,则代码将照常继续执行;但是如果异常被触发,会抛出一个异常
- Throw - 这里规定如何触发异常,每一个 "throw" 必须对应至少一个 "catch"
- Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
创建一个异常
过滤器(Filter)
过滤器用于验证和过滤来自非安全来源的数据
验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分
应该始终对外部数据进行过滤
什么是外部数据?
- 来自表单的输入数据
- Cookies
- 服务器变量
- 数据库查询结果
函数和过滤器
- filter_var() - 通过一个指定的过滤器来过滤单一的变量
- filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
- filter_input - 获取一个输入变量,并对它进行过滤
- filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
使用"FILTER_VALIDATE_INT" 过滤器来过滤变量,将非整数过滤掉
Validating 和 Sanitizing
Validating 过滤器:
-
用于验证用户输入
-
严格的格式规则(比如 URL 或 E-Mail 验证)
-
如果成功则返回预期的类型,如果失败则返回 FALSE
Sanitizing 过滤器:
-
用于允许或禁止字符串中指定的字符
-
无数据格式规则
-
始终返回字符串
净化输入
清理从表单传来的 URL:
首先,我们要确认是否存在我们正在查找的输入数据
然后,我们用 filter_input() 函数来净化输入数据
Filter Callback
使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,这样就拥有了数据过滤的完全控制权
使用一个自定义的函数把所有 "_" 转换为空格
PHP数据库
连接数据库
mysqli_connect(servername,username,password);
关闭连接
$value->close();
mysqli_close($connect);
创建
创建数据库
mysqli_query($connect,"CREATE DATABASE database_name")
创建数据表
选取数据库
mysql_select_db("databse_name",$connect)
MySQL数据类型
数据插入
向数据库中插入