微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php学习-3(进阶)

1.多维数据循环和遍历

PHP

// 二维数组:

$cars = array

(

array("Volvo",100,96),

array("BMW",60,59),

array("Toyota",110,100)

);

for ($i=0;$i

$a=$cars[$i];

for ($x=0;$x

echo($a[$x].PHP_EOL);

}

echo("
");

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). "
";

echo fgetc($f). "
";

}

fclose($f)

?>

文件操作类型:

模式

描述

r

只读。在文件的开头开始。

r+

读/写。在文件的开头开始。

w

只写。打开并清空文件内容;如果文件不存在,则创建新文件

w+

读/写。打开并清空文件内容;如果文件不存在,则创建新文件

a

追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件

a+

读/追加。通过向文件末尾写内容,来保持文件内容

x

只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误

x+

读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误

5.文件上传

标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

upload.PHP

PHP

header("content-type:text/html;charset=GBK");

?>

<Meta charset="GBK">

upload

PHP" method="post" enctype="multipart/form-data">

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"] . "
";

}

else

{

echo "上传文件名: " . $_FILES["file"]["name"] . "
";

echo "文件类型: " . $_FILES["file"]["type"] . "
";

echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB
";

echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "
";

// 判断当期目录下的 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() 函数必须位于 标签之前。

语法:setcookie(name,value,expire,path,domain);

设置、取出及删除cookie

PHP

header("content-type:text/html;charset=GBK");

//设置cookie

setcookie("user","runoob",time()+3600);

?>

<Meta charset="GBK">

cookie

PHP

//根据名称取出cookie

echo $_COOKIE["user"];

echo("
");

//取出所有cookie

print_r($_COOKIE);

// 设置 cookie 过期时间为过去 1 小时

setcookie("user","",time()-3600);

echo $_COOKIE["user"]."------";

?>

7.session

session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

在使用 session 之前,首先必须启动会话。

session_start() 函数必须位于 标签之前

例: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;

}

?>

<Meta charset="GBK">

cookie

PHP

//取出session

echo $_SESSION["num"];

echo("
");

//释放指定session

unset($_SESSION['num']);

//释放所有session

session_destroy();

?>

8.PHP发送email

配置方式有多种,以xampp环境发送QQ邮箱为例,利用stmp mail()函数发送邮件

1.配置PHP.ini

  sendmail_path =D:xamppsendmailsendmail.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."
");

echo("错误信息:".$errstr."
");

echo("文件名称:".$error_file."
");

echo("行数:".$error_line."
");

echo(sizeof($error_context));

for ($i=1;$i<=sizeof($error_context);$i++){

echo($error_context[$i]."
");

}

}

// 设置错误处理函数

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 "不是整数"."
";

} else {

echo "是整数"."
";

}

// 选项和标志,属于额外过滤选项

$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 "不在范围内"."
";

} else {

echo "在范围内"."
";

}

?>

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) 前两个参数必填,后两个可选填,第三个不填则使用认过滤条件,只判断是否为字符串。

Email :

Url:

PHP

header("content-type:text/html;charset=GBK");

// 检查提交表单中是否含 "email"

if (!filter_has_var(INPUT_POST,"email")) {

echo "email不可为空
";

} else {

// 检查是否为有效邮箱地址

if (!filter_input(INPUT_POST,"email",FILTER_VALIDATE_EMAIL)) {

echo "email不是合法邮箱
";

} else {

echo "email是合法邮箱
";

}

}

//filter_has_var判断post请求参数是否存在

if (!filter_has_var(INPUT_POST,"url")) {

echo "url不可为空
";

} else {

if (!filter_input(INPUT_POST,"url",FILTER_VALIDATE_URL)) {

echo "url不是合法url
";

} else {

echo "url是合法url
";

}

}

?>

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 - 把 & 字符编码为 &amp;

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之间.
";

} else {

echo "age是有效的.
";

} if (!$result["email"]) {

echo "Email是无效的.
";

} else {

echo "Email是有效的.
";

} if (!$result["name"]) {

echo "User是无效的.
";

} else {

echo "User是有效的.
";

}

?>

Name:

Age:

Email:

自定义过滤器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));

?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐