深入理解PHP基础【代码审计实战指南】

news2024/11/27 6:33:14

文章目录

  • 基础语法
  • 单双引号的区别
  • 前后端分离
  • 数据类型
  • PHP常量
  • 函数
        • var_dump函数
        • count函数
        • print_r函数
        • **readfile()函数**
        • **file_get_contents()函数**
        • **file_put_contents()函数**
        • header函数
        • fopen函数
        • `fread` 函数
        • rename函数
        • copy()函数
        • unlink()函数
        • file_exists()函数
  • 运算符
  • 数组
        • 普通数组
        • 关联数组
        • 数组函数
  • php的控制结构
        • if-elseif
        • while
        • for结构
        • foreach遍历关联数组
  • 自定义函数
        • 无传参函数
  • 数学函数和字符串函数
        • 数学函数
        • 字符串函数
            • trim函数
            • dirname函数
        • str_pad函数
        • explode函数
  • 命令执行函数
        • system函数
        • passthru()函数
        • exec()函数
        • shell_exec()函数
        • popen 函数
  • php的错误处理
  • php操作mysql

PHP是一种广泛应用于Web开发的开源脚本语言,易学且功能丰富,可用于动态网站、Web应用、命令行脚本和桌面应用。其强大的数据库支持和社区资源使它成为开发者的重要工具。

基础语法

  • 字符串拼接用“.”

  • php能嵌套在html中

    • 代码示例:

      <!DOCTYPE html>
      <html lang="zh-CN">
      <head>
          <meta charset="UTF-8">
          <title>css样式优先级</title>
      </head>
      <body>
          <?php echo "唯有学习"; ?>
          <h1>使我快乐</h1>
          <?php echo date("Y-m-d H:i:s"); ?>
      </body>
      </html>
      

      在这里插入图片描述

单双引号的区别

代码示例:

<?php
header("Content-Type: text/html; charset=utf-8");
$name = 'kobe';
echo '最喜欢的NBA球星是' . $name . '<br>'; // 变量不加符号,遇到字符串拼接,需要加.连接
echo '最喜欢的NBA球星是$name<br>'; // 单引号,不解析变量,原样输出
echo "最喜欢的NBA球星是$name<br>"; // 双引号,解析变量
?>

在这里插入图片描述

前后端分离

代码示例:

前端:text.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
//数据的提交都是用表单form提交的
//一个网站,大部分都是GET请求,只有通过form提交的才能发起POST请求
<form action="./login.php" method="get">//通过gei方法发送到login.php页面
    用户名:<input type="text" name="username">
    密码:<input type="text" name="password">
    <input type="submit" value="提交">
</form>
</body>
</html>
========================================================
后端   login.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>网页后台</title>
    <style>
    div{
    text-align:right;
    }
    </style>
</head>
<body>
<div>
    <?php
    $name=$_GET["username"];//接受text.html传来的数据
    echo "欢迎".$name."回来^_^";
    ?>
</div>
</body>
</html>

在这里插入图片描述

数据类型

  • 布尔类型

    • 0/1
    • false or true
  • 整型

    • 整数范围:-99999+99999
  • 浮点型

    • 小数:-1.9, 3.25, 3.00005
  • 字符串

    • hello
  • 数组

    • array
  • 对象

    • object
  • 资源类型

    • resource
  • NULL

PHP常量

php常量最好是全部大写

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT;
?>

函数

var_dump函数

用于输出结果,其返回带有结果的类型,例如string(5) “value”

count函数

用于计算数组元素的个数

print_r函数

打印函数

readfile()函数

读取文件,并返回文件的长度

file_get_contents()函数

读取文件,支持本地和远程文件url

file_put_contents()函数

保存文件

header函数

用于发送原始 HTTP 头到客户端。

代码示例:

header('Content-Type: text/html; charset=UTF-8');//设置内容类型
-----------------------------------------------------------------------
header('Location: http://www.example.com');//重定向
exit(); // 使用 exit() 终止脚本执行
-----------------------------------------------------------------------
//设置缓存控制
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1
header('Pragma: no-cache'); // HTTP 1.0
header('Expires: 0'); // Proxies
fopen函数

fopen 函数用于打开文件或 URL,以便进行读取或写入操作。

fread 函数

fread 函数用于从打开的文件中读取指定数量的字节。也可以创建文件(文件不存在时)

代码示例:

user.txt:
zhansan:123456
lisi:123
wangwu:12345
zhaoliu:123
--------------------------------
1.php
<?php
header("Content-Type: text/html; charset=utf-8"); 
$a = fopen('user.txt', 'r'); 
//$size = filesize('user.txt'); 
//print_r($size); 
$b = fread($a, filesize('user.txt')); 
echo $b; 
fclose($a);
?>
结果:
zhansan:123456 lisi:123 wangwu:12345 zhaoliu:123
rename函数

将文件名重命名

用法:rename(‘原始名字’,‘新名字’)

copy()函数

将文件进行复制

用法:copy(‘原始路径’,‘新路径’)

unlink()函数

删除文件

file_exists()函数

判断文件是否存在,存在则返回true,不存在就返回false

运算符

运算符名称描述实例结果
x + yx 和 y 的和2 + 24
x - yx 和 y 的差5 - 23
x * yx 和 y 的积5 * 210
x / yx 和 y 的商15 / 53
x % yx 除以 y 的余数5 % 2<br>10 % 8<br>10 % 21<br>2<br>0
-x取负数x 取负数<?php $x = 2; echo -$x; ?>-2
a . b并置连接两个字符串“Hi” . “Ha”HiHa

数组

普通数组
<?php
// 数组普通数组
$d = array('张三风', '李四', '王五', '赵六'); // 数组元素下标 0-3
echo count($d);
echo $d[3];
echo "<hr>";
?>
结果:4赵六
关联数组
<?php
// 数组关联数组
$a = array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 'name' => 'apple');
echo count($a);
echo $a["color"];
echo $a['name'];
?>
结果:4redapple
数组函数

array_keys() 返回数组的所有的键值

array_values() 返回数组的所有的值

array_rand() 从数组中随机抽取一个或多个元素,注意是键名

unset() 用于删除数组的键值

代码示例:
<?php
$name = array('zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'zhangchuan');
echo $name[array_rand($name)];//随机收取键值
echo "<hr>";
print_r($name);
unset($name[2]);//删除键值
echo "<hr>";
print_r($name);
?>
结果:
zhangchuan
Array ( [0] => zhangsan [1] => lisi [2] => wangwu [3] => zhaoliu [4] => zhangchuan )
Array ( [0] => zhangsan [1] => lisi [3] => zhaoliu [4] => zhangchuan )

php的控制结构

  1. if-elseif
    1. 代码示例:

      <?php
      // ABC 其他 Sjixiao='F';
      if ($jixiao == 'A'){
          echo "发放1.2倍薪资";
      } elseif ($jixiao == 'B'){
          echo "正常发放薪资";
      } else if ($jixiao == ''){
          echo "发放90%薪资";
      } else {
          echo "发放80%薪资";
      }
      ?>
      结果:发放90%薪资
      
  2. while
    1. 代码示例:

      <?php
      $i = 1;
      while ($i <= 10) {
          echo "今天天气真好";
          echo "<br>";
          $i++;
          echo "<br>";
      }
      ?>
      结果:
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      今天天气真好
      
      
  3. for结构
    1. 代码示例:

      <?php
      $d = array('张三风', '李四', '王五', '赵六');
      $changdu = count($d) - 1;
      for ($i = 0; $i <= $changdu; $i++) {
          echo "中奖用户是:" . $d[$i];
          echo "<br>";
      }
      ?>
      结果:
      中奖用户是:张三风
      中奖用户是:李四
      中奖用户是:王五
      中奖用户是:赵六
      
  4. foreach遍历关联数组
    1. 代码示例:

      <?php
      $cars = array("特等奖" => "布加迪", "一等奖" => "捷豹", "二等奖" => "法拉利", "三等奖" => "玛莎拉蒂");
      foreach ($cars as $key => $value) {
          echo $key . "是" . $value;
          echo "<hr>";
      }
      ?>
      结果:
      特等奖是布加迪
      一等奖是捷豹
      二等奖是法拉利
      三等奖是玛莎拉蒂
      

自定义函数

  1. 无传参函数
    1. 代码示例:

      <?php
      function func1(){
          echo "hello,word";
      }
      func1();
      ?>
      结果:
      hello,word
      
  2. 有传参函数

    1. 代码示例:

      <?php
      function qiuouhe($a) {
          $sum = 0;
          for($i = 1; $i <= $a; $i++) {
              $jieguo = $i % 2;
              if ($jieguo == 0) {
                  $sum += $i;
              }
          }
          echo "1到$a 的所有偶数的和:$sum";
      }
      
      qiuouhe(1000);
      ?>
      结果:
      11000 的所有偶数的和:250500
      

数学函数和字符串函数

参考文档:PHP Math 函数 (w3school.com.cn)

  1. 数学函数
    1. 代码示例:

      echo abs(-4.2); // 绝对值函数,返回 -4.2 的绝对值,即 4.2
      echo "<br>"; 
      
      echo ceil(9.01); // 向上取整函数,返回大于或等于 9.01 的最小整数,即 10
      echo "<br>";
      
      echo floor(9.999); // 向下取整函数,返回小于或等于 9.999 的最大整数,即 9
      echo "<br>";
      
      echo pow(2, 4); // 幂函数,返回 24 次方,即 16
      echo "<br>";
      
      echo round(1.95583, 2); // 四舍五入函数,返回 1.95583 保留两位小数的值,即 1.96
      echo "<br>";
      
      echo mt_rand(1, 9); // 生成一个介于 19 之间的伪随机整数
      echo "<br>";
      
      echo rand(1, 9); // 生成一个介于 19 之间的伪随机整数
      echo "<br>";
      
      echo round(pi(), 2); // 返回圆周率 π 保留两位小数的值,即 3.14
      echo "<br>";
      结果:
      4.2
      10
      9
      16
      1.96
      9
      8
      3.14
      
  2. 字符串函数
    1. trim函数
      1. 去掉字符串两端的空格或其他指定符号

      2. 代码示例:

        <?php
        $str=" dms ";
        echo trim($str," ");
        ?>
        结果:dms
        
    2. dirname函数
      1. 代码示例:

        <?php
        $pic_path = 'C:\Users\29691\Desktop\mysite\1.jpg'; 
        echo dirname($pic_path); 
        echo "<br>";
        echo dirname($pic_path) . '\2.jpg'; 
        ?>
        结果:
        C:\Users\29691\Desktop\mysite
        C:\Users\29691\Desktop\mysite\2.jpg
        
    3. str_pad函数
      1. 代码示例:

        <?php
        for ($i = 1; $i <= 999; $i++) {
            echo str_pad($i, 3, '0', STR_PAD_LEFT);//左填充到3位数,默认是右填充
            echo "<br>";
        }
        ?>
        结果:
        001
        002
        003
        004
        005
        006
        007
        008
        009
        010
        011
        012
        013
        014
        015
        ...
        
    4. explode函数
      1. 代码示例:

        <?php
        $a=str_repeat("今天天气真好",13);
        $b=explode('.',$a);
        var_dump($b);
        ?>
        结果:
        array(1) { [0]=> string(234) "今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好今天天气真好" }
        

命令执行函数

system函数

用法:system(‘whoami’)

passthru()函数

用法: passthru(‘whoami’)

exec()函数

该函数无回显,需要利用echo函数配合进行回显

<?php
echo exec('whoami');
?>
shell_exec()函数

同exec函数一样无回显,利用方式一样

代码示例:

<?php
// exec() 示例
$output = [];
exec('whoami', $output);
print_r($output); // 输出所有行
echo '<hr>';
// shell_exec() 示例
$output = shell_exec('whoami');
echo $output; // 输出完整内容
?>
结果:
Array ( [0] => cong\cong )
cong\cong
popen 函数

用于打开一个进程并建立一个管道,以便可以与该进程进行输入或输出的交互。(可执行命令)

代码示例:

$handle = popen('dir', 'r');
if ($handle) {
    while (!feof($handle)) {
        $line = fgets($handle);
        echo $line; // 输出每一行
    }
    pclose($handle); // 关闭管道
} else {
    echo "无法打开进程。";
}

php的错误处理

错误显示:

<?php
ini_set('display_errors', 1); // 显示错误,注意可能会有敏感文件路径泄露
?>

错误级别:

错误类型说明
E_ERROR错误,文件直接中断
E_WARNING警告,问题比较严重,但还是会继续向下运行
E_NOTICE提示,有些小问题不会影响到程序。常发生在项目未定义
E_PARSE编译时语法解析错误。解析错误仅仅分析器产生。
E_ALL所有的错误
E_STRICT启用PHP对代码的修改建议,以确保代码具有最佳的操作性和前向兼容性。
E_DEPRECATED启用后将会在未来版本中可能无法正常工作的代码给予警告。

php操作mysql

代码示例:

<?php
$link = mysqli_connect('127.0.0.1', 'root', 'password', 'pikachu');
var_dump($link);
echo '<hr>';

$sql = 'SELECT * FROM users;';
$result = mysqli_query($link, $sql);
var_dump($result);
echo '<hr>';

while ($row = mysqli_fetch_array($result)) {
    print_r($row);
}
echo '<hr>';
?>
解读:
1. mysqli_connect函数用于与数据库建立连接
2. mysqli_query函数用于执行数据库操作,用法:mysqli_query(‘数据库链接’,‘SELECT、INSERT、UPDATE、DELETE 等数据库操作’)
3. mysqli_query函数只能返回一个结果集,mysqli_fetch_array函数只能获取一行数据,故通过while循环来获取大量数据
结果:
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "127.0.0.1 via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.7.26" ["server_version"]=> int(50726) ["stat"]=> string(135) "Uptime: 37925 Threads: 1 Questions: 383 Slow queries: 0 Opens: 125 Flush tables: 1 Open tables: 28 Queries per second avg: 0.010" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(53) ["warning_count"]=> int(0) }
--------------------------------------------------------------------------------
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(4) ["lengths"]=> NULL ["num_rows"]=> int(3) ["type"]=> int(0) }
--------------------------------------------------------------------------------
Array ( [0] => 1 [id] => 1 [1] => admin [username] => admin [2] => e10adc3949ba59abbe56e057f20f883e [password] => e10adc3949ba59abbe56e057f20f883e [3] => 1 [level] => 1 ) Array ( [0] => 2 [id] => 2 [1] => pikachu [username] => pikachu [2] => 670b14728ad9902aecba32e22fa4f6bd [password] => 670b14728ad9902aecba32e22fa4f6bd [3] => 2 [level] => 2 ) Array ( [0] => 3 [id] => 3 [1] => test [username] => test [2] => e99a18c428cb38d5f260853678922e03 [password] => e99a18c428cb38d5f260853678922e03 [3] => 3 [level] => 3 )

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

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

相关文章

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式&#xff0c;线程不安全。 2、懒汉式&#xff0c;线程安全 3、双检锁/双重校验锁&#xff08;DCL&#xff0c;即 double-checked locking&#xff09; 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

MATLAB函数介绍——plotm

简述 matlab中&#xff0c;plotm和不带“m”的plot意义相似&#xff0c;都是绘制二维图像的。只是加了m以后&#xff0c;在绘制时将图像投影到了世界地图坐标系上面进行显示。 plotm的第一个输入量是纬度&#xff0c;第二个输入量是经度&#xff0c;单位都是弧度。 例程 官方…

各种复现,保证质量

代码复现&#xff0c;文献复现&#xff0c;模型复现&#xff0c;算法复现&#xff0c;文章复现&#xff0c;创新点等等&#xff0c;python/matlab/c语言/r语言均可&#xff0c;保证高质量完成&#xff0c;可接急单&#xff0c;不成功不收费&#xff01;

docker应用:搭建云手机

简介&#xff1a;近来慵懒&#xff0c;身体懈怠良多&#xff0c;思来想去随手看点小攻略以宽慰不懈怠的心。云手机Cloudphone&#xff0c;就是将云计算技术运用于网络终端服务&#xff0c;通过云服务器实现云服务的手机。其实就是深度结合了网络服务的智能手机&#xff0c;这类…

基于多线程延迟排序的睡眠排序算法的创新与改进

基于多线程延迟排序的睡眠排序算法的创新与改进 摘要 本文在传统睡眠排序算法的基础上&#xff0c;提出了一种改进方案&#xff0c;旨在优化处理负数和大规模数据集的性能。通过引入线程池管理和数据分段排序技术&#xff0c;改进后的算法在处理大数据集和包含负数的数据集时…

【11】微服务链路追踪SkyWalking

1、skywalking是什么 1.1 链路追踪介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统&#xff0c;通常会遇到下面一些问题&#xff0c;比如&#xff1a; 如何串联整个调用链路&#xff0c;快速定位问题&#xff1f;如何缕清各个微服务之间的依赖关系&#xff1f;…

【web】-flask-简单的计算题(不简单)

打开页面是这样的 初步思路&#xff0c;打开F12&#xff0c;查看头&#xff0c;都发现了这个表达式的base64加密字符串。编写脚本提交答案&#xff0c;发现不对&#xff1b; 无奈点开source发现源代码&#xff0c;是flask,初始化表达式&#xff0c;获取提交的表达式&#xff0…

C语言 | Leetcode C语言题解之第260题只出现一次的数字III

题目&#xff1a; 题解&#xff1a; int* singleNumber(int* nums, int numsSize, int* returnSize) {int xorsum 0;for (int i 0; i < numsSize; i) {xorsum ^ nums[i];}// 防止溢出int lsb (xorsum INT_MIN ? xorsum : xorsum & (-xorsum));int type1 0, type2…

虚拟机OP的LAN网口设置

问题&#xff1a;unraid通过虚拟机安装OP&#xff0c;然而一个网口连接路由器&#xff0c;总是无法为其他设备提供DHCP&#xff0c;导致无法使用。 一、虚拟机OP配置 二、OP内部配置 对于Lan网口&#xff0c;启用强制&#xff0c;这样可以防止OP被网口接的路由器产生冲突 三、…

安全防御:过滤技术

目录 一、URL过滤 URL过滤的方式 二、HTTP与HTTPS HTTP协议获取URL的方式 HTTP协议做控制管理的流程 HTTPS 1&#xff0c;配置SSL的解密功能 2&#xff0c;直接针对加密流量进行过滤 需求&#xff1a; 三、DNS过滤 四、内容过滤 文件过滤技术 文件过滤技术的处理流…

详解SVN与Git相比存在的不足

原文全文详见个人博客&#xff1a; 详解SVN与Git相比存在的不足截至目前&#xff0c;我们已既从整理梳理的SVN和Git在设计理念上的差异&#xff0c;也重点对二者的存储原理和分支管理理念的差异进行深入分析。这些差异也直接造成了SVN和Git在分支合并、冲突解决、历史记录管理…

Git分支管理基本原理

原文全文详见个人博客&#xff1a; Git分支管理基本原理上文已讨论过svn分支管理的基本原理&#xff0c;本文将继续探讨Git分支管理的基本原理&#xff0c;以便后续进行进一步的理解和对比&#xff1a;https://www.coderli.com/git-branch-method/【Java学习交流(982860385)】…

Git仓库拆分和Merge

1. 问题背景 我们原先有一个项目叫open-api&#xff0c;后来想要做租户独立发展&#xff0c;每个租户独立成一个项目&#xff0c;比如租户akc独立部署一个akc-open-api&#xff0c;租户yhd独立部署一个yhd-open-api&#xff0c;其中大部分代码是相同的&#xff0c;少量租户定制…

鸿蒙开发入门——声明式UI开发入门简介(1)

声明式UI特点 与常规命令式开发的区别在于主导者不同&#xff0c;命令式开发为开发者告诉计算机需要做什么&#xff0c;而声明式开发为开发者告诉计算机自己想要什么结果&#xff0c;怎么做交给预先的程序和算法&#xff0c;让计算机自行推断 声明式描述 开发者只需描述在界⾯…

《0基础》学习Python——第二十讲__网路爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多&#xff0c;即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容&#xff0c;如果content-typejson类型的&#xff0c;打印上述代码的请求&#xff0c;则用一个命…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;自从SDXL提出了长宽桶技术之后&#xff0c;彻底解决了不同长宽比的图像输入问题&#xff0c;现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

如何根据同一行的ID利用R语言对值进行求和

需求&#xff1a;将属于同一分组的对应的值进行求和或者求平均值 #设置工作目录 > getwd() [1] "C:/Users/86150/Documents" > setwd("C:/Users/86150/Desktop/AA2024/RUF") > list.files() #读取文件 >install.packages("readxl")…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM(2024 年更新) 一、介绍 你可以把机器学习算法想象成一个装满斧头、剑和刀片的军械库。你有各种各样的工具,但你应该学会在正确的时间使用它们。打个比方,将“线性回归或逻辑回归”视为一把能够有效地切片和切块数据但…

uniapp vue3 上传视频组件封装

首先创建一个 components 文件在里面进行组件的创建 下面是 vvideo组件的封装 也就是图片上传组件 只是我的命名是随便起的 <template><!-- 上传视频 --><view class"up-page"><!--视频--><view class"show-box" v-for"…