022-安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

022-安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用

在这里插入图片描述

#知识点:

1、PHP留言板前后端功能实现
2、数据库创建&架构&增删改查
3、内置超全局变量&HTML&JS混编
4、第三方应用插件&传参&对象调用

Untitled

演示案例:

➢数据导入-mysql架构&库表列
➢数据库操作-mysqli函数&增删改查
➢数据接收输出-html混编&超全局变量
➢第三方插件引用-js传参&函数对象调用

#开发环境:

DW + PHPStorm + PhpStudy + Navicat Premium
DW : HTML&JS&CSS开发
PHPStorm : 专业PHP开发IDE
PhpStudy :Apache MYSQL环境
Navicat Premium: 全能数据库管理工具

PHPStorm安装

  • 官网下载:PhpStorm:JetBrains 的 PHP IDE 和代码编辑器

#数据导入-mysql架构&库表列

1、数据库名,数据库表名,数据库列名
2、数据库数据,格式类型,长度,键等

  • 需要先开启phpstudy中的中间件和数据库服务,并检查安装的php版本是否为7.0.9

Untitled

Untitled

  • 打开Navical Premium,创新新的表
  • 补充表的内容,并创建名称gbook

Untitled

Untitled

Untitled

Untitled

#数据库操作-mysqli函数&增删改查

PHP函数:连接,选择,执行,结果,关闭等
参考:https://www.runoob.com/php/php-ref-mysqli.html

常用:
mysqli_connect() 打开一个到MySQL的新的连接。
mysqli_select_db() 更改连接的默认数据库。
mysqli_query() 执行某个针对数据库的查询。
mysqli_fetch_row() 从结果集中取得一行,并作为枚举数组返回。
mysqli_close() 关闭先前打开的数据库连接。

MYSQL增删改查:
查:select * from 表名 where 列名=‘条件’;
增:insert into 表名(列名1, 列名2) value(‘列1值1’, ‘列2值2’);
删:delete from 表名 where 列名 = ‘条件’;
改:update 表名 set 列名 = 数据 where 列名 = ‘条件’;

PHPStorm项目开始的设置

  • 打开PHPStorm**,创建新项目,并把位置放在**phpstudy相关文件目录下G:\develop\safety\phpstudy_pro\WWW\dome01
  • 再创建新文件gbook.php
  • 配置PHP解释器,选择语言级别为7.0,CLI解释器找不到,需要找到小pi本地下载的php版本位置。
  • G:\develop\safety\phpstudy_pro\Extensions\php\php7.0.9nts\php.exe
  • 尝试输入<?phpecho 123; 页面正常显示即可

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

PHPStorm开始书写代码

  • 代码可以正常回写和提交

    • action="" 通常是在 HTML 表单中的 <form> 元素中设置 action 属性来指定表单提交的目标 URL。如果 action 属性为空字符串 (action=""),则表单数据将被提交到当前页面的 URL
    • 使用 @ 符号可以抑制错误报告。在给变量赋值的同时使用 @ 符号时,如果发生错误(比如未定义的变量),PHP 将不会生成错误消息,而是返回 NULL 或者一个空值。
    $u=@$_POST['username'];
    $c=@$_POST['content'];
    

Untitled

Untitled

  • 构建数据库连接,以及执行数据库插入操作

    • 发现可以插入数据,但是由于用户名和内容可以不进行添加加入数据库
    • 加一层判空,如果!empty($u)用户名为空则不写入数据即可

    Untitled

Untitled

Untitled

Untitled

代码如下

<!-- HTML 表单 -->
<form id="form1" name="form1" method="post" action=""><p><!-- 用户名输入框 -->用户名:<input type="text" name="username"></p><p>内容:</p><p><!-- 文本框 --><textarea name="content"></textarea></p><!-- 提交按钮 --><input type="submit" name="submit" id="submit" value="提交">
</form><?php
// 数据库连接参数
$dbip = 'localhost';
$dbuser = 'root';
$dbpass = 'root';
$dbname = 'dome01';// 使用 mysqli_connect() 函数建立与数据库的连接
$con = mysqli_connect($dbip, $dbuser, $dbpass, $dbname);// 检查连接是否成功
if (!$con) {die("连接错误:" . mysqli_connect_errno());
} else {// 获取用户名$u = @$_POST['username'];// 检查用户名是否非空if (!empty($u)) {// 获取内容、IP地址和用户代理信息$c = @$_POST['content'];$i = @$_SERVER['REMOTE_ADDR']; /*获取客户端 IP 地址*/$ua = @$_SERVER['HTTP_USER_AGENT'];/*获取客户端用户代理信息*/// 数据库查询语句,将数据插入到名为 gbook 的表中$sql = "INSERT INTO gbook(`username`, `content`, `ipaddr`, `uagent`) VALUES ('$u', '$c', '$i', '$ua');";// 执行数据库查询if (mysqli_query($con, $sql)) {echo "<script>alert('留言成功!')</script>";// 查询并显示留言列表$sql1 = "SELECT * FROM gbook";$data = mysqli_query($con, $sql1);while ($row = mysqli_fetch_row($data)) {echo '<hr>';echo '用户名:' . $row[0] . '<br>';echo '内容:' . $row[1] . '<br>';echo 'IP地址:' . $row[2] . '<br>';echo 'UA浏览器:' . $row[3] . '<br>';}} else {echo "<script>alert('留言失败!')</script>";}} else {// 用户名为空的情况echo "<script>alert('用户名不能为空!')</script>";}
}
?>

#数据接收输出-html混编&超全局变量

1、html混编:使HTML(JS)在PHP语言中运行

<?php echo '' ?>

2、超全局变量:
参考:
https://www.w3school.com.cn/php/php_superglobals.asphttps://www.php.net/manual/zh/language.variables.superglobals.php

G L O B A L S :这种全局变量用于在 P H P 脚本中的任意位置访问全局变量 ∗ ∗ GLOBALS:这种全局变量用于在 PHP 脚本中的任意位置访问全局变量 ** GLOBALS:这种全局变量用于在PHP脚本中的任意位置访问全局变量_SERVER:这种超全局变量保存关于报头、路径和脚本位置的信息。**
R E Q U E S T : _REQUEST: REQUEST_REQUEST 用于收集 HTML 表单提交的数据。
$_POST:广泛用于收集提交method=“post” 的HTML表单后的表单数据。
$_GET:收集URL中的发送的数据。也可用于收集提交HTML表单数据(method=“get”)
$_ENV:是一个包含服务器端环境变量的数组。
$_COOKIE:是一个关联数组,包含通过cookie传递给当前脚本的内容。
F I L E S :文件上传且处理包含通过 H T T P P O S T 方法上传给当前脚本的文件内容。 _FILES:文件上传且处理包含通过HTTP POST方法上传给当前脚本的文件内容。 FILES:文件上传且处理包含通过HTTPPOST方法上传给当前脚本的文件内容。_SESSION:是一个关联数组,包含当前脚本中的所有session内容。

POSTGET 是 HTTP 请求中常见的两种方法,用于将数据发送到服务器。它们之间的主要区别在于数据的传输方式和用途:

数据传输方式:

  • GET: 使用 URL 参数传递数据,数据附在 URL 后面,可见于 URL 地址栏。例如:http://example.com/page?name=value&age=25.
  • POST: 将数据放在请求的主体内,而不是作为 URL 的一部分。在请求头中标明数据的类型和长度。

数据大小限制:

  • GET: 由于数据附在 URL 上,对数据的长度有限制,因此适合传递小量数据。
  • POST: 由于数据放在请求主体内,相对于 GET,POST 允许传递更大量的数据。

安全性:

  • GET: 由于数据附在 URL 上,可能会被保存在浏览器历史记录、服务器日志中,不适合传递敏感信息。
  • POST: 数据在请求主体内,相对更安全,适合传递敏感信息。

缓存:

  • GET: 可以被缓存,因为请求参数都包含在 URL 中。
  • POST: 默认情况下不会被缓存,因为数据通常不会暴露在 URL 中。

使用场景:

  • GET: 用于请求数据,通常用于页面跳转,数据量较小。
  • POST: 用于提交表单、上传文件等需要较大数据或涉及敏感信息的场景。

总体而言,GET 适合用于获取数据POST 适合用于提交数据

PHPStorm项目使用全局配置文件,和函数调用

  • 创建gbook-admin.php文件和admin目录,方便执行删除等后台功能
  • 发现重复的代码太多,所以将经常用到的数据库链接操作生成config.php文件,方便管理。修改后正常访问增加,查询。

Untitled

  • 删除功能创建成功

Untitled

Untitled

<?php
// 包含数据库配置文件
include '../config.php';//由于创建的文件夹admin,其距离config.php匹配使用../// 查询所有留言
$sql1="select * from gbook";
$data=mysqli_query($con,$sql1);
// 循环遍历每条留言并显示信息和删除链接
while ($row=mysqli_fetch_row($data)){echo '<hr>';echo '用户名:'.$row[0].'<br>';echo '内容:'.$row[1].'<br>';echo 'IP地址:'.$row[2].'<br>';echo 'UA浏览器:'.$row[3].'<br>';**// 提供删除链接,传递留言用户名作为参数echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";**
}// 获取要删除的留言用户名
$delstr=@$_GET['del'];
**// 构建删除留言的 SQL 查询语句
$sql2="delete from gbook where username ='$delstr';";
// 执行删除操作
if(mysqli_query($con,$sql2)){echo "<script>alert('删除成功 !')</script>";**
}
  • 发现问题,可以将代码加一层判断当触发的时候,再进行删除操作
// 获取要删除的留言用户名
$delstr = @$_GET['del'];**// 检查是否设置了要删除的留言用户名
if (isset($delstr)) {**// 构建删除留言的 SQL 查询语句$sql2 = "DELETE FROM gbook WHERE username ='$delstr';";// 执行删除操作if (mysqli_query($con, $sql2)) {echo "<script>alert('删除成功!')</script>";}
}
  • 将初始的代码更改为两个函数。//添加留言 //显示留言

Untitled

include 'config.php';//添加留言
function add_gbook($con){$u=@$_POST['username'];if (!empty($u)) {$c = @$_POST['content'];$i = @$_SERVER['REMOTE_ADDR']; /*获取客户端 IP 地址*/$ua = @$_SERVER['HTTP_USER_AGENT'];/*获取客户端用户代理信息*/// 数据库查询语句,将数据插入到名为 gbook 的表中$sql = "insert into gbook(`username`, `content`,`ipaddr`,`uagent`) value('$u', '$c','$i','$ua');";if (mysqli_query($con, $sql)) {echo "<script>alert('留言成功!')</script>";}}
}//显示留言
function  show_gbook($con)
{$sql1="select * from gbook";$data=mysqli_query($con,$sql1);while ($row=mysqli_fetch_row($data)) {echo '<hr>';echo '用户名:' . $row[0] . '<br>';echo '内容:' . $row[1] . '<br>';echo 'IP地址:' . $row[2] . '<br>';echo 'UA浏览器:' . $row[3] . '<br>';}
}
// 调用添加留言的函数
add_gbook($con);
// 调用显示留言的函数
show_gbook($con);
  • 将删除功能中的代码进行精简
    • 把删除功能在show_gbook 中完成添加
//显示留言
function  show_gbook($con,$del)
{$sql1="select * from gbook";$data=mysqli_query($con,$sql1);while ($row=mysqli_fetch_row($data)) {echo '<hr>';echo '用户名:' . $row[0] . '<br>';echo '内容:' . $row[1] . '<br>';echo 'IP地址:' . $row[2] . '<br>';echo 'UA浏览器:' . $row[3] . '<br>';**//检查变量 $del 是否等于字符串 'del'。如果条件成立,就会生成一个包含删除链接的 HTML 代码。//提供删除链接,传递留言用户名作为参数if ($del=='del'){echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";**}}
}
add_gbook($con);
**// 调用显示留言的函数,传递 'x' 参数(防止生成删除链接)**
show_gbook($con,'x');
  • 删除功能gbook-admin.php中,包含gbook.php文件,并调用其显示留言函数,显示删除链接
  • 在执行的gbook.php时候不显示删除按钮
  • 在执行gbook-admin.php出现删除按钮

Untitled

Untitled

<?php
// 包含数据库配置文件
include '../config.php';
**// 包含处理留言的功能文件
include '../gbook.php';// 调用显示留言的函数,传递 'del' 参数,以显示删除链接
show_gbook($con,'del');**// 获取要删除的留言用户名
$delstr=@$_GET['del'];
// 检查是否设置了要删除的留言用户名
if(isset($delstr)){// 构建删除留言的 SQL 查询语句$sql2="delete from gbook where username ='$delstr';";
// 执行删除操作if(mysqli_query($con,$sql2)){echo "<script>alert('删除成功 !')</script>";}
}

#第三方插件引用-js传参&函数对象调用

引用外部 JavaScript 文件和一个简单的 JavaScript 对象及其方法。:

  1. 引用外部 JavaScript 文件:
htmlCopy code
<script src='../xxx.js'></script>

这是一个在 HTML 中引用外部 JavaScript 文件的标签。src 属性指定了 JavaScript 文件的路径,相对于当前 HTML 文件的位置。在这里,../xxx.js 表示 JavaScript 文件位于上一级目录../)并且文件名为 xxx.js

  1. JavaScript 对象及其方法:
javascriptCopy code
var obj = {value: 0,increment: function (inc) {this.value += typeof inc === 'number' ? inc : 1;// 如果传入的 inc 是数字,则将其加到 value 上,否则默认加 1}
}obj.increment();
console.log(obj.value);  // 输出:1
obj.increment(2);
console.log(obj.value);  // 输出:2

这是一个 JavaScript 对象的定义,其中包含一个属性 value 和一个方法 increment。这个方法用于递增对象的 value 属性。在调用 increment 方法后,通过 console.log 输出 obj.value 的值。

解释 increment 方法:

this.value += typeof inc === 'number' ? inc : 1; 表示将传入的参数 inc 加到 value 上。如果 inc 是数字类型,则直接加上 inc,否则默认加上 1。

示例中的调用演示了两种情况:

第一次调用 obj.increment();,由于没有传入参数,所以 value 加上默认值 1,结果为 1。

第二次调用 obj.increment(2);,传入参数 2,所以 value 加上 2,结果为 2。

  • 引用ueditor并创建对应文件夹,导入成功后,然后改变html代码
**<script src="/ueditor/ueditor.config.js">/*引入配置文件*/</script>
<script src="/ueditor/ueditor.all.js">/*引入源码文件*/</script>**
<form id="form1" name="form1" method="post" action=""<p>用户名:<input type="text" name="username"></p><p>内容:</p><p>**<textarea id="content" rows="10" cols="70" name="content" style="border:1px solid #E5E5E5;"></textarea><script type="text/javascript">UE.getEditor("content");//实例化编辑器传参,id为将要被替换的容器。</script></p>**<input type="submit" name="submit" id="submit" value="提交"></form>

Untitled

  • 192.168.137.1/gbook.php配置小皮以IP地址进行访问

Untitled

Untitled

Untitled

完整源码

gbook.php

<script src="/ueditor/ueditor.config.js">/*引入配置文件*/</script>
<script src="/ueditor/ueditor.all.js">/*引入源码文件*/</script>
<form id="form1" name="form1" method="post" action=""<p>用户名:<input type="text" name="username"></p><p>内容:</p><p><textarea id="content" rows="10" cols="70" name="content" style="border:1px solid #E5E5E5;"></textarea><script type="text/javascript">UE.getEditor("content");//实例化编辑器传参,id为将要被替换的容器。</script></p><input type="submit" name="submit" id="submit" value="提交"></form><?php
/*// 使用 mysqli_connect() 函数建立与数据库的连接
// $dbip: 数据库服务器的 IP 地址或主机名
// $dbuser: 数据库用户名
// $dbpass: 数据库用户的密码
// $dbname: 要连接的数据库名*//*$dbip='localhost';
$dbuser='root';
$dbpass='root';
$dbname='dome01';
$con=mysqli_connect($dbip,$dbuser,$dbpass,$dbname);*/
include 'config.php';//添加留言
function add_gbook($con){$u=@$_POST['username'];if (!empty($u)) {$c = @$_POST['content'];$i = @$_SERVER['REMOTE_ADDR']; /*获取客户端 IP 地址*/$ua = @$_SERVER['HTTP_USER_AGENT'];/*获取客户端用户代理信息*/// 数据库查询语句,将数据插入到名为 gbook 的表中$sql = "insert into gbook(`username`, `content`,`ipaddr`,`uagent`) value('$u', '$c','$i','$ua');";if (mysqli_query($con, $sql)) {echo "<script>alert('留言成功!')</script>";}}}//显示留言
function  show_gbook($con,$del)
{$sql1="select * from gbook";$data=mysqli_query($con,$sql1);while ($row=mysqli_fetch_row($data)) {echo '<hr>';echo '用户名:' . $row[0] . '<br>';echo '内容:' . $row[1] . '<br>';echo 'IP地址:' . $row[2] . '<br>';echo 'UA浏览器:' . $row[3] . '<br>';//检查变量 $del 是否等于字符串 'del'。如果条件成立,就会生成一个包含删除链接的 HTML 代码。//提供删除链接,传递留言用户名作为参数if ($del=='del'){echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";}}
}add_gbook($con);
// 调用显示留言的函数,传递 'x' 参数
show_gbook($con,'x');

gbook-admin.php

<?php
// 包含数据库配置文件
include '../config.php';
// 包含处理留言的功能文件
include '../gbook.php';// 调用显示留言的函数,传递 'del' 参数,以显示删除链接
show_gbook($con,'del');// 获取要删除的留言用户名
$delstr=@$_GET['del'];
// 检查是否设置了要删除的留言用户名
if(isset($delstr)){// 构建删除留言的 SQL 查询语句$sql2="delete from gbook where username ='$delstr';";
// 执行删除操作if(mysqli_query($con,$sql2)){echo "<script>alert('删除成功 !')</script>";}
}// 查询所有留言
/*$sql1="select * from gbook";
$data=mysqli_query($con,$sql1);
// 循环遍历每条留言并显示信息和删除链接
while ($row=mysqli_fetch_row($data)){echo '<hr>';echo '用户名:'.$row[0].'<br>';echo '内容:'.$row[1].'<br>';echo 'IP地址:'.$row[2].'<br>';echo 'UA浏览器:'.$row[3].'<br>';// 提供删除链接,传递留言用户名作为参数echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";
}*/

config.php

<?php
/*配置全局文件。如果有用到数据库链接的时候直接包含此文件即可*/
$dbip='localhost';
$dbuser='root';
$dbpass='root';
$dbname='dome01';
$con=mysqli_connect($dbip,$dbuser,$dbpass,$dbname);

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

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

相关文章

cad二次开发autolisp(二)

目录 一、选择集1.1 选择集的创建1.2 选择集的编辑1.3 操作选择集 二、命令行设置对话框2.1 设置图层2.2 加载线型2.3 设置字体样式2.4 设置标注样式&#xff08;了解即可&#xff09; 三、符号表3.1 简介3.2 符号表查找3.2 符号表删改增 一、选择集 定义&#xff1a;批量选择…

苹果眼镜(Vision Pro)的开发者指南(5)-主要工具

主要工具有:Xcode、Reality Composer Pro、Unity 第一部分:【用Xcode进行开发】 开始使用Xcode为visionOS进行开发。将向你展示如何在你现有的项目中添加一个visionOS目标,或者构建一个全新的应用,在Xcode预览中创建原型,以及从Reality Composer Pro中导入内容。还将分享…

ComfyUI 基础教程(十一):秋葉aaaki 整合包 一键启动

秋葉aaaki大佬的ComfyUI整合包,解压即用,一键启动,预置不少插件(工作流节点)。 1.使用方法 🌟链接:https://pan.quark.cn/s/ff5b759671d7 下载网盘文件(ComfyUI-aki-v1.1),解压缩即可。(秋葉文件包里面的controlnet和模型文件太大了,我删除了) 点击A绘世启动器.e…

elementui 表单 resetFields 方法不生效问题解决

问题 调用 elementui 官方提供的表单重置方法 resetFields 方法重置表单不生效&#xff0c;相信很多小伙伴都遇到过这个问题。 解决方法 检查代码看每个表单项的 prop 与 v-model 绑定的属性值命名是否相同&#xff0c;不相同的话就会导致 resetFields 方法不生效的问题&am…

详细分析Java中的list.foreach()和list.stream().foreach()

目录 前言1. 基本知识2. 差异之处2.1 执行顺序2.2 串行并行2.3 复杂数据处理2.4 CRUD集合2.5 迭代器 3. 总结4. 彩蛋 前言 典故来源于项目中使用了两种方式的foreach&#xff0c;后面尝试体验下有何区别&#xff01; 先看代码示例&#xff1a; 使用List的forEach&#xff1a…

Tomcat 简介安装

目录 1、概念介绍 Tomcat 组件 HTTP 请求过程 Tomcat 目录结构 Tomcat 命令 配置文件说明 2、安装环境 安装JDK 安装Tomcat 创建管理用户 3、搭建虚拟主机 1、概念介绍 端口&#xff1a;8080 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器, 按照 Sun 提供…

全双工通信协议:WebSocket

全双工通信协议&#xff1a;WebSockets 前言何时使用WebSocketsWebSocket APITextWebSocketHandlerWebSocketConfigurerWebSocket握手配置服务器允许的来源心跳包Java WebSocket API案例一&#xff1a;前端发送消息并接收后端响应案例二&#xff1a;模拟后端向前端推送消息案例…

Shell 虚拟机基线配置脚本示例

这是一个配置虚拟机基线的示例&#xff0c;包含关闭防火墙、禁用SElinux、设置时区、安装基础软件等。 这只是一个简单的模板&#xff0c;基线配置方面有很多&#xff0c;后续可以按照这个模板去逐步添加 代码示例 [rootbogon ~]# cat bastic.sh #!/bin/bashRED\E[1;31m GRE…

【C++】C++入门(一)

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. C关键字3. 命名空间3.1 命名空间定义3.2 命名空间的使用 4. C输入&输出 1. 前言 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0…

【产品交互】超全面B端设计规范总结

不知不觉已经深耕在B端这个领域3年有余&#xff0c;很多人接触过B端后会觉得乏味&#xff0c;因为B端的设计在视觉上并没有C端那么有冲击力&#xff0c;更多的是结合业务逻辑&#xff0c;设计出符合业务需求的交互&#xff0c;以及界面排版的合理性&#xff0c;达到产品的可用性…

助力工业焊缝质量检测,YOLOv7【tiny/l/x】不同系列参数模型开发构建工业焊接场景下工件表面焊接缺陷检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在工件表面焊接场景下常常有对工件表面缺陷智能自动化检测识别的需求&#xff0c;工业AI结合落地是一个比较有潜力的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行…

菜鸡后端的前端学习记录

前言 记录一下看视频学习前端的的一些笔记&#xff0c;以前对Html、Js、CSS有一定的基础&#xff08;都认得&#xff0c;没用过&#xff09;&#xff0c;现在不想从头再来了&#xff0c;学学Vue框架&#xff0c;不定时更新&#xff0c;指不定什么时候就鸽了。。。。 Vue2 01…

SQL Server多数据表之间的数据查询和分组查询

文章目录 一、多数据表之间的数据查询1.1内连接查询&#xff08;Inner join&#xff09;1.2 左外连接 (LEFT JOIN):1.3右外连接 (RIGHT JOIN):1.4. 全外连接 (FULL OUTER JOIN):1.5 交叉连接 (CROSS JOIN):1.6 自连接 (SELF JOIN):1.7 子查询: 二、分组查询2.1 分组查询2.2 查询…

静态分析C语言生成函数调用关系的利器——cflow(二)

大纲 环境准备选择项目分析代码简单分析高级分析坑&#xff1a;不能显示main函数所有调用函数的调用栈坑2&#xff1a;重定义错误坑3&#xff1a;缺失编译时产生的文件坑4&#xff1a;缺失工程的头文件包含路径指定坑5&#xff1a;操作系统的坑只存在于windows操作系统上的文件…

rabbitmq基础-java-1、快速入门

1、AMQP AMQP&#xff0c;即Advanced Message Queuing Protocol&#xff08;高级消息队列协议&#xff09;&#xff0c;一个提供统一消息服务的应用层标准高级消息队列协议&#xff0c;是应用层协议的一个开放标准&#xff0c;为面向消息的中间件设计&#xff0c;基于此协议的客…

Parallels Desktop 19 mac 虚拟机软件 兼容M1 M2

Parallels Desktop 19 for Mac 是一款适用于 macOS 的虚拟机软件。无需重启即可在 Mac 上运行 Windows、Linux 等系统&#xff0c;具有速度快、操作简单且功能强大的优点。包括 30 余种实用工具&#xff0c;可简化 Mac 和 Windows 上的日常任务。 软件下载&#xff1a;Parallel…

Linux目录结构:深入理解与命令创建指南

目录 摘要&#xff1a; 一.linux目录介绍 1.目录结果设置标准 2.目录结构介绍 二.linux命令 1.常见命令 # 与 $ 提示的区别 ifconfig查看ip地址 su 命令格式 cd 目录查看 查看文件内容 创建目录及文件 复制和移动 tar find chmod 2. vim一般使用 摘要&#xff1a; 前…

基于中文垃圾短信数据集的经典文本分类算法实现

垃圾短信的泛滥给人们的日常生活带来了严重干扰&#xff0c;其中诈骗短信更是威胁到人们的信息与财产安全。因此&#xff0c;研究如何构建一种自动拦截过滤垃圾短信的机制有较强的实际应用价值。本文基于中文垃圾短信数据集&#xff0c;分别对比了朴素贝叶斯、逻辑回归、随机森…

CentOS使用

1.使用SSH连接操作虚拟机中的CentOS 1.1 配置静态IP 想要使用ssh连接就需要获取虚拟机的IP&#xff0c;但若DHCP&#xff0c;则每次连接都要确定虚拟机的IP是否变化&#xff0c;故直接分配一个静态IP vmware中&#xff0c;编辑–虚拟网络编辑器&#xff0c;记住下方的子网掩…

windows和linux下SHA1,MD5,SHA256校验办法

今天更新android studio到Android Studio Hedgehog | 2023.1.1时&#xff0c;发现提示本机安装的git版本太老&#xff0c;于是从git官网下载最新的git。 git下载地址&#xff1a; https://git-scm.com/ 从官网点击下载最新windows版本会跳转到github仓库来下载发布的git&…