代码审计之PHP基础铺垫

news2024/11/23 10:32:59

目录

1、标记

2、注释

3、输出语句

4、关键字

5、常量的定义与使用

6、预定义常量

7、变量的赋值(传参赋值与引用赋值)

8、可变变量

9、双引号和单引号的区别

10、heredoc结构和nowdoc结构

11、其他符号


1、标记

<?php 和 ?> 是PHP标记中的一种(标准标记),专门用来包含PHP代码;

echo用于输出一个或多个字符串;

结束标记前的最后一条语句可以省略分号。

除了标准标记,还有短标记,ASP式标记,Script标记

 短标记和ASP式标记都是需要先开启才能使用;

ASP式标记和Script标记我们一般不推荐使用,了解即可。

注意:

若脚本含有XML语句,应避免使用短标记,因为“<?”是XML解析器的一个处理指令,会造成混淆。

2、注释

PHP支持3种:

C++风格的单行注释 “//”

C风格的多行注释 “/*......*/”

Shell风格的注释 “#”

3、输出语句

常用的有:echo,print,var_dump(),print_r()

<?php
echo 1+2,'Q';
print 'you';
echo '<br/>'; //<br/>是HTML标签,表示换行
print_r('hello');
echo '<br/>';
var_dump(2,3);
var_dump('Myon');
?>

echo 和 print 用法相同,但前者可以多个输出(多个数据间用逗号分隔),后者只能输出一个值;

print_r()是PHP的内置函数,可以输出任意类型的数据;

var_dump()不仅可以打印一个或多个任意类型数据,还可以获取数据的类型和元素个数。

下面是运行结果:

4、关键字

PHP中保留了很多关键字

例如,class关键字用于定义一个类;

const关键字用于定义常量;

function关键字用于定义一个函数。

5、常量的定义与使用

可以通过define()函数或者const关键字实现

<?php
define('PAI',3.14);
define('R',5,true);
echo PAI,"\n"; //echo输出多个数据时用逗号分隔,至于为什么换行符用双引号引而不是单引号后面解释
echo R,"\n";
echo r,"\n";

const R = 6;
const D =2*R;
echo D;
?>

运行结果:

 define()函数第一个参数表示常量名称,第二个参数表示常量值;

第三个参数是可选的,用于指定常量名是否对大小写敏感,可设置为true或false,

默认是false,即会对大小写敏感。

我们上面将 ‘R’ 设置为true,则对大小写不敏感,后面输出r也是可以的,结果一样。

const关键字定义常量时,只需在后面跟上常量名称,用“=”进行赋值即可。

6、预定义常量

除自定义常量外,PHP中还提供了很多预定义常量:

常量名功能
__FILE__默认常量,PHP程序文件名
__LINE__默认常量,PHP程序行数
PHP_VERSION内建常量,PHP程序的版本
PHP_OS内建常量,执行PHP解析器的操作系统名称
TRUE该常量是一个真值(true)
FALSE该常量是一个假值(false)
NULL一个null值
E_ERROR该常量指到最近的错误处
E_WARNING该常量指到最近的警告处
E_PARSE该常量指到解析语法有潜在问题处
E_NOTICE该常量为发生不寻常处的提示但不一定是错误处

看例子 :

<?php
echo __FILE__; //当前文件路径
echo '<br>';  //换行
echo PHP_VERSION;  //当前PHP版本
echo "\n";  //换行
echo PHP_OS;  //当前操作系统
echo PHP_EOL;  //换行
echo __LINE__;  //程序中的当前行号
?>

运行结果: 

 使用预定义常量可以很方便的获取到当前文件的路劲、PHP版本、操作系统等信息

顺便我们也介绍了PHP中三种常见的换行方式:

echo '<br>'; 

echo "\n"; 

echo PHP_EOL; 

7、变量的赋值(传参赋值与引用赋值)

默认是传值赋值,即将“=”右边的数据赋值给左边的变量

<?php
$n1 = 10; //定义变量$n1并赋值为10
$n2 = $n1;  //定义变量$n2,并将$n1的值赋给$n2
$n1 = 100;  //修改$n1的值为100
echo $n1; 
echo "\n";
echo $n2;
?>

运行结果:

 可以看到,后面修改变量$n1的值但是并没有改变变量$n2的值

而引用赋值就是在要赋值的变量前添加“&”符号

我们对上述代码稍作修改

<?php
$n1 = 10;
$n2 = &$n1;  //添加&,变为引用赋值
$n1 = 100;
echo $n1;
echo "\n";
echo $n2;
?>

 可以看到修改$n1的值,$n2的值也随之改变

引用赋值就相当于给变量起了一个别名(和C++很像)

8、可变变量

为了方便在开发时动态地改变一个变量的名称

通过可变变量,可以将另一个变量的值作为该变量的名称

通过在变量前多加一个美元符号“$”来实现

(我最开始看这里是没理解的,我老是想给变量hello加上两个美元符号,其实它的意思是当我们定义好了一个可变变量,我们在用到它的时候可以用多加一个$的方式来调用这个变量,并不是在变量的值上面去多加美元符号)

来看一个简单的例子:

<?php
$a = 'hello';
$hello = 'Myon'; //将变量$a的值作为该变量的名称
echo $a,' ',$$a;
echo "\n";
echo $$a;
echo "\n";
echo $hello;
?>

运行结果:

我们可以看到 $$a 和 $hello的值是一样的

注意:

若变量$a的值是数字,则可变变量$$a就会出现非法变量名的情况

9、双引号和单引号的区别

双引号中的字符串会被解析,而单引号中的字符串则会原样输出。

<?php
$Num = 10;
echo "$Num =",$Num;
echo "\n";
echo '$Num =',$Num;
?>

10、heredoc结构和nowdoc结构

都以“<<<”开始,后跟标识符名称;

heredoc的标识符没有引号,而nowdoc的标识符必须使用单引号包裹;

结束时所引用的标识符名称与开始时相同。

<?php
$name = 'PHP';
$heredoc=<<<EOD
<ul>
  <li>$name 是世界上最好的语言!</li>
  <li>$name is the best programming language in the world !</li>
</ul>
EOD;
echo $heredoc;
$nowdoc = <<<'EOD'
<ul>
  <li>$name是世界上最好的语言!</li>
  <li>$name is the best programming language in the world!</li>
</ul>
EOD;
echo $nowdoc;

 heredoc结构的字符串会解析其中的变量,nowdoc结构中的变量会被原样输出。

可以类比双引号和单引号

11、其他符号

“==”是比较运算符,用于比较左右两个值是否相等;

“.”是字符串连接符,用于连接两个字符串。

<?php
echo '123'.'ABC';
echo "\n";
var_dump(0==false);
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十一届蓝桥杯青少组省赛Python中/高级组编程题真题,包含答案解析

第十一届蓝桥杯青少组省赛Python中/高级组编程题真题 编程实现 第一题&#xff1a; 输入一个字符串&#xff0c;如果该字符串以er、Iy或者ing后缀结尾的&#xff0c;则删除该字符串后缀&#xff0c;并输出删除后的字符串&#xff0c;否者将原字符串输出。 输入描述 输入一个…

零知识证明:应用和具体用例

零知识证明&#xff08;Zero-Knowledge Proofs&#xff0c;ZKPs&#xff09;是应用密码学中令人兴奋的突破&#xff0c;将在各个行业中解锁新的用例&#xff0c;从 Web3 到供应链再到物联网。通过在不揭示信息的情况下验证其真实性&#xff0c;ZKPs 可以增强数字系统的隐私、安…

【Unity-UGUI控件全面解析】| Slider 滑动条组件详解

🎬【Unity-UGUI控件全面解析】| Slider 滑动条组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 充当 进度条控制灯光亮度4.2 模拟 血条 使用💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CS…

【Spring全家桶系列】面向切面编程AOP

⭐️前面的话⭐️ 本文已经收录到《Spring框架全家桶系列》专栏&#xff0c;本文将介绍面向切面编程的思想和相关概念&#xff0c;附加一个小案例。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&a…

基于Kubernetes集群构建大中型企业CICD应用平台(2)--code阶段工具gitlab安装

这里我们为gitlab服务器准备一台虚拟机&#xff1a;192.168.19.6-gitlab服务器 在code阶段&#xff0c;我们需要将不同版本的代码存储到一个仓库中&#xff0c;常见的版本控制工具就是SVN或者Git&#xff0c;这里我们采用Git作为版本控制工具&#xff0c;GitLab作为远程仓库。…

django常用命令/vue-cli图形化界面创建方式/vueo-cli命令行创建方式/若依框架/elementui

django常用命令 django-admin.exe startproject mysite python .\manage.py startapp app01 python manage.py makemigrations python manage.py migrate python manage.py runserver python manage.py runserver 0.0.0.0:8000 from django.shortcuts import render,Http…

【Linux学习】多线程——同步 | 条件变量 | 基于阻塞队列的生产者消费者模型

多线程——同步 | 条件变量 | 基于阻塞队列的生成者消费者模型 &#x1f3d3;生产者消费者模型&#x1f3f8;同步概念&#x1f3f8;生产者消费者模型的特点 &#x1f3d3;同步的应用&#x1f3f8;条件变量&#x1f3f8;条件变量接口 &#x1f3d3;基于阻塞队列的生产者消费者模…

文心一言 VS chatgpt (16)-- 算法导论4.1 1~2题

一、当A的所有元素均为负数时&#xff0c;FIND-MAXIMUM-SUBARRAY返回什么? 文心一言&#xff1a; 当A的所有元素均为负数时&#xff0c;FIND-MAXIMUM-SUBARRAY返回-1。 这是因为在二进制中&#xff0c;当所有元素均为负数时&#xff0c;A的每个元素都对应一个负数&#xff…

基于Kubernetes集群构建大中型企业CICD应用平台(4)--Operate阶段工具

还是在192.168.19.7-CentOS-7.6-jenkins-new这台服务器上进行操作 部署过程&#xff0c;会采用Docker进行部署&#xff0c;暂时只安装Docker即可&#xff0c;后续还需安装Kubenetes 4.1 Docker安装 准备测试环境&生产环境 下载Docker依赖组件 # yum -y install yum-uti…

vue+express+mysql做一个简单前后端交互,从数据库中读取数据渲染到页面

1.下载上次的包 npm I &#xff0c;同时下载新的包 axios 2.打开数据库服务器&#xff0c;同时使用新建数据库一样&#xff0c;数据包名 3.新建一个项目 4.全局注册axios 5.新建一个server文件夹&#xff08;里面在建一个index.js的主文件&#xff09;用来放我们后端写的东西 …

设计模式——单一职责模式之桥模式

文章目录 前言一、“单一职责” 模式二、Bridge 桥模式1、动机2、模式定义3、伪代码示例4、结构 总结 前言 一、“单一职责” 模式 在软件组件的设计中&#xff0c;如果责任划分的不清晰&#xff0c;使用继承得到的结果往往是随着需求的变化&#xff0c;子类急剧膨胀&#xff…

【C++STL】map/set源码封装简单分析

文章目录 一. 问题的抛出二. 红黑树的实现三. map/set实现四. 分析五. KeyOfValue仿函数结束语 一. 问题的抛出 我们知道C的STL中map和set的底层都是红黑树。 但是仔细思考一下&#xff0c;map是存储键值对&#xff0c;也就是Key_Value模型 而set是Key的模型 那么STL中的红黑树…

apisdk-starter自动装配的思路与应用

apisdk-starter整体思路 首先定义开发者定义的开放接口声明为原始类&#xff0c;javassist生成的类是增强类。 使用springboot的EnableAutoConfiguration和Import触发Spring扫描组件扫描原始类&#xff0c;得到所有BeanDefinition拓展FactoryBean&#xff0c;构造函数的参数为…

力扣算题Day20

98.验证二叉搜索树(了解二叉树的性质,才是编写此道题代码的基础) 做题伤着了&#xff1a;这道题我做的时候&#xff0c;看到别人写的代码很长&#xff0c;懒得看&#xff0c;直接干。自己编写代码&#xff0c;没有了解平衡二叉树的性质&#xff0c;然后出现了下图[0,-1]、[0]的…

落地页设计的营销心理学(一)

营销落地页的作用&#xff0c;是为了促进目标用户转化。但如何提升转化率&#xff0c;这就需要我们了解用户在浏览落地页行为背后的动机、心理活动是什么&#xff0c;才能更好地制定营销策略。 营销心理学是指应用心理学原理来解释、预测和影响人们购买决策的一门学科。在落地页…

Goby 漏洞更新 |华视私云-CDN直播加速服务器默认口令漏洞

漏洞名称&#xff1a;华视私云-CDN直播加速服务器默认口令漏洞 English Name&#xff1a;Sinovision Cloud CDN live default passwd CVSS core: 6.5 影响资产数&#xff1a;737 漏洞描述&#xff1a; 华视私云-CDN直播加速服务器是一款用于CDN直播加速的服务器。华视私云…

Restormer Efficient Transformer for High-Resolution Image Restoration论文代码运行记录

文章目录 Restormer代码训练和测试运行记录文章及代码地址1. 所需环境2. 配置环境3. 安装gdrive以便下载数据集4. 放置权重文件5. 运行Demo运行单图像散焦去模糊训练、测试 Restormer代码训练和测试运行记录 文章及代码地址 文章名称&#xff1a;Restormer: Efficient Transf…

获取cookies的方法及使用postman进行接口关联

第一种获取cookies的方式 看有没有专门的登录测试地址&#xff0c;访问来获取cookie信息&#xff0c;然后将cookie信息粘贴到header里面 第二种获取cookies的方式 在登录前&#xff0c;提前打开审查元素&#xff0c;然后输入账号密码后&#xff0c;点击登录&#xff0c;就可…

刚来起薪就18K,公司刚来的00后真是卷王....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

【Java零基础入门篇】第 ⑤ 期 - 抽象类和接口(一)

博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 学习目标 1.了解什么是抽象类&#xff0c;什么是接口&#xff1b; 2.掌握抽象类和接口的定义方法&#xff1b; 3.理解接口和抽象类的使用场景&#xff1b; 4.掌握多态的含义和用法&#xff1b; 5.掌握内部类的定义方法和使用…