🌝博客主页:菜鸟小羊
💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具
php简介
php是什么?
- php(全称:Hypertext Preprocessor,即超文本预处理器)是一种通用开源脚本语言
- php脚本在服务器上执行
- php可免费下载使用
php文件是什么?
- php文件可包含文本、HTML、JavaScript和php代码
- php代码在服务器上执行,结果以纯HTML形式返回给浏览器
- php文件的默认文件扩展名是.php
php能做什么?
- php可以生成动态页面内容
- php可以创建、打开、读取、写入、关闭服务器上的文件
- php可以收集表单数据
- php可以发送和接收cookies
- php可以添加、删除、修改您的数据库中的数据
- php可以限制用户访问您的网站上的一些页面
- php可以加密数据
通过 php,您不再限于输出 HTML。您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本比如 XHTML 和 XML
为什么使用php?
- 跨平台(windows、linux、Unix等)
- 兼容性好(支持Apache、IIS等)
- 支持数据库
- 免费的且易于学习
基本的php语法
php脚本在服务器上执行,然后将纯HTML结果发送回浏览器
php文件的特点
- 文件扩展名是 .php
- php代码以 <?php** 开始,以 **?> 结束,可以放在文档中的任何位置
- 每句代码以 ; 结束
- php文件通常包含html标签和一些php脚本代码
php基本输出
在php中有两个基本的输出方式:echo和print,二者之间的区别
-
echo:可以输出一个或多个字符串
-
print:只允许输出一个字符串,返回值总为1
<?php echo "php很有趣
"; echo "hello world!
"; echo "这是","多个","字符串";print "
php很有趣
";
print "hello world!";
?>
var_dump():会把类型也输出
php中的注释
// 这是php单行注释
/* 这是php多行注释 */
php变量
与代数类似
x=5;y=6;z=x+y
从表达式z=x+y,我们可以计算出z的值为11
在 PHP 中,这些字母被称为变量,变量是用于存储信息的 "容器",PHP 中没有声明变量的命令,变量在您第一次赋值给它的时候被创建
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
php变量
php变量规则
- 变量以$符开始,后面跟着变量的名称
- 变量名只能包含字母、数字以及下划线,必须以字母或下划线开始
- 变量名不能包含空格
- 变量名是区分大小写的
弱类型语言
在上面的实例中,我们注意到,不必向php声明该变量的数据类型,php会根据变量的值,自动把变量转换为正确的数据类型
在强类型语言中,我们必须在使用变量前先声明(定义)变量的类型和名称
php变量作用域
php中有4种不同的变量作用域:
- local:在函数内部访问
- global:被脚本中的任何部分访问
- static
- parameter
要在一个函数中访问一个全局变量,需要使用global关键字
<?php
$x=5; //{}外,全局变量
function mytest(){
$y=10; //local局部变量
echo "$y"
}
mytest();
echo "$x";
?>
php超级全局变量
超级全局变量在PHP 4.1.0之后被启用,是PHP系统中自带的变量,在一个脚本的全部作用域中都可用
PHP超级全局变量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
$GLOBALS
是一个包含了全部变量的全局组合数组
$_SERVER
包含了诸如头信息、路径、以及脚本位置等信息的数组。这个数组中的项目由web服务器创建
<?php
echo '当前执行脚本的文件名:'.$_SERVER['PHP_SELF'];
echo "<br>";
echo '当前运行脚本所在的服务器的主机名:'.$_SERVER['SERVER_NAME'];
?>
$_POST
收集http协议中post方法传输的数据:
<?php
$name = $_POST['fname'];
echo $name;
?>
burp抓包修改为post请求,给fname传入值
$_GET
<?php
$name = $_GET['fname'];
echo $name;
?>
$_REQUEST
POST和GET之和
php常量
值不会发生变化,用define()或const关键字来定义。一个常量由英文字母、下划线、数字组成,但数字不能作为首字母出现,常量名不需要加$修饰符
常量的特性
- 不变性:一旦定义,其值不能改变
- 全局作用域 :常量在定义后,可以在整个脚本的任何地方使用,无需使用
global
关键字 - 数据类型:常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7及以上版本)
- 区分大小写 :如果需要定义大小写不敏感的常量,可以在
define()
函数的第三个参数设置为true
php
<?php
//区分大小写
define("STR","hello world");
echo STR;
echo '<br>';
echo str; //str当作字符串进行输出
echo '<br>';
//不区分大小写
define("STR1","hello world",true);
echo str1;
?>
预定义常量
php提供了一些预定义常量,这些常量通常用于获取PHP的配置信息、版本信息等。常见的预定义常量有:
-
PHP_VERSION
:当前PHP解析器的版本 -
PHP_OS
:服务器的操作系统 -
PHP_INT_MAX
:最大的整数值 -
E_ERROR
、E_WARNING
、E_PARSE
等:错误报告级别echo PHP_VERSION:
echo PHP_OS;
echo PHP_INT_MAX;
魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变
__LINE__
文件中的当前行号
php
<?php
echo '该代码的行号:"'.__LINE__.' " ';
__FILE__
文件的完整路径和文件名,如果用在被包含文件中,则返回被包含的文件名
<?php
echo '该文件位于:"'.__FILE__.' " ';
__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录
<?php
echo '该文件目录位于:"'.__DIR__.' " ';
如果出现下图这种乱码情况,是因为浏览器识别的编码和文件保存的编码不一致造成的
我们可以在vscode中修改编码
php数据类型
php变量存储不同类型的数据,不同的数据类型可以做不一样的事情
php支持以下几种数据类型:
- string(字符串)
- interger(整型)
- float(浮点型)
- Boolean(布尔型)
- array(数组)
- object(对象)
- null(空值)
- resource(资源类型)
php字符串
是一串字符的序列,就像"hello world!",你可以将任何文本放在单引号和双引号中:
<?php
echo 'hello';
echo "hello";
?>
可以使用并置运算符(.),用于把两个字符串值拼接起来
<?php
$txt1="hello";
$txt2="world";
echo $txt1." ".$txt2;
?>
strlen()可以返回字符串的长度
<?php
echo strlen("hello world");
在字符串中查找一个字符或一段指定的文本,可以用strpos()
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置,如果没找到,则返回FALSE,下面的代码将输出;6
<?php
echo strpos("hello world!","world");
之所以返回6而不是7的原因是:字符串中第一个字符的位置是0,而不是1
php整型
是一个没有小数的数字,整数规则:
-
整数必须至少有一个数字(0~9)
-
整数不能包含逗号或空格
-
整数是没有小数点的
-
整数可以是正数或负数
-
整数可以用三种格式来指定:十进制、十六进制(0X开头)或八进制(0开头)
<?php $x=100; var_dump($x);
php浮点型
浮点型是带小数部分的数字,或是指数形式
$x = 10.3435;
$x = 2.4e3;
php布尔型
布尔值为true或false,布尔型通常用于条件判断
$x = true;
$y = false;
php数组
数组是一个能在单个变量中存储多个值的特殊变量
<?php
$arr=array("a","b","c");
var_dump($shuzu);
创建数组
array()用于创建数组,在php中,有三种类型的数组:
- 数值数组 - 带有数字ID键的数组
下面的实例创建一个名为$arr的数值数组,并给数组分配三个元素,然后打印一段包含数组值的文本
<?php
$arr=array("a","b","c");
//$arr[0]="a";
//$arr[1]="b";
//$arr[2]="c";
echo 'i like '.$arr[0].$arr[1].$arr[2];
- 关联数组 - 带有指定的键的数组,每个键关联一个值
关联数组是使用您分配给数组的指定的键的数组
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//age['Peter']="35";
//age['Ben']="37";
//age['Joe']="43";
echo "Peter is ".$age['Peter']." years old.";
- 多维数组 - 包含一个或多个数组的数组
多维数组是包含一个或多个数组的数组。在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组
php null值
null值表示变量没有值
可以通过设置变量值为null来清空变量数据:
<?php
$x="hello world!";
$x=null;
var_dump($x);
php类型比较
虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较
- 松散比较:使用2个等号
==
比较,只比较值,不比较类型 - 严格比较:使用3个等号
===
比较,除了比较值,也比较类型
例如,"42" 是一个字符串而 42 是一个整数,false 是一个布尔值而 "false" 是一个字符串
php
<?php
if(42 == "42"){
echo '值相等';
}
echo PHP_EOL; //换行符
if(42 === "42"){
echo '类型相等';
}else{
echo '类型不相等';
}
php中比较0、false、null
1️⃣比较0和false
<?php
echo 0 == false ? 'true' : 'false';
?>
<?php
echo 0 === false ? 'true' : 'false';
?>
2️⃣比较0和null
<?php
echo 0 == null ? 'true' : 'false';
?>
<?php
echo 0 === null ? 'true' : 'false';
?>
3️⃣比较false和null
<?php
echo false == null ? 'true' : 'false';
?>
<?php
echo false === null ? 'true' : 'false';
?>
php运算符
php算数运算符
+、-、*、/、%、-(取反)、.(并置)
php赋值运算符
=、+=、-=、*=、/=、%=
php递增/递减运算符
++x:先加1再返回x
x++:先返回x再加1
--x:先减1再返回x
x--:先返回x再减1
php比较运算符
运算符 | 名称 | 描述 |
---|---|---|
== | 等于 | 如果x等于y,则返回true |
=== | 绝对等于 | 如果x等于y,且它们类型相同,则返回true |
!= | 不等于 | 如果x不等于y,则返回true |
<> | 不等于 | |
!== | 不绝对等于 | 如果x不等于y,或它们类型不相同,则返回true |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
php逻辑运算符
运算符 | 名称 | 描述 |
---|---|---|
and | 与 | 两边都为true,结果才为true |
or | 或 | 只要有一个为true,结果就为true |
xor | 异或 | 有且仅有一个为true,结果为true |
&& | 与 | 两边都为true,结果才为true |
|| | 或 | 只要有一个为true,结果就为true |
! | 非 | 取反,真变假,假变真 |
php数组运算符
运算符 | 名称 | 描述 |
---|---|---|
+ | 集合 | x和y的集合 |
== | 相等 | 如果x和y具有相同的键/值对,则返回true |
=== | 恒等 | 如果x和y具有相同的键/值对,且顺序相同类型相同,则返回true |
!= | 不相等 | 如果x不等于y,则返回true |
<> | 不相等 | 如果x不等于y,则返回true |
!== | 不恒等 | 如果x不等于y,则返回true |
三元运算符
(expr1)?(expr2):(expr3)
如果表达式expr1为真,则返回expr2,否则返回expr3
<?php
//普通写法
$username=isset($_GET['user']) ? $_GET['user'] : 'nobody'; //isset:判断接收参数是否为空,不是返回true
echo $username,PHP_EOL;
//PHP 5.3+ 版本写法
$username=$_GET['user'] ?: 'nobody';
echo $username,PHP_EOL;
?>
自PHP 5.3起,可以省略三元运算符中间那部分。表达式 expr1?:expr3
在expr1求值为true时返回expr1,否则返回expr3
运算符优先级
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序
**说明:**左=从左到右,右=从右到左
结合方向 | 运算符 | 附加信息 |
---|---|---|
clone new | clone和new | |
左 | [ | array() |
右 | ++ -- ~ (int)(float)(string)(array)(object)(bool) @ | 类型和递增、递减 |
instancecof | 类型 | |
右 | ! | 逻辑运算符 |
左 | + - . | 算术运算符和字符串运算符 |
左 | << >> | 位运算符 |
左 | == != === !== <> |
比较运算符 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ?: | 三元运算符 |
php条件语句
if语句
用于仅当指定条件成立时执行代码
if(条件){
条件成立时要执行的代码;
}
if...else语句
在条件成立时执行一块代码,条件不成立时执行另一块代码
if(条件){
条件成立时要执行的代码;
}
else
{
条件不成立时执行的代码;
}
if...elseif...else语句
在若干
if(条件){
if条件成立时执行的代码;
}
elseif(条件)
{
elseif条件成立时执行的代码;
}
else(条件)
{
else条件不成立时执行的代码;
}
switch语句
分支语句,用于根据多个不同条件执行不同动作
<?php
switch(expression){
case value1;
break;
case value2:
break;
default:
//如果没有匹配的值,执行这部分
}
?>
参数说明:
-
expression
:是表达式 -
case value
:是可能的值,如果expression
的值等于某个case
的值,就执行相应的代码块 -
break
:用于终止switch
语句,防止继续执行下一个case
-
<?php $favcolor="red"; switch($favcolor){ case "red": echo "你喜欢红色"; break; case "blue": echo "你喜欢蓝色"; break; default: echo "你不喜欢红色或蓝色"; } ?>default
:是可选的,用于指定当没有匹配的case
时执行的代码块
php循环语句
在编写代码时,如果需要相同的代码块一次又一次的重复执行,我们可以使用循环语句来完成
while循环
将重复执行代码块,直到条件不成立
语法
while(条件){
要执行的代码;
}
实例
<?php
$i=1;
while($i<=5){
echo "the number is: ".$i.PHP_EOL;
$i++;
}
?>
do...while循环
至少执行一次代码,然后检查条件,只要条件满足继续执行
语法
do
{
要执行的代码;
}
while(条件)
实例
先输出i的值,此时i=6,然后i+1变成7,判断7<3不成立,跳出循环
<?php
$i=6;
do{echo $i++;}
while($i<3)
?>
for循环
用于您预先知道脚本需要运行的次数的情况
语法
for(初始值;条件;增量)
{
要执行的代码;
}
实例
<?php
for($i=1;$i<5;$i++)
{
echo "the number is: ".$i.PHP_EOL;
}
foreach循环
专门用来循环遍历数组
语法
遍历数值数组,每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组的下一个值
foreach($array as $value){
要执行代码;
}
遍历关联数组,每一次循环,当前数组元素的键与值就会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值
foreach($array as $key => $value){
要执行代码;
}
实例
下面演示了一个输出给定数组的值的循环:
<?php
$x=array("1","2","3");
foreach($x as $value)
{
echo $value.PHP_EOL;
}
?>
下面演示了一个输出给定数组键与值的循环:
<?php
$x=array(1=>"hello",2=>"world");
foreach($x as $key => $value)
{
echo "key为".$key."对应的value为".$value.PHP_EOL;
}
?>
php函数
PHP的真正威力源自于它的函数。在PHP中,提供了超过1000个内建的函数(自带的)
创建函数
函数名称以字母或下划线开头(不能以数字开头)
<?php
function functionname()
{
//要执行的代码
}
?>
实例
一个简单的函数,在其被调用时能输出我的名字
<?php
function name()
{
echo "张三";
}
echo "我的名字是";
name(); //函数调用
?>
添加参数
为了给函数添加更多的功能,我们可以添加参数,参数类似变量,参数就在函数名称后面的一个括号内指定
<?php
function test($fname,$name)
{
echo $fname . "和" .$name ."是好朋友!";
}
test("张三","李四");
?>
返回值
如需让函数返回一个值,请使用return语句
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1+1=".add(1,1);
?>
变量函数
变量函数是指在php中,将一个变量作为函数名来调用的函数,变量函数可以让我们在运行时动态地决定调用哪个函数
<?php
function foo(){
echo "In foo()",PHP_EOL;
}
function bar($arg=''){
echo "In bar();argument was '$arg'";
}
//第一种调用方法
foo();
//第二种调用方法
$func='foo';
$func();
//第三种调用方法
$func='bar';
$func('test');
?>
也可以利用这种方式逃过关键字的校验
<?php
function evalit($string){
eval($string);
}
$func = 'evalit';
$func('phpinfo();');
?>
php包含文件
在PHP中,您可以在服务器执行PHP文件之前在该文件中插入一个文件的内容
include和require语句用于在执行流中插入写在其它文件中的有用代码
include和require除了处理错误的方式不同之外,在其他方面都是相同的:
- require生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行
- include生成一个警告(E_WARNING),在错误发生后脚本会继续执行
包含文件省去了大量的工作。这意味着可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,只需要更新这个也投包含文件即可
语法
filename可以是任意文件后缀,文件内容都会被当作php代码执行,如果不是php代码就直接输出
include 'filename';
require 'filename';
实例
假设我们有一个定义变量的包含文件vars.conf
<?php
$color='red';
$cat='BMW';
?>
这些变量可用在调用文件中
<?php
include 'vars.conf';
echo 'i hava a'.$color.' '.$cat;
?>
php文件上传
通过PHP,可以把文件上传到服务器
创建一个文件上传表单
将下列代码保存到form.html
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body>
<form action="upload_file.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>
<form>
标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data",浏览器保持原始处理,不会对其编码<input>
标签的 type="file" 属性规定了应该把输入作为文件来处理
创建上传脚本
upload_file.php文件内容如下:
<?php
//第一种写法
var_dump($_FILES);
//第二种写法
if($_FILES["file"]["error"]>0) //为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"];
}
?>
随便上传一个文件进行提交
浏览器会返回upload_file.php文件内容
上传限制
在这个脚本中,我们增加了对文件上传的限制。用户只能上传.gif、.jpeg、.jpg、.png文件,文件大小必须<200kb
<?php
//允许上传的图片后缀
$allowedExts = array("gif","jpeg","jpg","png");
$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($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"];
}
}
else
{
echo "非法的文件格式";
}
?>
保存被上传的文件
upload_file.php文件内容如下:
<?php
//允许上传的图片后缀
$allowedExts = array("gif","jpeg","jpg","png");
$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($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 目录是否存在该文件
// 如果没有 upload 目录,你需要创建它,upload 目录权限为777
if(file_exists("upload/" .$_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"]."文件已经存在";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
echo "文件存储在: " . "upload/" .$_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
?>
我们要新建一个upload文件夹用来保存上传文件(和其它2个文件同级)
设置upload目录权限为777
提交gif2.gif文件
查看上传的文件
php操作MySQL
通过PHP,可以连接和操作数据库,PHP 5及以上版本建议使用以下方式连接MySQL:
- MySQLi extension
- PDO
MySQLi 和 PDO 有它们自己的优势:PDO 应用在12种不同数据库中,MySQLi 只针对MySQL数据库
连接MySQL
在我们访问MySQL数据库前,我们需要先连接到数据库服务器:
<?php
$servername = "localhost";
$username = "root"; //mysql默认的用户名和密码
$password = "123456";
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
// 关闭连接
$conn->close();
?>
读取数据
SELECT 语句⽤于从数据表中读取数据,也可以用其它语句操作
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "mysql";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$user = $_GET['user'];
$sql = "SELECT * FROM user where user = '" . $user . "'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
//echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " ". $row["lastname"]. "<br>";
var_dump($row);
}
} else {
echo "0 结果";
}
$conn->close();
?>
通过这个代码把所有用户信息查询出来了
?user=root' or 1 -- a'
--:表示注释,主要目的是注释掉源代码后面的 ',需要注意的是--与后面的字符之间必须有空格
php cookie
cookie是什么
常用于识别用户。是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送cookie。通过php,能够创建并取回cookie的值
如何创建cookie
setcookie()用于创建cookie
**注释:**setcookie()必须位于<html>
标签之前
语法
setccokie(name,value,expire,path,domain);
实例
在下面的例子中,我们将创建名为 "user" 的cookie,并为它赋值 "runoob",我们也规定了此cookie在一小时后过期:
<?php
setcookie("user","runoob",time()+3600);
?>
随便访问一个页面,去抓包观察cookie值
如何取回cookie的值
php中的$_cookie变量用于取回cookie值
在下面的实例中,我们取回了名为"user"的cookie值,并把它显示在页面上:
<?php
// 输出 cookie 值
echo $_COOKIE["user"];
// 查看所有 cookie
print_r($_COOKIE);
?>
要用burp内置浏览器才能读取到
在下面的实例中,我们使用isset()来确认是否已设置了cookie:
<?php
if (isset($_COOKIE["user"]))
echo "欢迎 " . $_COOKIE["user"] . "!<br>";
else
echo "普通访客!<br>";
?>
如何删除cookie
当删除 cookie 时,应当使过期⽇期变更为过去的时间点
<?php
// 设置 cookie 过期时间为过去 1 ⼩时
setcookie("user", "", time()-3600);
?>
php session
您在计算机上操作某个应⽤程序时,您打开它,做些更改,然后关闭它。这很像⼀次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应⽤程序。然⽽,在因特⽹上问题出现了:由于 HTTP 地址⽆法保持状态,Web 服务器并不知道您是谁以及您做了什么
PHP session 解决了这个问题,它通过在服务器上存储⽤户信息以便随后使⽤(⽐如⽤户名称、购买商品等)。然⽽,会话信息是临时的,在⽤户离开⽹站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中
Session 的⼯作机制是:为每个访客创建⼀个唯⼀的 id (UID),并基于这个 UID 来存储变量。UID 存储在cookie 中,或者通过 URL 进⾏传导。
开始 PHP Session
在把⽤户信息存储到 PHP session 中之前,⾸先必须启动会话
下⾯的代码会向服务器注册⽤户的会话,以便可以开始保存⽤户信息,同时会为⽤户会话分配⼀个 UID
<?php session_start(); ?>
存储 Session 变量
在下⾯的实例中,我们创建了⼀个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则创建 "views" 变量,并把它设置为 1:
<?php
session_start();
if(isset($_SESSION['views']))
{
$_SESSION['views']=$_SESSION['views']+1;
}
else
{
$_SESSION['views']=1;
}
echo "浏览量:". $_SESSION['views'];
?>
每次刷新访问浏览量都会+1
会自动读取相关的文件来判断浏览量,文件名一般以sess开头,后面跟请求包中phpsessid参数的值
销毁 Session
可以使⽤ unset() 或 session_destroy() 函数,unset() 函数⽤于释放指定的 session 变量:
<?php
session_start();
if(isset($_SESSION['views']))
{
unset($_SESSION['views']);
}
?>
也可以通过调⽤ session_destroy() 函数彻底销毁 session:
<?php
session_destroy();
?>
PHP 面向对象
⾯向对象编程(Object-OrientedProgramming,简称OOP)是⼀种编程范式,它通过使⽤"对象"和"类"的概念来组织代码。PHP⽀持⾯向对象编程,这使得开发⼈员可以编写更模块化、可重⽤和可维护的代码。 ⾯向对象编程有以下⼏个基本概念:
- 类(Class):类是对象的模板或蓝图,它定义了对象的属性和⽅法。类可以看作是⼀种⽤户⾃定义的数据类型
- 对象(Object):对象是类的实例,它是具体存在的数据结构,包含了类中定义的属性和⽅法
- 封装(Encapsulation):封装是将数据和操作封装在对象中的过程,通过将数据隐藏在对象内部,只暴露有限的接⼝给外部,实现了数据的保护和安全性
- 继承(Inheritance):继承是指⼀个类(⼦类)可以继承另⼀个类(⽗类)的属性和⽅法。⼦类可以通过继承和扩展来重⽤⽗类的代码,并且可以添加新的功能
- 多态(Polymorphism):多态允许不同类的对象对同⼀消息做出响应,提供了⼀种统⼀的接⼝以处理不同类的对象
件