1.多维数据循环和遍历
// 二维数组:
$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")); } ?> //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()
");2.PHP时间函数date()
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.文件处理
fgets()函数,获取文件内容。第一个参数为文件流,第二个为长度
//fopen操作的文件路径,第一个参数 为文件路径和名称,第二个为操作类型
$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.文件上传
upload1.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(name,value,expire,path,domain);
设置、取出及删除cookie
header("content-type:text/html;charset=GBK");
//设置cookie
setcookie("user","runoob",time()+3600);
?>
<Meta charset="GBK">
//根据名称取出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的创建及销毁
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">
//取出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邮件收发
header("content-type:text/html;charset=GBK");
$to = "接收者@qq.com"; // 邮件接收者
$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 的一部分)
header("content-type:text/html;charset=GBK");
function customError($errno,$errstr,$error_file,$error_line,$error_context)
{
echo("错误级别:".$errno."
");
echo("错误信息:".$errstr."
");
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" 代码块会捕获异常,并创建一个包含异常信息的对象。
header("content-type:text/html;charset=GBK");
function checkNum($number)
{
if($number!=1)
{
throw new Exception("数值不等于1");
}
return true;
}
// 在 try 块 触发异常
try
{
checkNum(3);
// 如果抛出异常,以下文本不会输出
}
// 捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
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()实例:
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) 前两个参数必填,后两个可选填,第三个不填则使用默认过滤条件,只判断是否为字符串。
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 - 把 & 字符编码为 &
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是有效的.
";
}
?>
自定义过滤器callback:
使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
您可以创建自己的自定义函数,也可以使用已存在的 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
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 。
$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 举报,一经查实,本站将立刻删除。