此部分用于记录记录自己学习PHP的笔记

相关内容或课程参考于自己大一报的付费班,2000多,到现在一年整了,还没看,自制力真的不行,勿当韭菜

大一的时候感觉课很少,很轻松,结果大二那么多课,还难,还没用,离谱,在大学竟让没有大段完整的时间,必须在晚上、课上、周末挤时间去学习真正的技术和自己感兴趣的

学习目的·

  1. 把之前买的付费课看完
  2. PHP在WEB渗透测试中占有一定的比重(也可能是因为自己看的是0基础入门课),例如其独有的PHP反序列化、文件包含、SQL注入,分析逻辑
  3. (37 封私信 / 80 条消息) 为啥 php 还有这么多人在用啊? - 知乎 (zhihu.com) 尽管我以后也确实不会用PHP开发,有些同学说过时了,不过认为了解一下很重要,对于自己这个专业,因为还存在很多PHP搭建的网站

前置配置或基础·

  • 安装了PHPstudy,自带了PHP,加入环境变量
  • 安装PHPstorm,配置解释器,和pycharm一样简单
  • 有一定的HTML基础

第一讲:·

语法·

语法 写的太乱

PHP标签:标准写法:<?php "code" ?>

注释:#单行 /**/多行

变量:加$

输出:echo $x;

格式:var_dump($x) print_r

十六进制ASCII:\x3d

\ddd 三位八进制对应的ASCII

\r和\n:一文让你搞明白文本或代码中 \n 和 \r 的区别-腾讯云开发者社区-腾讯云 (tencent.com)

\n在终端换行,<br>或."<br>"才能在浏览器换行 变量

数组:

1
2
3
<?php
$arr = ['tom'=>18,'jack'=>20,'amy'=>22]#自定义键名
print_r($arr);

多维数组:$ary=[$arr,$arr1,$arr2];#里面为数组名

var:(3条消息) PHP中var关键字用法_php中var的用法_H-大叔的博客-CSDN博客

类(属性的调用类似C,$test->name,常量中间用两个::)

1
比较: ==只比较值   ===比较值和类型

const 常量 = 值 使用常量时,前不加$

双引号里可以写变量,字符串连接用.

1
2
3
4
5
6
<?php
$arr1=['tom'=>17,'amy'=>20,'jack'=>30];
foreach($arr1 as $key=>$value){#解决自定义键的问题
echo "name:$key age:$value"."\n";
}
?>

PHP 语法 | 菜鸟教程 (runoob.com)

建议直接参考菜鸟教程或博客等学习(无其他语言基础C,python的可以找视频看)

额,整节课都比较水,有其他编程语言基础再看自然很多都是互通的,1.5X倍速+快进

大可以很快过一下,就直接讲特性,魔术方法等的内容


第二讲:·

变量作用域、请求头等·

还以为听错了,结果是真的:PHP的全局变量只能在函数外使用,调用的利用global关键字

static函数调用后不销毁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<?php
echo "url传参.php?a=a值&b=b值";
if(isset($_GET['a']) & isset($_GET['b']))
echo "\n"."a+b=".($_GET['a'] + $_GET['b']);#.php?a=3&b=7
?>
</body>
</html>

生成html模板:html:5 按下TAB键

$_REQUEST 用于收集 HTML 表单提交的数据(危险):

CTFHub 技能树-- RCE(详解)_ctf rce_hcjtn的博客-CSDN博客

实操:前端构建表单,php后端接收

<input name="num[]"> 下面引用时:isset($_POST)['num']

直接用统一名 采用数组处理

获取请求头信息:·

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<body>
<form action="" method="post">
<input name="num"><br>
<button type="submit">计算</button>
</form>

<?php
echo "url传参.php?a=a值&b=b值";
if(isset($_GET['a']) & isset($_GET['b']))
echo "\n"."a+b=".($_GET['a'] + $_GET['b']);#.php?a=3&b=7
?>
<br><br><br>
<?php
foreach (getallheaders() as $name => $value){
echo "$name : $value"."<br>";#用\n不知道为什么展示排版效果不好
}

#设置请求头的选择性展示
header("Server:close");#server: PhpStorm 2023.1.1
?>
</body>

有些服务器信息例如apache版本,若是phpstudy,可以在其中的配置文件中修改

魔术常量:__ METHOD __ 用两个下划线包裹

还行吧,后面介绍了些不知道的,也复习了下表单请求头之类的,不过一节课2,3小时学到的不多

刚发现这个课是学完html学php,再学python,怪不得感觉慢些


第三讲:·

面向对象·

看目录的话这节课是讲面向对象、文件包含:

1
2
3
4
5
6
7
class Animal{
var $name;
function hello(){
#使用this来操作对象的属性与方法
echo "我是$this->name";
}
}

挺好的,好像了解了为什么之前JAVA需要用this了,定义的属性无法直接使用

  • 好吧,还是不理解

(1条消息) this在Java中的必须使用和不推荐使用的情况_iteye_15898的博客-CSDN博客

参数名和成员变量名相同时,必须使用this加以区分

下面又大概解释了,构造函数,可以在new对象时直接传参赋值:

1
2
3
4
5
6
#放在成员方法首个的位置
function __construct($name,$color){
$this->name = $name;
$this->color = $color;
}
$dog = new Animal('lucky','white');

如果要构造有独特属性的子类,可以采用extends 继承 — 确实,用动物来举例还是蛮方便的;而原有的可传参个数少于子类,可以overview重写

访问控制·

PHP对属性、方法的访问控制,是在前加关键词(未定义视为public):

  • public(公有):公有的类成员可以在任何地方被访问
  • protected(受保护):可被自身、子父类访问
  • private(私有):只能被其定义所在的类访问

程序耗时、日期啥的,没啥好听的

文件包含·

require_once "key_value.php"; include "1.php"

require 遇到错误后不再执行,include照旧执行

文件包含,能够很好地实现复用,公共文件引用,类的调用

确实自己在博客搭建时,也是遇到了header和footer这类文件,可以一次修改多页面部署,当时以为算是配置文件

讲的很松散,内容也还是感觉简单,看老师敲代码的时候一直想跳过

之前看acwing的课就没这感觉,还是不够难,haha,毕竟只是工具而已


第四讲:·

css想写好,也得花大功夫学习,但是因为样式不涉及数据交换,所以不是重点学习对象

创建简单的登陆页面,文件读写(密码)·

header("Location: admin.php"); 页面跳转||window.location = 'login.php'

fread 字节读取,1ASCII1字节,1中文三字节

中间的代码就不实践了,看的时候感觉造轮子真的很麻烦,例如账号密码验证,作为用户不需要考虑那么多细节,但开发时就要考虑较多问题:加密、防爆破、字符过滤等等

有点无聊,花了这么久时间也没讲很多

cookie和session·

没能完全地分清楚各自的作用

唉,过程中笔记没好好记

下来再补吧

还行,但自己只是听了


第五讲:·

$sql=“sql语句 字段加上反引号``”;