1.多维数据循环和遍历
<?php
// 二维数组:
$cars = array
(
array("Volvo",100,96),
array("BMW",60,59),
array("Toyota",110,100)
);
for ($i=0;$i<sizeof($cars);$i++){
$a=$cars[$i];
for ($x=0;$x<sizeof($a);$x++){
echo($a[$x].PHP_EOL);
}
echo("<br>");
date_default_timezone_set("Etc/GMT-8");//php默认时间少8小时,设置北京时间
echo(date("Y-m-d H:i:s"));
}
?>
2.php时间函数date()
<?php
//Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次為重慶,上海,烏魯木齊)
//港台地區可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次為澳門,香港,台北)
//台灣地区可設為:date.timezone = "Asia//Taipei"
//還有新加坡:Asia/Singapore
date_default_timezone_set("Etc/GMT-8");//php默认时间少8小时,设置北京时间
echo(date("Y-m-d H:i:s"));
?>
format 字符 |
说明 | 返回值例子 |
---|---|---|
日 | --- | --- |
d | 月份中的第几天,有前导零的 2 位数字 | 01 到 31 |
D | 星期中的第几天,文本表示,3 个字母 | Mon 到 Sun |
j | 月份中的第几天,没有前导零 | 1 到 31 |
l("L"的小写字母) | 星期几,完整的文本格式 | Sunday 到 Saturday |
N | ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) | 1(表示星期一)到 7(表示星期天) |
S | 每月天数后面的英文后缀,2 个字符 | st,nd,rd 或者 th。可以和 j 一起用 |
w | 星期中的第几天,数字表示 | 0(表示星期天)到 6(表示星期六) |
z | 年份中的第几天 | 0 到 365 |
星期 | --- | --- |
W | ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) | 例如:42(当年的第 42 周) |
月 | --- | --- |
F | 月份,完整的文本格式,例如 January 或者 March | January 到 December |
m | 数字表示的月份,有前导零 | 01 到 12 |
M | 三个字母缩写表示的月份 | Jan 到 Dec |
n | 数字表示的月份,没有前导零 | 1 到 12 |
t | 给定月份所应有的天数 | 28 到 31 |
年 | --- | --- |
L | 是否为闰年 | 如果是闰年为 1,否则为 0 |
o | ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) | Examples: 1999 or 2003 |
Y | 4 位数字完整表示的年份 | 例如:1999 或 2003 |
y | 2 位数字表示的年份 | 例如:99 或 03 |
时间 | --- | --- |
a | 小写的上午和下午值 | am 或 pm |
A | 大写的上午和下午值 | AM 或 PM |
B | Swatch Internet 标准时 | 000 到 999 |
g | 小时,12 小时格式,没有前导零 | 1 到 12 |
G | 小时,24 小时格式,没有前导零 | 0 到 23 |
h | 小时,12 小时格式,有前导零 | 01 到 12 |
H | 小时,24 小时格式,有前导零 | 00 到 23 |
i | 有前导零的分钟数 | 00 到 59> |
s | 秒数,有前导零 | 00 到 59> |
u | 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函数总是返回 000000 因为它只接受 integer 参数, 而 DateTime::format() 才支持毫秒。 | 示例: 654321 |
时区 | --- | --- |
e | 时区标识(PHP 5.1.0 新加) | 例如:UTC,GMT,Atlantic/Azores |
I | 是否为夏令时 | 如果是夏令时为 1,否则为 0 |
O | 与格林威治时间相差的小时数 | 例如:+0200 |
P | 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) | 例如:+02:00 |
T | 本机所在的时区 | 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如"Eastern Standard Time",中文版会显示"中国标准时间")。 |
Z | 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 | -43200 到 43200 |
完整的日期/时间 | --- | --- |
c | ISO 8601 格式的日期(PHP 5 新加) | 2004-02-12T15:19:21+00:00 |
r | RFC 822 格式的日期 | 例如:Thu, 21 Dec 2000 16:01:07 +0200 |
U | 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 | 参见 time() |
3.php包含文件includ和require
nclude 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
- require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
- include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
include 和 require 的区别
- require 一般放在 PHP 文件的最前面,程序在执行前就会先导入要引用的文件;
- include 一般放在程序的流程控制中,当程序执行时碰到才会引用,简化程序的执行流程。
- require 引入的文件有错误时,执行会中断,并返回一个致命错误;
- include 引入的文件有错误时,会继续执行,并返回一个警告。
语法:
include 'filename';
require 'filename';
4.文件处理
fopen() 函数用于在 PHP 中打开文件。
fgets()函数,获取文件内容。第一个参数为文件流,第二个为长度
fclose()关闭操作的文件
<?php
//fopen操作的文件路径,第一个参数 为文件路径和名称,第二个为操作类型
//or exit当文件无效时打印提示
$f=fopen("C:/Users/Administrator/Desktop/test.txt", "r") or exit("Unable to open file!");
//fgets()函数,逐行读取文件。第一个参数为文件流,第二个为长度。在调用该函数之后,文件指针会移动到下一行。
//fgetc() 函数用于从文件中逐字符地读取文件。在调用该函数之后,文件指针会移动到下一个字符
while(!feof($f))
{
echo fgets($f). "<br>";
echo fgetc($f). "<br>";
}
fclose($f)
?>
文件操作类型:
模式 | 描述 |
---|---|
r | 只读。在文件的开头开始。 |
r+ | 读/写。在文件的开头开始。 |
w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。 |
a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 |
x | 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
x+ | 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
5.文件上传
- <form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
- <input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
upload.php
<?php
header("content-type:text/html;charset=GBK");
?>
<html>
<head>
<meta charset="GBK">
<title>upload</title>
</head>
<body>
<form action="upload1.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
upload1.php
<?php
header("content-type:text/html;charset=GBK");
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
//explode把字符串打散维数组
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
//in_array检查数组中是否包含某个值
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判断当期目录下的 upload 目录是否存在该文件,若没有则创建
if(!(file_exists("upload"))){
mkdir(__DIR__."/upload");
}
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已经存在。 ";
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
?>
6.cookie
cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
setcookie() 函数用于设置 cookie。
setcookie() 函数必须位于 <html> 标签之前。
语法:setcookie(name, value, expire, path, domain);
设置、取出及删除cookie
<?php
header("content-type:text/html;charset=GBK");
//设置cookie
setcookie("user", "runoob", time()+3600);
?>
<html>
<head>
<meta charset="GBK">
<title>cookie</title>
</head>
<body>
<?php
//根据名称取出cookie
echo $_COOKIE["user"];
echo("<br>");
//取出所有cookie
print_r($_COOKIE);
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
echo $_COOKIE["user"]."------";
?>
</body>
</html>
7.session
session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
在使用 session 之前,首先必须启动会话。
session_start() 函数必须位于 <html> 标签之前
例:session的创建及销毁
<?php
header("content-type:text/html;charset=GBK");
//启动session
session_start();
//存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量
if(isset($_SESSION['num'])){
$_SESSION['num']=$_SESSION['num']+1;
}else{
$_SESSION['num']=1;
}
?>
<html>
<head>
<meta charset="GBK">
<title>cookie</title>
</head>
<body>
<?php
//取出session
echo $_SESSION["num"];
echo("<br>");
//释放指定session
unset($_SESSION['num']);
//释放所有session
session_destroy();
?>
</body>
</html>
8.php发送email
配置方式有多种,以xampp环境发送qq邮箱为例,利用stmp mail()函数发送邮件
1.配置php.ini
sendmail_path =D:\xampp\sendmail\sendmail.exe -t(只需要配置这一个)
2.配置sendemail.ini
smtp_server=smtp.qq.com
smtp_port=25
smtp_ssl=auto
error_logfile=error.log
auth_username=发送者QQ邮箱@qq.com
auth_password=你的授权码(设置第三步时,会返给你授权码)
force_sender=发送者QQ邮箱@qq.com
3.去邮箱设置允许stmp邮件收发
4.编写测试php代码
<?php
header("content-type:text/html;charset=GBK");
$to = "接收者@qq.com"; // 邮件接收者
$subject = "php邮件"; // 邮件标题
$message = "Hello word!。"; // 邮件正文
$from = "发送者@qq.com"; // 邮件发送者
$headers = "From:" . $from; // 头部信息设置
mail($to,$subject,$message,$headers);
echo "邮件已发送";
?>
9.错误处理
自定义错误处理器
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 和 error context);
语法:error_function(error_level,error_message, error_file,error_line,error_context)
参数含义:
参数 | 描述 |
---|---|
error_level | 必需。为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。 |
error_message | 必需。为用户定义的错误规定错误消息。 |
error_file | 可选。规定错误发生的文件名。 |
error_line | 可选。规定错误发生的行号。 |
error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
error_level级别:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
<?php
header("content-type:text/html;charset=GBK");
function customError($errno, $errstr,$error_file,$error_line,$error_context)
{
echo("错误级别:".$errno."<br>");
echo("错误信息:".$errstr."<br>");
echo("文件名称:".$error_file."<br>");
echo("行数:".$error_line."<br>");
echo(sizeof($error_context));
for ($i=1;$i<=sizeof($error_context);$i++){
echo($error_context[$i]."<br>");
}
}
// 设置错误处理函数
set_error_handler("customError" );
//trigger_error("变量值必须小于等于 1");
// 触发错误
echo($test);
?>
10.exception异常
当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。
Try、throw 和 catch:
- Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
- Throw - 里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"。
- Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。
<?php
header("content-type:text/html;charset=GBK");
// 创建一个有异常处理的函数
function checkNum($number)
{
if($number!=1)
{
throw new Exception("数值不等于1");
}
return true;
}
// 在 try 块 触发异常
try
{
checkNum(3);
// 如果抛出异常,以下文本不会输出
echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
- 创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
- 在 "try" 代码块中调用 checkNum() 函数。
- checkNum() 函数中的异常被抛出。
- "catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
- 通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息。
11.过滤器
PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。
PHP 过滤器用于验证和过滤来自非安全来源的数据。
测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。
几乎所有的 Web 应用程序都依赖外部的输入。这些数据通常来自用户或其他应用程序(比如 web 服务)。通过使用过滤器,您能够确保应用程序获得正确的输入类型。
您应该始终对外部数据进行过滤!
- 来自表单的输入数据
- Cookies
- Web services data
- 服务器变量
- 数据库查询结果
函数:
如需过滤变量,请使用下面的过滤器函数之一:
- filter_var() - 通过一个指定的过滤器来过滤单一的变量
- filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
- filter_input - 获取一个输入变量,并对它进行过滤
- filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
Validating 和 Sanitizing:
Validating 过滤器:
- 用于验证用户输入
- 严格的格式规则(比如 URL 或 E-Mail 验证)
- 如果成功则返回预期的类型,如果失败则返回 FALSE
Sanitizing 过滤器:
- 用于允许或禁止字符串中指定的字符
- 无数据格式规则
- 始终返回字符串
filter_var()实例:
<?php
header("content-type:text/html;charset=GBK");
$int = 123; // 无额外过滤选项 只判定是否为整数
if(!filter_var($int, FILTER_VALIDATE_INT)) {
// 输出:Integer is valid
echo "不是整数"."<br>";
} else {
echo "是整数"."<br>";
}
// 选项和标志,属于额外过滤选项
$int_options = array(
"options" => array(
// 'options' 固定
"min_range" => 0,
// 最小值
"max_range" => 100
// 最大值 'min_range'和'max_range' 也固定
)
);
// 过滤单一变量 即$int 增加额外过滤选项
if(!filter_var($int, FILTER_VALIDATE_INT, $int_options)) {
// 输出:Integer is not valid
echo "不在范围内"."<br>";
} else {
echo "在范围内"."<br>";
}
?>
filter_has_var() 和 filter_input():
filter_has_var(type, variable) 两个参数必填
参数一:
INPUT_GET
INPUT_POST
INPUT_COOKIE
INPUT_SERVER
INPUT_ENV
参数二:表单里的命名变量 filter_input(input_type, variable, filter, options) 前两个参数必填,后两个可选填,第三个不填则使用默认过滤条件,只判断是否为字符串。
<hr>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
Email : <input type="text" name="email">
Url: <input type="text" name="url">
<input type="submit" name="submit" value="提交">
</form>
<hr>
<?php
header("content-type:text/html;charset=GBK");
// 检查提交表单中是否含 "email"
if (!filter_has_var(INPUT_POST, "email")) {
echo "email不可为空<br>";
} else {
// 检查是否为有效邮箱地址
if (!filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL)) {
echo "email不是合法邮箱<br>";
} else {
echo "email是合法邮箱<br>";
}
}
//filter_has_var判断post请求参数是否存在
if (!filter_has_var(INPUT_POST, "url")) {
echo "url不可为空<br>";
} else {
if (!filter_input(INPUT_POST, "url", FILTER_VALIDATE_URL)) {
echo "url不是合法url<br>";
} else {
echo "url是合法url<br>";
}
}
?>
filter_input_array()过滤多输入 :
可能的选项或标志:
- FILTER_FLAG_NO_ENCODE_QUOTES - 该标志不编码引号
- FILTER_FLAG_STRIP_LOW - 去除 ASCII 值在 32 以下的字符
- FILTER_FLAG_STRIP_HIGH - 去除 ASCII 值在 32 以上的字符
- FILTER_FLAG_ENCODE_LOW - 编码 ASCII 值在 32 以下的字符
- FILTER_FLAG_ENCODE_HIGH - 编码 ASCII 值在 32 以上的字符
- FILTER_FLAG_ENCODE_AMP - 把 & 字符编码为 &
<!--filter_input_array函数-->
<?php
header("content-type:text/html;charset=GBK");
$name=$age=$email="";
$filters = array(
"name" => array( "filter" => FILTER_SANITIZE_STRING ),
"age" => array( "filter" => FILTER_VALIDATE_INT,
"options" => array( "min_range" => 1, "max_range" => 120 ) ),
"email" => FILTER_VALIDATE_EMAIL, );
// 符合过滤条件返回原变量否则返回false 'INPUT_GET' 对应表单提交的 method
$result = filter_input_array(INPUT_GET, $filters);
$name=$result["name"];
$age=$result["age"];
$email=$result["email"];
if (!$result["age"]) {
echo "Age应该位于 1到120之间.<br>";
} else {
echo "age是有效的.<br>";
} if (!$result["email"]) {
echo "Email是无效的.<br>";
} else {
echo "Email是有效的.<br>";
} if (!$result["name"]) {
echo "User是无效的.<br>";
} else {
echo "User是有效的.<br>";
}
?>
<form method="get" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
Age: <input type="text" name="age" value="<?php echo $age;?>">
Email: <input type="text" name="email" value="<?php echo $email;?>">
<input type="submit" name="submit" value="提交">
</form>
自定义过滤器callback:
使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
您可以创建自己的自定义函数,也可以使用已存在的 PHP 函数。
<?php
//filter_var函数
header("content-type:text/html;charset=GBK");
function convertSpace($string)
{
return str_replace("_", ".", $string);
}
$string = "www_baidu_com!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>
12.json
函数 | 描述 |
---|---|
json_encode | 对变量进行 JSON 编码 |
json_decode | 对 JSON 格式的字符串进行解码,转换为 PHP 变量 |
json_last_error | 返回最后发生的错误 |
son_encode:
PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。
语法:
string json_encode ( $value [, $options = 0 ] )
参数:
- value: 要编码的值。该函数只对 UTF-8 编码的数据有效。
- options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
<?php
header("content-type:text/html;charset=GBK");
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
json_decode:
PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
语法:
mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数:
-
json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数据
-
assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。
-
depth: 整数类型的参数,它指定递归深度
-
options: 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>