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

文章目录

  • 基础语法
  • 单双引号的区别
  • 前后端分离
  • 数据类型
  • 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.mzph.cn/bicheng/48438.shtml

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

相关文章

OCR识别采购单小程序管理助手

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

Qt开发网络嗅探器01

引言 随着互联网的快速发展和普及&#xff0c;人们对网络性能、安全和管理的需求日益增 长。在复杂的网络环境中&#xff0c;了解和监控网络中的数据流量、安全事件和性能 问题变得至关重要。为了满足这些需求&#xff0c;网络嗅探器作为一种重要的工具被 广泛应用。 网络嗅探…

【Godot4.2】SVGParser - SVG解析器函数库

概述 这是一个基于GDScript内置XMLParser编写的简易SVG文件解析函数库。 目的就是可以将SVG文件解析为GDSCript可以处理的字典或DOM形式&#xff0c;方便SVG渲染和编辑。 目前还只是一个简易实现版本。还需要一些改进。 函数库源码 # # 名称&#xff1a;SVGParser # 类型…

AI算法23-决策树ID3算法Iterative Dichotomiser 3 | ID3

目录 决策树ID3算法概述 决策树ID3算法简介 决策树ID3算法的原理 决策树ID3算法的核心 决策树ID3算法的本质 决策树ID3算法的基本流程 决策树ID3算法计算过程 步骤1 步骤2 步骤3 决策树ID3算法的代码实现 决策树ID3算法的优缺点 优点 缺点 决策树ID3算法的应用场…

ue5笔记

1 点光源 聚光源 矩形光源 参数比较好理解 &#xff08;窗口里面&#xff09;环境光混合器&#xff1a;快速创造关于环境光的组件 大气光源&#xff1a;太阳光&#xff0c;定向光源 天空大气&#xff1a;蓝色的天空和大气 高度雾&#xff1a;大气下面的高度感的雾气 体积…

【HarmonyOS】HarmonyOS NEXT学习日记:五、交互与状态管理

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;五、交互与状态管理 在之前我们已经学习了页面布局相关的知识&#xff0c;绘制静态页面已经问题不大。那么今天来学习一下如何让页面动起来、并且结合所学完成一个代码实例。 交互 如果是为移动端开发应用&#xff0c;那么交…

自主巡航,目标射击

中国机器人及人工智能大赛 参赛经验&#xff1a; 自主巡航赛道 【机器人和人工智能——自主巡航赛项】动手实践篇-CSDN博客 主要逻辑代码 #!/usr/bin/env python #coding: utf-8import rospy from geometry_msgs.msg import Point import threading import actionlib impor…

鸿蒙开发 03 封装 @ohos/axios (最新深度封装)

鸿蒙开发 03 封装 ohos/axios &#xff08;最新深度封装&#xff09; 1、安装 ohos/axios2、开始封装2.1 新建 utils 文件夹 和 api 文件夹2.2 在 utils 文件夹里新建 http.ts2.3 在 api 文件夹里新建 api.ets 3、页面调用4、打印结果 1、安装 ohos/axios ohpm install ohos/a…

linux环境交叉编译openssl库,以使Qt支持https

一.前言 Qt若需要支持https&#xff0c;则需要openssl的支撑,并且要注意&#xff0c;Qt不同版本会指定对应的openssl版本库&#xff0c;比方我用的Qt5.15.10他要求用的openssl版本是1.1.1&#xff0c;你就不能用其他版本&#xff0c;不然基本就是失败报错。 如何查看Qt对应ope…

无人机反制技术常见的有哪些?

随着无人机技术的迅速发展和广泛应用&#xff0c;无人机在民用、军事等领域都发挥着重要作用。然而&#xff0c;无人机的滥用和非法入侵也带来了严重的安全隐患。为了维护国家安全和社会稳定&#xff0c;无人机反制技术应运而生。本文将详细介绍无人机反制技术的常见类型&#…

【Git学习 | 第2篇】在IDEA中使用Git

文章目录 在IDEA中使用Git1. IDEA中配置Git2. 获取Git仓库2.1 本地初始化仓库2.2 从远程仓库克隆 3. 本地仓库操作4. 远程仓库操作5. 分支操作 在IDEA中使用Git 1. IDEA中配置Git IDEA中使用Git&#xff0c;本质上使用的本地安装的Git软件配置步骤&#xff1a; 2. 获取Git仓库…

Unity UGUI 之 RectTransform

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 Unity - Manual: Rect Transform 1.Rect Transform是什么 2.轴心与锚点的映射关系 首先…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel 简介熔断降级什么是熔断什么是降级相同点不同点 整合Sentinel自定义sentinel流控返回数据使用Sentinel来保护feign远程调用自定义资源给网关整合Sentinel参考 简介 熔断降…

阿里开源的音频模型_原理与实操

英文名称: FunAudioLLM: Voice Understanding and Generation Foundation Models for Natural Interaction Between Humans and LLMs 中文名称: FunAudioLLM: 人与LLMs之间自然互动的语音理解和生成基础模型 论文地址: http://arxiv.org/abs/2407.04051v3 相关论文&#xff1a;…

人话讲下如何用github actions编译flutter应用-以编译windows为例

actions的脚本看下这个&#xff0c;有简单的说明&#xff0c;有关于编译个平台的脚本&#xff1a; https://github.com/marketplace/actions/flutter-action 打开你要编译的项目点击那个Actions按钮 然后随便点击一个脚本会跳到白框编辑界面 打开上文提到的网址随便抄下就ok …

达梦数据库(一)mysql2dm

达梦数据库(一)mysql2dm 文章目录 达梦数据库(一)mysql2dm一、安装篇ForWindows二、数据库初始化篇三、数据迁移篇出现的问题找不到对应表或者视图 注意字符集模式迁移出错大小写敏感解决方案 四、 代码修改篇group_concatGROUP BY方法一方法二(最笨)方法补充 多表联查更新参考…

1.17、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理 竞争学习是一种无监督学习方法&#xff0c;其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络&#xff08;Competitive Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;其核心部分是…

Linux复习02

一、什么是操作系统 操作系统是一款做软硬件管理的软件&#xff01; 一个好的操作系统&#xff0c;衡量的指标是&#xff1a;稳定、快、安全 操作系统的核心工作&#xff1a; 通过对下管理好软硬件资源的手段&#xff0c;达到对上提供良好的&#xff08;稳定&#xff0c;快…

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

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

嵌入式C++、STM32、树莓派4B、OpenCV、TensorFlow/Keras深度学习:基于边缘计算的实时异常行为识别

1. 项目概述 随着物联网和人工智能技术的发展,智能家居安全系统越来越受到人们的关注。本项目旨在设计并实现一套基于边缘计算的智能家居安全系统,利用STM32微控制器和树莓派等边缘设备,实时分析摄像头数据,识别异常行为(如入侵、跌倒等),并及时发出警报,提高家庭安全性。 系…