UNIX时间戳(timestamp)是php中关于时间日期一个很重要的概念,他表示从1970年1月1日00:00:00到当前时间的秒数之和。
PHP提供了内置函数time()来获取服务器当前时间戳。
例子:
<?php echo time(); ?>
上面的例子运行后得到的是一串类似这样的数字:1279115455
我们可以通过data()等函数将它转换成我们需要的日期格式。
例子
<?php echo time(); echo date("Y-m-d h:i:s",time()); ?>
如果你出现时区错误码点击这里大概在5分左右。
date()函数用于格式化时间,返回一个字符串。
语法;
string date(strin format ,时间戳);//提醒PHP每句代码结束都要带;号
参数 format 表示时间格式化的方式,可能的方式如下:
格式化方式说明:格式化方式 | 说明 |
---|---|
Y | 4位数字年,y为2位数字,如99即1999年 |
m | 数字月份,前面有前导0,如01。n 为无前导0数字月份 |
F | 月份,完整的文本格式,例如 January 或者 March |
M | 三个字母缩写表示的月份,例如 Jan 或者 Mar |
d | 月份中的第几天,前面有前导0,如03。j 为无前导0的天数 |
w | 星期中的第几天,以数字表示,0表示星期天 |
z | 年份中的第几天,范围0-366 |
W | 年份中的第几周,如第32周 |
H | 24小时格式,有前导0,h为12小时格式 |
G | 24小时格式,无前导0,g为对应12小时格式 |
i | 分钟格式,有前导0 |
s | 秒格式,有前导0 |
A | 大写上下午,如AM,a为小写 |
可选参数 timestamp 表示时间戳,默认为 time() ,即当前时间戳
我们可以通过 date() 函数提供的丰富格式化来显示需要的时间日期,如下面的例子
date("Y-m-d",time()); //显示格式如 2008-12-01 date("Y.m.d",time()); //显示格式如 2008.12.01 date("M d Y",time()); //显示格式如 Dec 01 2008 date("Y-m-d H:i",time()); //显示格式如 2008-12-01 12:01
substr(string,start,len):从字符串中获取其中的一部分,从start开始到len位结束。
strstr(string,str):查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符
strrchr(string,str):查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
例子:
//获取 "我爱我.的.祖国.png" 的后缀名 $str = "我爱我.的.祖国.png"; $s = substr(strrchr($str,'.'),1); echo $s; $arr = explode(".",$str); $ext = array_pop($arr); echo "<br>$ext<br>";
str_replace(search,replace,string):使用一个字符串替换字符串中的另一些字符
例子:
$str= "我爱我.的.祖国.png"; $str1=str_replace("祖国","国家",$str); //将祖国换成国家
strlen(string):取得字符串的长度
strpos(string,str,start) 函数用于定位字符串第一次出现的位置,返回整型。
strrpos():定位字符串最后一次出现的位置
例子
$str="山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,惟吾德馨。苔痕上阶绿,草色入帘青。谈笑有鸿儒,往来无白丁。可以调素琴 ,阅金经。无丝竹之乱耳,无案牍之劳形。 南阳诸葛庐,西蜀子云亭。孔子云:何陋之有?"; $sub=mb_substr($str,0,30,"utf-8"); echo$sub; echo"<br>" //获取后缀名 "我爱我.的.祖国.png" $str= "我爱我.的.祖国.png"; $end=strrchr($str, ".");
PHP 的函数分为用户自定义函数和系统内置函数。内置函数可以直接使用,用户自定义函数需要使用关键字 function 来定义
函数(function),可以看着是为实现某个功能的独立的程序语句集合。我们将某个功能写成一个函数后,就可以在需要的地方方便的使用它。合理的使用函数,可以让我们的PHP程序更加简洁易读,更加科学。
语法
function function_name(arg1,arg2,……) { 函数功能代码 }
语法解读:
1 使用function关键字定义一个函数
2 function 后面紧跟函数名,函数名字以字母或者下划线开始,命名应该提示其功能
3 函数名字后面是一对小括弧,里面是函数的参数,参数之间以“,”号分隔,但参数不是必须的
4 括弧()后面跟着“{}”,内部是该函数要实现的功能语句
例子
<?php /* 定义函数开始 */ function print_string() { echo "你好!"; } /* 定义函数结束 */ print_string(); //执行该函数,执行结果是输出“你好!”字符串 ?> //任何有效的 PHP 代码都有可能出现在函数内部, //甚至包括其它函数和类定义,函数名是非大小写敏感的 //,不过在调用函数的时候,通常使用其在定义时相同的形式。
参数的功能是传递信息到函数。
使用参数的例子
<?php function city_name($city) { echo "城市名称为:".$city; } city_name("shanghai"); //执行该函数,执行结果是输出“城市名称为:shanghai”字符串 ?>
可以给函数的参数指定默认值,以便在没有指定参数值时,采用参数默认值。
<?php function city_name($city = "beijing") { echo "城市名称为:".$city; } $name = "shanghai"; city_name(); //执行结果是输出“城市名称为:beijing” city_name($name); //执行结果是输出“城市名称为:shanghai” ?>
从例子可以看出,传入参数的变量名(
n
a
m
e
)
和
定
义
函
数
的
参
数
变
量
名
(
name)和定义函数的参数变量名(
name)和定义函数的参数变量名(city)无关。
接受多个参数:
<?php function city_name($city, $zipcode) { echo "城市名称为:".$city."<br />"; echo "邮政编码:".$zipcode; } ?>
函数在处理完内部逻辑后,我们常常需要根据处理结果来决定下一步的操作逻辑,这时候就需要得到函数的处理结果。使用return()来返回函数处理结果。
函数返回值的例子:
<?php function add($x) { return $x+1; } echo add(2); //输出函数的返回值,结果是输出 3 ?>
函数返回值并不是指返回一个数值,可以返回包括字符串、数组、对象在内的任何类型。
比较下面两个例子的区别:
<?php $x = 10; function multiply($x){ $x = $x * 10; return $x; } multiply($x); echo $x; //输出 10 ?> <?php $x = 10; function multiply($x){ $x = $x * 10; return $x; } $x = multiply($x); echo $x; //输出 100 ?>
另外PHP 内置了大量的函数,这使得 PHP 变得非常强大。这些函数几乎包括了我们需要处理的方方面面。
PHP 内置函数常用的有“字符串函数”、“数组函数”、“数据库函数”、“时间/日期函数”、“文件函数”、“图像函数”、“正则函数”、“URL函数”等。
$_GET 变量用于接收表单 method=“get” 方式发送的表单信息
$_GET 变量的数据结构同 $_POST 类似,也是一个关联数组,键名为表单元素的 name,用于收集以 HTTP GET 方式请求的数据。
表单 form.html:
<html> <body> <form name="commentform" method="get" action="comment.php"> <p> 称呼: <input type="text" name="nickname" /> </p> <input type="submit" value="提 交" /> </form> </body>
将前面的例子表单改为 GET 方式,输入称呼后,在浏览器地址栏,看起来类似如下(IE 浏览器下中文可能会经 encode 编码):
http://www.5idev.com/html/comment.php?nickname=%D0%A1%C3%F7 (只是例子不具备打开共能)
取得 GET 表单数据:
<?php echo '您的称呼是:',$_GET["nickname"]; //输出:您的称呼是:小明 ?>
GET 方式会把表单数据暴露在浏览器地址栏里,因此不宜发送敏感数据(如密码等),敏感信息发送请使用 POST 方式。
GET 方式对发送的信息量有一定限制,如果发送较大的信息,请使用POST 方式。
GET 方式访问的页面可以加入收藏夹而在以后可以直接访问,而 POST 方式访问的页面则不能
HTTP GET
HTTP GET 方式不仅是用于表单数据发送,它是指更广泛的以实体的方式得到由请求 URL (浏览器地址)所指定资源的信息。具体参见《XHTML Get与Post》。
article.php 中取得 GET 数据:
<?php echo $_GET["type"]; //输出 2 echo $_GET["id "]; //输出 10 ?>
在 PHP 中还预定义了 $_REQUEST 变量,它包含了 P O S T 、 _POST 、 POST、_GET 、和 $_COOKIE 。其访问方式同 $_POST 等:
<?php echo $_REQUEST["nickname"] //输出用户输入的称呼 echo $_REQUEST["id "]; //输出 10 ?>
函数 | 描述 |
---|---|
json_encode | 对变量进行 JSON 编码 |
json_decode | 对 JSON 格式的字符串进行解码,转换为 PHP 变量 |
PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。
string json_encode ( $value )
实例
以下实例演示了如何将 PHP 数组转换为 JSON 格式数据:
<?php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ?>
以上代码执行结果为:
{“a”:1,“b”:2,“c”:3,“d”:4,“e”:5}
PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
语法
mixed json_decode ( j s o n s t r i n g [ , json_string [, jsonstring[,assoc = false [, $depth = 512 [, $options = 0 ]]])
参数
json_string : 待解码的 JSON 字符串,必须是 UTF-8 编码数据
assoc : 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。
depth : 整数类型的参数,它指定递归深度
options : 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。
实例
以下实例演示了如何解码 JSON 数据:
<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?>
以上代码执行结果为:
object(stdClass)#1 (5) {
[“a”] => int(1)
[“b”] => int(2)
[“c”] => int(3)
[“d”] => int(4)
[“e”] => int(5)
}
array(5) {
[“a”] => int(1)
[“b”] => int(2)
[“c”] => int(3)
[“d”] => int(4)
[“e”] => int(5)
}
$_POST 变量用于接收表单 method=“post” 方式发送的表单信息。
$_POST 变量用于获取由 HTTP POST 方式发送的表单数据。其数据结构是一个关联数组,键名为表单元素的 name ,值为对应的表单取值。
表单 form.html:
<html> <body> <form name="commentform" method="post" action="comment.php"> <p> 称呼: <input type="text" name="nickname" /> </p> <input type="submit" value="提 交" /> </form> </body> </html>
在 comment.php 中,打印出 $_POST 信息:
<?php print_r($_POST); ?>
输出如下:
Array
(
=> 小明
)
可以像访问普通数组一样方便的访问 $_POST 变量:
<?php echo '您的称呼是:',$_POST["nickname"]; ?>
案例
模拟登录
$list = array(“mumu”=>123,“zql”=>“zmm123”,“曾庆林”=>“456”)
如果用户没有输入 用户名 密码 则退出程序
如果 用户名密码不在list中则提示用户名密码错误
如果 用户名密码都正确 则 提升 欢迎xx,登录成功
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <?php $list = array("mumu"=>123,"zql"=>123,"曾庆林"=>"456"); if(isset($_POST["user"])&&isset($_POST["pwd"])){ $user = $_POST["user"]; $pwd = $_POST["pwd"]; if(array_key_exists($user,$list)){ if($list[$user]==$pwd){ echo "<script>alert('登录成功!');</script>"; }else{ echo "<script>alert('用户名或密码错误')</script>"; } }else{ echo "<script>alert('用户名未注册')</script>"; } } ?> <h1>登录</h1> <form action="" method="POST"> 用户名: <input type="text" name="user"><br> 密 码: <input type="password" name="pwd"/><br>     <input type="submit" value="登录"> </form> </body> </html>
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导
session 是一种客户与网站(服务器)更为安全的对话方式。一旦开启了 session 会话,便可以在网站的任何页面使用(保持)这个会话,从而让访问者与网站之间建立了一种“对话”机制。
要创建 session ,必须先使用 session_start() 函数开启一个 session 会话,系统会分配一个会话 ID:
<?php session_start(); ?>
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:
语法
$_SESSION[‘views’]=1;
PHP 内置的 $_SESSION 变量可以很方便的访问设置的 session 变量。
例子:
<?php // 检索 session 数据 echo "浏览量:". $_SESSION['views']; ?>
如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量
例子:
<?php session_start(); if(isset($_SESSION['views'])) { unset($_SESSION['views']); } ?>
另一种方式
您也可以通过调用 session_destroy() 函数彻底销毁 session: <?php session_destroy(); ?>
案例
当前用户浏览页面的次数
<?php session_start();//开启session //告诉浏览器返回的是html编码是utf-8 header("Content-Type:text/html;charset=utf-8"); if(isset($_SESSION['views'])){ //如果存在views 它的值+1 $_SESSION['views']=$_SESSION['views']+1; }else{ //如果不存在view设置值为1 $_SESSION['views']=1; } //输出views的值 echo"累计浏览量:",$_SESSION['views']; ?>
文件上传概述
文件上传功能是网络生活中经常使用的一个功能。使用 PHP 可以很方便的实现文件上传,其具体流程如下:
表单选择文件 -> 检查文件大小及类型 -> 生成临时文件 -> 移动临时文件至文件存储目录 -> 记录文件信息以便于管理。
在文件上传功能中,需要考虑以下几个问题:
限定上传文件的大小
限定上传文件的类型
只允许可信任的用户上传文件,防止远程提交
服务器端文件存储目录
对文件上传后的管理
在文件上传表单中,需要将表单的 ENCTYPE 属性设置为 multipart/form-data :
<form enctype="multipart/form-data" action="upload.php" method="post"> <label for="file">请选择上传的文件</label>// <input type="file" name="file" size="40" /> <br /> <input type="submit" name="submit" value="确定" /> </form>
PHP 提供了内置变量 $_FILES 来处理上传的文件。
$_FILES 变量说明(设定表单 name 属性为 file ): $_FILES 变量 | 说明 |
---|---|
$_FILES[“file”][“name”] | 客户端提交文件的原名称 |
$_FILES[“file”][“type”] | 浏览器提供的文件的 MIME 类型,如 gif 图片为 image/gif 。不过此类型在 PHP端并不检查,因此不要想当然认为有这个值 |
$_FILES[“file”][“size”] | 已上传文件的大小,单位为字节 |
$_FILES[“file”][“tmp_name”] | 文件被上传后在服务端储存的临时文件名 |
$_FILES[“file”][“error”] | 和该文件上传相关的错误代码,为0则表示上传成功 |
当点击“确定”按钮提交表单至 upload.php 后,可以利用 $_FILES 变量来处理提交的文件
例子
HTML:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="./jquery-3.6.0.js"></script> </head> <body> <input type="file" name="file" id="file"> <button class="btn">提交</button> <div class="tip"></div> <script> // 目标jq实现上传文件 $(function(){ $(".btn").click(function(){ // 创建一个文件数据格式 var formData = new FormData(); // $("#file").get(0) jq转js对象 // .files[0] 文件上传通常取第0个 formData.append("file",$("#file").get(0).files[0]); $.ajax({ url:"./up.php", method:"POST", data:formData, // 不处理data数据 processData: false, // 内容类型为false contentType: false, }) .then(res=>{ console.log(res); if(res.status==0){ $(".tip").append(`<img src="${res.filename}" width="200"/><br/>`) } }) }) }) </script> </body> </html>
php:
<?php header("Content-Type:application/json;charset=utf-8"); // var_dump($_FILES["file"]); // 移动临时文件到当前文件夹 // move_uploaded_file('临时地址','目标地址') $re = array("msg"=>"上传失败","status"=>1); $arr = explode(".", $_FILES["file"]["name"]); // 文件的后缀名 $ext = array_pop($arr); // 允许的后缀 $list = ["png","jpg","jpeg","gif","webp","svg"]; // 如果错误状态码为0,上传成功 if($_FILES["file"]["error"]==0){ // 类型必须是图片类型 if(in_array($ext,$list)){ // 大小不能超过500k if($_FILES["file"]["size"]<1024*500){ // 添加文件夹 $path = "uploads/"; // 文件名拼接 $filename =$path . time() . ".".$ext; // 移动文件到当前目录 move_uploaded_file($_FILES["file"]["tmp_name"],$filename); // 获取文件名 // 设置返回数据 $re["msg"] = "上传成功"; $re["status"] = 0; $re["filename"] = $filename; }else{ $re["msg"] = "文件不能超过500k"; $re["status"] = 1; } }else{ $re["msg"] = "类型错误"; $re["status"] = 1; } } echo json_encode($re); ?>