深入理解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.rhkb.cn/news/380935.html

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

相关文章

【Android】视图与常用控件总结

文章目录 一、视图基础1.1 设置视图的宽高1.2 设置视图的间距1.3 设置视图的对齐方式1.4 总结 二、控件2.1 TextView2.1.1 设置宽高2.1.2 设置内容2.1.3 设置大小2.1.4 设置颜色 2.2 Button2.3 EditText2.4 ImageView2.5 ProgressBar2.6 AlertDialog2.7 ProgressDialog 本文主要…

EVM-MLIR:以MLIR编写的EVM

1. 引言 EVM_MLIR&#xff1a; 以MLIR编写的EVM。 开源代码实现见&#xff1a; https://github.com/lambdaclass/evm_mlir&#xff08;Rust&#xff09; 为使用MLIR和LLVM&#xff0c;将EVM-bytecode&#xff0c;转换为&#xff0c;machine-bytecode。LambdaClass团队在2周…

RICHTEK立锜科技 WIFI 7电源参考设计

什么是WIFI 7? WiFi 7&#xff08;Wi-Fi 7&#xff09;是下一代Wi-Fi标准&#xff0c;对应的是IEEE 802.11将发布新的修订标准IEEE 802.11be –极高吞吐量EHT&#xff08;Extremely High Throughput &#xff09;。Wi-Fi 7是在Wi-Fi 6的基础上引入了320MHz带宽、4096-QAM、Mu…

手动构建线性回归(PyTorch)

import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt import random #1.构建数据 #构建数据集 def create_dataset():x,y,coefmake_regression(n_samples100,n_features1,random_state0,noise10,coefTrue,bias14.5)#将构建数据转换为张…

H3CNE(计算机网络的概述)

1. 计算机网络的概述 1.1 计算机网络的三大基本功能 1. 资源共享 2. 分布式处理与负载均衡 3. 综合信息服务 1.2 计算机网络的三大基本类型 1.3 网络拓扑 定义&#xff1a; 网络设备连接排列的方式 网络拓扑的类型&#xff1a; 总线型拓扑&#xff1a; 所有的设备共享一…

# Redis 入门到精通(九)-- 主从复制(1)

Redis 入门到精通&#xff08;九&#xff09;-- 主从复制&#xff08;1&#xff09; 一、redis 主从复制 – 主从复制简介 1、互联网“三高”架构 高并发高性能高可用 2、你的“Redis”是否高可用&#xff1f; 1&#xff09;单机 redis 的风险与问题 问题1.机器故障  现…

代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串

代码随想录算法训练营 Day 9 代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网&#xff1a;55.右旋转字符串 目录 代码随想录算法训练营前言LeetCode151.翻转字符串里的单词卡码网&#xff1a;55.右旋转字符串 一、LeetCode151.翻转字符串里的单词1.题目链…

[Cesium for Supermap] 加载3dTiles,点击获取属性

代码&#xff1a; // 设为椭球var obj [6378137.0, 6378137.0, 6356752.3142451793];Cesium.Ellipsoid.WGS84 Object.freeze(new Cesium.Ellipsoid(obj[0], obj[1], obj[2]));var viewer new Cesium.Viewer(cesiumContainer);var scene viewer.scenescene.lightSource.ambi…

python 打包

#导出依赖文件列表 pip freeze > requirements.txt #安装对应文件 pip install -r requirements.txt #将依赖打成对应whl文件 pip wheel --wheel-dir ./dist -r ./requirements.txt #安装whl文件 pip install …whl

个人简约低调主页,三种主题风格源码

一、源码描述 这是一款简约低调的个人主页源码&#xff0c;提供了数百个精美的动画效果&#xff0c;拥有完美的视觉体验和交互体验&#xff0c;可操作性也达到了巅峰&#xff0c;源码支持三种主题风格&#xff0c;白色、黑色和蓝色渐变&#xff0c;所有这些效果都是通过原生Ja…

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高&#xff0c;文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件&#xff0c;使其既能保持清晰&#xff0c;又能轻松分享&#xff1f;今天&#xff0c;给大家分享五种实用的视频压缩方法&#xff0c;快来…

Spring Boot 笔记1(启动类与控制器)

采用Spring Tool Suit 4 java jdk 17 学习启动类与控制器 创建Spring Starter Project 如果https://start.spring.io链接无效&#xff0c;可以选择https://start.aliyun.com 项目结构 启动类 启动类是程序的执行入口 例子1 Demo1Application.java package com.example.dem…

《从C/C++到Java入门指南》- 9.字符和字符串

字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符&#xff0c;所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…

Django cursor()增删改查和shell环境执行脚本

在Django中&#xff0c;cursor()方法是DatabaseWrapper对象&#xff08;由django.db.connectio提供&#xff09;的一个方法&#xff0c;用于创建一个游标对象。这个游标对象可以用来执行SQL命令&#xff0c;从而实现对数据库的增删改查操作。 查询&#xff08;Select&#xff0…

对象存储解决方案:高性能分布式对象存储系统MinIO

文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 建议使用RPM或DEB安装方式2.2 创建环境变量文件2.3 启动MinIO服务2.4 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3…

Python入门------pycharm加载虚拟环境

pycharm虚拟环境配置&#xff1a; 在按照前面的办法&#xff0c;配置好虚拟环境后,如果我们需要到虚拟环境开发&#xff0c;就需要给编译器配置虚拟环境 1.打开编译器&#xff0c;点击右下角的interpreter选项 2. 点击ADD Interpreter,添加虚拟环境 3. 因为我们使用的是原始…

CUDA编程00 - 配置CUDA开发环境

第一步&#xff1a; 在一台装有Nvidia显卡和驱动的机器上&#xff0c;用nvidia-smi命令查看显卡所支持cuda版本 第二步&#xff1a; 到Nvidia官网下载CUDA Toolkit并安装&#xff0c;CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可&#xff0c;安装完成用 …

Linux源码安装的Redis如何配置systemd管理并设置开机启动

文章目录 实验前提实验 实验前提 已完成源码安装并能正常启动redis /usr/local/bin/redis-server能正常启动redis 实验 vim /etc/systemd/system/redis.service内容如下&#xff1a; [unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/…

JMeter介绍、安装配置以及快速入门

文章目录 1. JMeter简介2. JMeter安装配置3. JMeter快速入门 1. JMeter简介 Apache JMeter是一款开源的压力测试工具&#xff0c;主要用于测试静态和动态资源&#xff08;如静态文件、服务器、数据库、FTP服务器等&#xff09;的性能。它最初是为测试Web应用而设计的&#xff…

/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和}

文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 总结 引言 昨天的科大讯飞笔试做的稀烂&#xff0c;今天回来好好练习一下&#xff0c;主要是针对下述两…