web后端语言:PHP
web后端语言:PHP
一、开发环境准备
学习工具:trae + phpstudy
PHPStudy 是⼀个集成的 PHP 开发环境⼯具包,主要⽤于 Windows 平台,它简化了 PHP 开发环境的搭
建过程,特别适合初学者和快速开发需求。
主要特点
简单易⽤:图形化界⾯操作,降低开发环境配置难度
轻量快速:相⽐同类产品占⽤资源更少
多版本切换:可⾃由切换不同 PHP 版本
安全防护:内置防⽕墙和安全检测功能
扩展丰富:⽀持常⻅ PHP 扩展⼀键安装
1、安装学习工具
trae中安装php debug和PHPInteliSense后,
2、配置修改php执行路径:
在php debug和PHPInteliSense的扩展设置的json设置php执行路径
3、具体路径可以在phpstudy打开文件设置里选择一个版本的php
二:客户端与服务器交互
前端:HTML、CSS、JS 渲染网页的内容,在用户浏览器端,渲染和决定了网站网页的内容
后端:php 网站和核心业务逻辑都是由后端完成,运行在服务器端,定义了网站各项业务功能
PHP作为网站后端语言,主要处理的是处理网站中的业务逻辑部分
1、验证用户身份权限信息,处理登录,权限逻辑
2、接收用户上传的文件,表单信息,处理文件保存等逻辑
3、连接数据库,实现增删改查将数据结果返回给前端
4、处理用户前端请求,并将处理结果返回给前端
PHP核心特点:
服务器端运行,php代码只在服务器端运行
脚本语言,无需编译,php引擎直接解析执行,开发效率高
web后端:处理网站后端的业务逻辑
跨平台:可以在不同平台上运行 windows linux MACOS
兼容性强:与所有正在被使用的web服务器兼容:apache web nginx
数据库支持:提供了广泛的数据库支持
易学,并可高效运行
二、php基本语法
文件名以.php结尾,代码必须在标签中
代码语句以英文分号;结束。
注释: //当行注释 /多行注释/ 快捷键:ctrl + /
php代码通常也可以包含HTML标签
1、 打印输出helloword:
<?php
// 这个是第一个php代码:helloworld
echo 'hello world';
?>
2、 变量:存储信息的容器盒子,这个信息可以是接收的数据也可以是字符串等等
变量声明必须以$符号开头。
变量名必须以字⺟或者下划线字符开始,不能以数字开始
变量名只能包含字⺟、数字以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分⼤⼩写的($y和$Y是两个不同的变量)
常⽤变量场景:$upload_dir (⽂件保存⽬录)、 $file_name (⽂件名)、 $file_path (⽂件完整路径)。
字符串拼接:英文符号“.”来拼接字符串
语法:$变量名=值
<?php
// 定义一个变量
$message="欢迎学习php";
// echo $message;
$name="张三";
echo $name.","."你好".",".$message;
?>
3、数组:存储一连串同类型的信息,
数组是⼀种数据结构,数组可以在单个变量中存储多个值,可以根据索引访问其中的值。
创建数组:array() 函数或者"[ ]"用于创建数组
语法:$数组名=[元素值1,元素值2,元素值3,...],通过索引或者下角标取数组里的值
索引或者下角标是从0开始的。
<?php
// 定义一个数组
$names=array("张三","李四","王五");
// 输出数组
echo $names[0];
echo $names[1];
echo $names[2];
$student=["张三","李四","王五"];
// 利用索引获取数组里的值
echo $student[0];
?>
4、流程控制语句:
php代码:从上向下,从左向右执行
条件语句:根据不同的情况执行不同的代码
不同业务场景决定了不同的业务功能,不同的业务功能执行不同的语句
if语句:仅当条件判断成立时执行的代码
在一个if语句存在多个条件里,可能判断多次,但是只会执行一次条件成立的代码
if (判断条件){
条件成立执行的代码;
}else{
条件不成立执行的代码;
}
<?php
// 判断语句
$score=50;
if ($score>=90){
echo "成绩优秀!";
}elseif ($score>=80){
echo "成绩良好!";
}elseif ($score>=60){
echo "成绩一般";
}else {
echo "还需努力";
}
?>
5、循环语句:重复的业务场景使用循环语句
for循环:习惯当知道循环次数的时候使用for循环
当for循环条件成立时,执行代码,迭代后继续判断,直到不成立时退出循环
从初始值到条件不成立,迭代了几次,执行几次代码
当条件一直成立时,会一直执行,形成死循环。
语法:for(初始值,条件,迭代){
条件成立时执行的代码;
}
<?php
$stduent=["小李","小丽","小高","小陈"];
for ($i = 0; $i <= 3; $i++) {
echo $stduent[$i].' ';
}
?>
while循环语句:当不知道要循环的次数的时候,使用while循环
while当条件成立时,执行循环体代码,然后迭代,直到条件不成立退出循环
语法:while (条件){
条件成立时执行代码
迭代
}
<?php
$count=3;
$student=array("小李","小丽","小高","小陈");
// 当不直到循环次数的时候使用while循环
While ($count >= 0) {
// $count=$count-1;
echo $student[$count].' ';
$count=$count-1;
}
?>
6、类与函数
类:一个抽象的概念,可以理解为用来存储不同类型信息的集合体,但是不能直接使用 ----群体
对象:从类中创造一个具体的集合体,类的实例化,具体化-----个体来使用
属性:类中定义的变量就是属性,用于存储信息
函数:一段完成特定功能的代码集合体,完成一系列的事情
函数的名称应该提示出它的功能
函数名称以字⺟或下划线开头(不能以数字开头)
PHP⾃定义函数
<?php
function functionName()
{
// 要执⾏的代码
}
?>
语法:class MyClass {
//类可以包含属性(变量)和方法(函数)
//属性用于存储数据,而方法用于执行操作
//new关键字直接跟类名来创建对象
}
<?php
header("Content-Type: text/html; charset=utf-8");
Class MyStudent {
// 定义两个类中两个属性(变量)name和age,Public 是指谁都可以使用获取这个属性,或者说是共有属性
public $name;
public $age;
public function say(){
echo $this -> name. " 你好! ";
}
}
$stu1 = New MyStudent();
// 获取类中属性时不需要$
$stu1 -> name = "张三";
$stu1 -> age = 18;
echo $stu1 -> name;
echo $stu1 -> age;
$stu1 -> say();
?>
7、魔术方法:特定的名称和功能
魔术方法不需要调用,php解释器只在特定的时机下才会执行
通常两个下划线开头,后面跟方法名称
<?php
class Person{
public function __construct(){
echo "construct is coming";
}
}
// 创建对象时会自动调用构造方法,并执行echo语句
$p1 = new Person();
?>
8、超全局变量:
⽤户提交数据通常是使⽤表单进⾏提交,也可以使⽤⽹址中的参数传递数据,这些数据通过HTTP请求的
⽅式发送,使web服务器获取。
获取后,php通过几个超全局变量拿到用户提交的http请求数据
$_GET
收集通过URL参数(GET⽅法)提交的数据
$_POST
收集通过HTTP POST⽅法提交的表单数据
$_FILES
处理通过HTTP POST上传的⽂件
超全局变量
全局:在PHP代码的任何位置都可以直接使⽤,不需要提前定义;
超:PHP官⽅内置的变量,专⻔⽤来接收⽤户传递的各种数据,天⽣存在,直接调⽤即可
核⼼特点:
所有超全局变量都是⼤写的数组形式;
专⻔⽤来接收⽤户从浏览器传递给服务器的数据;
是后端接收前端参数的核⼼⽅式。
$_GET 超全局变量 —— 接收GET请求传递的参数
$_GET 专⻔⽤来接收⽤户通过GET请求传递的所有数据,数据来⾃于浏览器地址栏的URL中。
语法: $_GET['参数名']
案例:访问⽹址 http://www.xxx.com/index.php?user=admin&pwd=123 ,后端接收参数:
$_POST 超全局变量 —— 接收POST请求传递的参数
$_POST 专⻔⽤来接收⽤户通过「POST请求」传递的所有数据,数据藏在请求体中,URL中不可⻅。
语法:$_POST['参数名']
案例:⽤户登录时输⼊账号密码,点击登录,后端接收参数:
准备前端页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表单信息</title>
</head>
<body>
<h3>注册表单</h3>
<!-- form表单,GET方法 -->
<!-- <form action="test10.php" method="GET"> -->
<!-- //form表单,POST方法 -->
<form action="test10.php" method="POST">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
账号:<input type="text" name="account"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
后端接收数据页面
<?php
header("Content-Type: text/html; charset=utf-8");
Class Person{
public $name;
public $age;
public $account;
public $passwd;
}
$p1 = new Person();
// 超全局变量$_GET获取网页传给后端的数据
// $p1 -> name = $_GET['name'];
// $p1 -> age = $_GET['age'];
// $p1 -> account = $_GET['account'];
// $p1 -> passwd = $_GET['pwd'];
//超全局变量$_POST来获取用户网页传的数据,注意:参数值与前端页面里的name里的值要一致。
$p1 -> name = $_POST['name'];
$p1 -> age = $_POST['age'];
$p1 -> account = $_POST['account'];
$p1 -> passwd = $_POST['pwd'];
echo "姓名:{$p1 -> name}<br>";
echo "年龄:{$p1 -> age}<br>";
echo "账号:{$p1 -> account}<br>";
echo "密码:{$p1 -> passwd}<br>";
echo "<a href='test8.php'>返回填写表单</a>";
?>
9、序列化和反序列化
传递多个数据可以用序列化对象
序列化serialize():是将⼀个 PHP 对象(包括它的类名、所有属性和属性值)转换为⼀个可存
储、可传输的字符串的过程。
反序列化unserialize():是将这个字符串还原回原来的 PHP 对象。
serialize()与 unserialize()都是php自带的函数,可以直接使用
接着上面的案例代码操作:
// 将一个p1对象打散拆解打包为一个字符串,便于存储与传输。
$serialize1=serialize($p1);
echo "序列化后的数据是:<br>{$serialize1}<br>";
//将上面序列化的数据进行反序列化,还原为p1对象。
$unserializa1=unserialize($serialize1);
echo "反序列化后的数据是: <br>";
echo $unserializa1->name;
echo "<br>";
echo $unserializa1->age;
echo "<br>";
echo $unserializa1->account;
10、web交互练习
<?php
error_reporting(0);
include "flag.php";
$KEY = "ZS";
$str = $_GET['str'];
if(unserialize($str)===$KEY){
echo "$flag" ."</br>";
}
show_source(__FILE__);
?>
- 让代码执行echo语句,就打印flag
- 发现echo语句是被包含在if语句里,且条件为真时执行,那么要使if条件语句为真
- 那就使条件语句$str的反序列化之后与变量$key的值一致为真
- 前面申明变量$key的值为字符串:"ZS"(大写)
- 因此只要变量$str的反序列化的值就是"ZS",那么条件就为真了
- 这个$str的变量是通过GET方法获取的,参数是str
- 那么综上,参数str就是"ZS"的序列化值。
测试代码:
<?php
$str=serialize("ZS");
echo $str;
?>
打印输出结果为s:2:"ZS";
通过url传入该参数即可,另外双引号需要转义,如下
http://localhost/fan/index.php?str=s:2:%22ZS%22

浙公网安备 33010602011771号