当前位置: 首页 > news >正文

网安入门之PHP后端基础

PHP 基本概念详解

PHP是一种服务器端脚本语言,常用于动态网站开发和 web 应用程序。以下是 PHP 的基本概念与特点的详细说明:

1. PHP 文件的默认文件扩展名
  • PHP 文件的扩展名通常为 .php,例如 index.php
  • PHP 文件可以包含 PHP 代码、HTML、CSS 和 JavaScript。
  • Web 服务器会通过 PHP 解析器处理 .php 文件中的 PHP 代码,并将结果返回给浏览器。
2. PHP 脚本的位置

PHP 脚本可以嵌套在 HTML 文档的任意位置。典型的嵌套示例:

<html>
<body><h1>欢迎访问我的网站</h1><?phpecho "这是一个 PHP 脚本块。";?>
</body>
</html>

也可以使用纯 PHP 脚本文件,无需包含 HTML:

<?phpecho "这是一个纯 PHP 文件。";
?>
3. PHP 脚本标记

PHP 脚本以 <?php 开头,以 ?> 结束。示例:

<?phpecho "Hello, World!";
?>

注意:短标签 <? ... ?> 在某些服务器配置中可能被禁用,建议使用完整标签 <?php ... ?>

4. PHP 语句结束标记

PHP 中的每个语句必须以分号 (;) 结束。如果遗漏分号,可能导致解析错误。

示例:

<?phpecho "这是第一条语句。";echo "这是第二条语句。";
?>
5. PHP 注释语法

**单行注释:**使用 //# 注释单行代码:

<?php// 这是一个单行注释# 这是另一个单行注释echo "Hello, PHP!";
?>

**多行注释:**使用 /* 开始,*/ 结束,适用于多行:

<?php/* 这是一个多行注释用于解释代码的功能或逻辑 */echo "多行注释结束后运行的代码。";
?>
6. PHP 是一门弱类型语言

弱类型语言意味着变量的类型可以根据赋值自动转换,无需显式声明类型。PHP 使用 $ 符号定义变量,类型可以是字符串、整数、浮点数、数组等:

<?php$text = "这是一个字符串";  // 字符串$number = 42;            // 整数$price = 19.99;          // 浮点数
?>

PHP 会根据上下文自动调整变量类型:

<?php$x = "5";$y = 3;$sum = $x + $y;  // $x 被自动转换为整数echo $sum;       // 输出 8
?>
7. PHP 的特点
  • 跨平台:PHP 可以运行在 Windows、Linux 和 macOS 等多种操作系统上。
  • 开源:PHP 是免费的,且有广泛的社区支持。
  • 嵌套能力:PHP 可与 HTML 紧密结合,用于生成动态内容。
  • 丰富的扩展库:PHP 提供大量扩展,用于处理数据库、文件、网络协议等。

PHP 中的变量及其类型详解

1. PHP 中变量的定义

PHP 中的变量以 $ 开头,后跟变量名。变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。变量名区分大小写。

示例:

<?php$name = "Alice"; // 字符串$age = 25;       // 整数
?>
2. PHP 变量的类型

PHP 是弱类型语言,变量的类型可以根据赋值自动确定。以下是 PHP 支持的主要变量类型:


1) 字符串 (String)

用于存储文本数据。字符串可以用单引号 ' 或双引号 " 包裹。双引号支持变量解析和转义字符,单引号不支持变量解析。

示例:

<?php$str1 = "Hello, PHP!";  // 双引号字符串$str2 = 'Hello, World!'; // 单引号字符串$name = "Alice";echo "My name is $name"; // 输出:My name is Aliceecho 'My name is $name'; // 输出:My name is $name
?>

2) 整数 (Integer)

用于存储整数值(正数、负数或 0)。必须是无小数点的数字。支持十进制、八进制(以 0 开头)、十六进制(以 0x 开头)和二进制(以 0b 开头)。

示例:

<?php$int1 = 42;       // 十进制$int2 = 0b101010; // 二进制$int3 = 0x2A;     // 十六进制$int4 = 052;      // 八进制echo $int1;       // 输出:42
?>

3) 浮点数 (Float)

用于存储带小数点的数字或科学计数法表示的数字。

示例:

<?php$float1 = 3.14159;   // 小数$float2 = 1.2e3;     // 科学计数法 (1.2 * 10^3)$float3 = 7E-10;     // 科学计数法 (7 * 10^-10)echo $float1;        // 输出:3.14159
?>

4) 布尔值 (Boolean)

用于存储逻辑值:truefalse。常用于条件判断。

示例:

<?php$isPHPFun = true;$isHard = false;if ($isPHPFun) {echo "PHP is fun!";}
?>

5) 数组 (Array)

数组用于存储多个值。PHP 中数组分为以下三类:

索引数组 (Indexed Array): 使用数字索引。

关联数组 (Associative Array): 使用键值对,键为字符串。

多维数组 (Multidimensional Array): 包含多个数组作为其元素的数组。

a) 索引数组

元素按数字索引从 0 开始。

示例:

<?php$fruits = array("Apple", "Banana", "Cherry");echo $fruits[0]; // 输出:Apple
?>

也可以使用 [] 语法定义:

<?php$fruits = ["Apple", "Banana", "Cherry"];echo $fruits[1]; // 输出:Banana
?>
b) 关联数组

元素使用字符串作为键。

示例:

<?php$person = array("name" => "Alice","age" => 25,"city" => "New York");echo $person["name"]; // 输出:Alice
?>
c) 多维数组

数组的元素可以是另一个数组。

示例:

<?php$matrix = array(array(1, 2, 3),array(4, 5, 6),array(7, 8, 9));echo $matrix[1][2]; // 输出:6
?>

6) 对象 (Object)

PHP 使用类和对象支持面向对象编程。

示例:

<?phpclass Person {public $name;public $age;function __construct($name, $age) {$this->name = $name;$this->age = $age;}function greet() {return "Hello, my name is $this->name and I am $this->age years old.";}}$person = new Person("Alice", 25);echo $person->greet(); // 输出:Hello, my name is Alice and I am 25 years old.
?>

7) NULL

NULL 是一个特殊的值,用于表示变量没有值。可以通过赋值 NULL 来清空变量。

示例:

<?php$var = "Hello, PHP!";$var = NULL; // 现在 $var 没有值
?>

3. 变量类型的动态转换

PHP 会根据上下文自动转换变量类型(类型转换)。

示例:

<?php$x = "5";$y = 10;$sum = $x + $y; // 自动将 $x 转换为整数echo $sum;      // 输出:15
?>

如何自定义 PHP 变量

在 PHP 中,变量是用来存储数据的标识符,可以是任何类型的值,例如字符串、整数、数组等。以下是自定义变量的详细规则和示例:

1. 使用 **$** 定义变量

所有变量必须以美元符号($)开头。后面紧跟变量的名称,这个名称可以是一个有效的标识符。赋值时,使用等号 = 将值赋给变量。

示例

<?php$name = "Alice";  // 定义变量 $name,并赋值为字符串 "Alice"$age = 25;        // 定义变量 $age,并赋值为整数 25$isStudent = true; // 定义变量 $isStudent,并赋值为布尔值 true
?>

2. 变量名称规则
(1) 变量名称不能以数字开头

变量名必须以字母或下划线开头。

不允许以下格式:

<?php$1var = "Invalid"; // 错误$123name = "Invalid"; // 错误
?>

正确的格式:

<?php$var1 = "Valid"; // 正确$_name = "Valid"; // 正确
?>
(2) 变量名称只能包含字母、数字和下划线

有效字符包括字母 (A-Z, a-z)、数字 (0-9) 和下划线 _

不允许的格式:

<?php$my-var = "Invalid"; // 错误,包含非法字符 "-"$my var = "Invalid"; // 错误,包含空格
?>

正确的格式:

<?php$my_var = "Valid"; // 正确,使用下划线$var123 = "Valid"; // 正确,包含数字
?>
(3) 变量名称对大小写敏感

PHP 中的变量名称是区分大小写的。

示例:

<?php$name = "Alice";$Name = "Bob";echo $name; // 输出:Aliceecho $Name; // 输出:Bob
?>

$name$Name 是两个不同的变量。

3. 变量的赋值与初始化

变量在第一次赋值时被初始化。PHP 中未赋值的变量默认为 NULL,但建议显式赋值。

示例

<?php$count = 10;      // 定义并初始化变量$text = "Hello";  // 定义字符串变量$empty;           // 未初始化变量,默认为 NULLecho $empty;      // 输出为空
?>

4. 动态变量

PHP 支持动态变量,即变量的名称可以由另一个变量的值确定。

示例:

<?php$varName = "greeting"; // 定义变量名$$varName = "Hello, World!"; // 定义动态变量echo $greeting; // 输出:Hello, World!
?>

解释:$$varName 等价于 $greeting

5. 命名约定与最佳实践

遵循清晰和语义化的命名规则:变量名应该能够描述其用途。

不推荐:

<?php$x = "Alice"; // 变量名没有意义$y = 25;      // 变量名模糊
?>

推荐:

<?php$userName = "Alice"; // 清晰的变量名$userAge = 25;       // 变量名具有语义
?>

使用驼峰式命名下划线命名

驼峰式命名:$userName, $productPrice

下划线命名:$user_name, $product_price

避免使用保留字作为变量名:如 class, function, echo 等。

6. 变量的作用域

全局变量:定义在函数外部,作用域为整个脚本。

局部变量:定义在函数内部,仅在函数内可用。

示例:

<?php$globalVar = "I am global"; // 全局变量function testScope() {$localVar = "I am local"; // 局部变量echo $localVar; // 输出:I am local}testScope();echo $globalVar; // 输出:I am global// echo $localVar; // 错误:未定义
?>

PHP 预定义超全局变量

PHP 的 超全局变量是一组预定义的变量,可以在脚本的任何地方使用,而无需显式地声明为 global。它们为处理用户输入、服务器环境信息、会话数据等提供了便利。

1. $GLOBALS

功能:包含所有全局作用域的变量。它是一个超全局数组,变量名作为键。作用:在函数或方法中访问全局变量。

示例

<?php$x = 10;$y = 20;function calculateSum() {$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; // 使用$GLOBALS访问全局变量}calculateSum();echo $z; // 输出:30
?>

2. $_SERVER

功能:存储服务器和执行环境的信息。它是一个数组,包含诸如请求头、路径和脚本位置等信息。

常用键值

$_SERVER['PHP_SELF']:当前执行脚本的文件名。

$_SERVER['SERVER_NAME']:服务器的主机名。

$_SERVER['HTTP_HOST']:当前请求的主机头。

$_SERVER['REMOTE_ADDR']:客户端的 IP 地址。

$_SERVER['REQUEST_METHOD']:请求方法(如 GET、POST)。

$_SERVER['QUERY_STRING']:URL 中的查询字符串。

  • 示例
<?phpecho $_SERVER['PHP_SELF']; // 输出当前脚本名echo $_SERVER['SERVER_NAME']; // 输出服务器名echo $_SERVER['REMOTE_ADDR']; // 输出客户端 IP
?>

3. $_GET(很常见)

功能:通过 URL 的查询字符串传递的变量。

用途:接收通过 HTTP GET 方法发送的数据。

特点

数据附加在 URL 后(如 example.com/index.php?name=Alice)。适合小型、非敏感数据的传递。

示例

<?php// URL: example.com/index.php?name=Alice&age=25$name = $_GET['name']; // 获取 URL 中的 name 参数$age = $_GET['age'];   // 获取 URL 中的 age 参数echo "Name: $name, Age: $age"; // 输出:Name: Alice, Age: 25
?>

4. $_POST(网安在抓包的时候经常看到POST请求)

功能:通过 HTTP POST 方法传递的变量。

用途:接收表单中通过 POST 方法发送的数据。

特点:数据不会显示在 URL 中,适合传递大量或敏感数据。

示例

<?php// 表单提交后接收数据if ($_SERVER['REQUEST_METHOD'] === 'POST') {$username = $_POST['username'];$password = $_POST['password'];echo "Username: $username, Password: $password";}
?>

5. $_REQUEST

功能:包含通过 GET、POST 或 COOKIE 方法传递的所有输入。

用途:访问用户输入的通用方法,但推荐使用 $_GET 和 $_POST 来明确区分来源。

示例

<?php$name = $_REQUEST['name']; // 可能来自 GET 或 POSTecho "Hello, $name!";
?>

6. $_SESSION

功能:存储会话变量,用于跨页面维持用户数据。特点

需要启动会话:session_start()

数据存储在服务器端。

数据会在浏览器关闭后失效,除非配置会话持续时间。

示例

<?phpsession_start(); // 开启会话$_SESSION['user'] = "Alice"; // 设置会话变量echo $_SESSION['user']; // 输出:Alice
?>

7. $_COOKIE

功能:通过客户端存储的小型数据,用于持久化跨会话的信息。

特点

数据存储在客户端浏览器中。

设置 Cookie 使用 setcookie()

示例

<?php// 设置一个 Cookiesetcookie("username", "Alice", time() + 3600); // 1小时有效echo $_COOKIE['username']; // 输出:Alice
?>

8. $_FILES

功能:处理文件上传的数据。

用途:在表单中上传文件,并获取文件信息。

常用键值

$_FILES['file']['name']:文件名。

$_FILES['file']['tmp_name']:临时文件的路径。

$_FILES['file']['size']:文件大小。

$_FILES['file']['error']:错误代码。

示例

<?phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {$fileName = $_FILES['file']['name'];$tmpPath = $_FILES['file']['tmp_name'];move_uploaded_file($tmpPath, "uploads/" . $fileName); // 保存文件echo "File uploaded: $fileName";}
?>

总结表

超全局变量用途备注
$GLOBALS全局作用域的所有变量用于函数中访问全局变量
$_SERVER服务器和环境信息提供请求头、服务器信息等
$_GETURL 查询字符串的数据数据可见于 URL,适合小型数据传递
$_POST表单通过 POST 提交的数据数据不显示在 URL,适合敏感数据传递
$_REQUESTGET、POST 或 COOKIE 数据的集合不推荐用于明确来源的数据
$_SESSION会话变量数据存储在服务器端,需启动会话
$_COOKIE客户端存储的小型数据数据存储于客户端浏览器
$_FILES文件上传相关信息处理文件上传表单的数据

HTTP GET 和 POST 方法的区别

在 HTTP 协议中,GET 和 POST 是最常用的两种请求方法,用于客户端与服务器之间的数据交互。虽然它们的功能相似,但在用途和技术实现上有显著差异。

1. 数据传输方式

GETPOST
通过 URL 的查询字符串传输数据通过请求体(Body)传输数据
数据直接附加在 URL 后,形式为 example.com?name=Alice&age=25
数据不显示在 URL 中,嵌入请求体,形式不可见。

2. 数据长度限制

GETPOST
数据长度有限制,因为 URL 的长度受到浏览器和服务器的限制(通常为 2048 个字符)。无明显长度限制,可传输大量数据,具体限制取决于服务器设置。

3. 数据安全性

GETPOST
安全性较低,因为数据包含在 URL 中,容易被拦截或记录在浏览历史中。相对安全,数据存储在请求体中,不会出现在浏览器地址栏,但仍需使用 HTTPS 保护。

4. 数据用途

GETPOST
用于请求数据。典型用途是获取资源,如网页或 API 数据。用于提交数据。典型用途是提交表单或上传文件。
示例:查询用户信息。示例:登录、注册。

5. 可缓存性

GETPOST
可以被缓存。浏览器和中间代理服务器会缓存 GET 请求。不会被缓存。每次都会提交新的请求。

6. 浏览器行为

GETPOST
可通过浏览器的地址栏直接输入或保存为书签。不能通过地址栏直接输入,也不能保存为书签。
可被搜索引擎索引。不会被搜索引擎索引。

7. 常用场景

GETPOST
适用于查询操作,如搜索页面或获取资源信息。适用于需要对服务器进行修改或提交敏感数据的操作。
示例:在线搜索、分页。示例:提交表单、上传文件。

8. 示例代码

GET 示例
<?php// URL: example.com/index.php?name=Alice&age=25echo "Name: " . $_GET['name']; // 获取 GET 参数echo "Age: " . $_GET['age'];
?>
POST 示例
<form method="post" action="submit.php">Name: <input type="text" name="name">Age: <input type="text" name="age"><input type="submit">
</form>
<?phpecho "Name: " . $_POST['name']; // 获取 POST 参数echo "Age: " . $_POST['age'];
?>

总结表

特点GETPOST
数据传输方式数据附加在 URL 后,通过查询字符串传输数据存储在请求体中,隐式传输
数据长度限制有限,依赖于 URL 长度限制理论上无限,但受服务器配置影响
数据安全性较低,数据可被记录或拦截较高,数据不可见,但需要 HTTPS 保护
数据用途适合获取资源或查询适合提交表单或敏感数据
可缓存性可以缓存不会缓存
浏览器支持支持通过地址栏直接访问,URL 可分享不支持通过地址栏访问,无法直接分享
常见用途搜索、查询、分页登录、注册、提交表单、文件上传

PHP函数

1. echo

作用:输出字符串或变量到页面。用途:在调试时显示变量值,生成页面内容。

特点

不返回值,直接输出。

可输出多个字符串,逗号分隔。

示例

$message = "Hello, World!";
echo $message; // 输出 Hello, World!
echo "This ", "is ", "a ", "test."; // 输出 This is a test.

2. var_dump

作用:显示变量的详细信息,包括类型和值。

用途:调试时分析变量内容和数据结构。

特点

可显示复杂数据类型(如数组、对象)。

输出包括变量类型和值,调试时非常实用。

示例

$array = [1, "PHP", true];
var_dump($array); 
// 输出:
// array(3) {
//   [0]=> int(1)
//   [1]=> string(3) "PHP"
//   [2]=> bool(true)
// }

3. setcookie

作用:在客户端设置一个 cookie。

用途:用于会话管理、跟踪用户状态。

参数

1. Cookie 名称。
2. Cookie 值。
3. 过期时间(时间戳)。
4. 可选路径、域名和安全选项。

示例

setcookie("user", "Alice", time() + 3600, "/"); 
// 设置一个名为 user 的 cookie,有效期为 1 小时。

4. session_start

作用:启动一个会话,或恢复现有会话。

用途:用于保存用户状态信息,例如登录状态。

特点

必须在任何输出之前调用。

默认会话数据存储在服务器上,通过客户端的 session ID 匹配。

示例

session_start(); // 开启会话
$_SESSION['user'] = 'Alice'; // 设置会话变量
echo $_SESSION['user']; // 输出会话变量值

补充的安全相关 PHP 函数

在学习和实践网络安全时,这些 PHP 函数可以帮助保护应用程序免受常见漏洞的影响,并用于开发安全的代码。以下是详细的介绍:

1. 文件操作相关

**file_get_contents()**

作用:读取文件内容并以字符串形式返回。

用途:用于检测本地文件包含漏洞(LFI)或远程文件包含漏洞(RFI)。

示例

$content = file_get_contents("config.txt"); 
echo $content; // 输出文件内容

**file_put_contents()**

作用:将数据写入文件(覆盖或追加)。

用途:测试文件操作漏洞或用于日志记录。

示例

file_put_contents("log.txt", "Unauthorized access detected\n", FILE_APPEND);

**unlink()**

作用:删除指定文件。

用途:用于清理敏感文件或测试文件删除权限。

示例

if (file_exists("temp.txt")) {unlink("temp.txt"); // 删除临时文件
}

2. 用户输入处理

**htmlspecialchars()**

作用:将 HTML 特殊字符转换为实体,防止 HTML 注入。

用途:防止 XSS(跨站脚本攻击)。

示例

$user_input = '<script>alert("XSS")</script>';
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); 
// 输出:&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;

**strip_tags()**

作用:移除字符串中的 HTML 和 PHP 标签。

用途:用于对用户输入的基本清理。

示例

$input = '<p>Hello <b>World</b></p>';
echo strip_tags($input); // 输出:Hello World

**addslashes()**

作用:在字符串中的引号前添加反斜杠,转义特殊字符。

用途:保护数据免受 SQL 注入攻击。

示例

$unsafe_data = "Alice's home";
$safe_data = addslashes($unsafe_data);
echo $safe_data; // 输出:Alice\'s home

3. 数据库操作

**mysqli_real_escape_string()**

作用:转义 SQL 查询中的特殊字符。

用途:防止 SQL 注入。

示例

$conn = new mysqli("localhost", "user", "password", "database");
$unsafe_input = "' OR '1'='1";
$safe_input = $conn->real_escape_string($unsafe_input);
$query = "SELECT * FROM users WHERE username = '$safe_input'";

**PDO::prepare()**

作用:使用预编译语句,防止 SQL 注入。

用途:推荐的安全数据库查询方法。

示例

$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "password");
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $unsafe_input]);

4. 加密与解密

**hash()**

作用:生成字符串的哈希值。

用途:用于存储密码或验证数据完整性。

示例

$password = "securepassword";
$hashed_password = hash("sha256", $password);

**password_hash()**

作用:生成强散列密码。

用途:安全地存储用户密码。

示例

$password = "securepassword";
$hash = password_hash($password, PASSWORD_DEFAULT);

**openssl_encrypt()**** / ****openssl_decrypt()**

作用:加密或解密数据。

用途:用于传输敏感信息的保护。

示例

$data = "Sensitive Information";
$key = "encryptionkey";
$encrypted = openssl_encrypt($data, "AES-128-ECB", $key);
$decrypted = openssl_decrypt($encrypted, "AES-128-ECB", $key);

5. 网络交互与响应

**header()**

作用:发送原始 HTTP 报头。

用途:用于设置重定向、防止缓存、或指定内容类型。

示例

header("Location: login.php");

**http_response_code()**

作用:设置 HTTP 响应状态码。

用途:用于返回特定的 HTTP 状态(如 404, 500)。

示例

http_response_code(404);
echo "Page not found";

6. 全局变量管理

**$GLOBALS**

作用:访问所有全局变量。

用途:在需要跨函数共享数据时使用。

示例

$x = 10;
function test() {echo $GLOBALS['x']; // 输出 10
}

**session_start()**

作用:启动或恢复会话。

用途:管理用户登录状态。

示例

session_start();
$_SESSION['user'] = 'Alice';

总结

以上函数涵盖了文件操作、用户输入过滤、数据库操作、加密解密和网络交互等安全开发的关键领域。结合这些函数,您可以有效防范常见的安全漏洞(如 XSS、SQL 注入、文件包含攻击等),并提高 PHP 应用的安全性。

相关文章:

网安入门之PHP后端基础

PHP 基本概念详解 PHP是一种服务器端脚本语言&#xff0c;常用于动态网站开发和 web 应用程序。以下是 PHP 的基本概念与特点的详细说明&#xff1a; 1. PHP 文件的默认文件扩展名 PHP 文件的扩展名通常为 .php&#xff0c;例如 index.php。PHP 文件可以包含 PHP 代码、HTML…...

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter

1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt&#xff08;Anaconda&#xff09;就会打开类似cmd的命令终端窗口&#xff0c;默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…...

【C#特性整理】C#特性及语法基础

1. C#特性 1.1 统一的类型系统 C#中, 所有类型都共享一个公共的基类型. 例如&#xff0c;任何类型的实例都可以通过调用ToString方法将自身转换为一个字符串 1.2 类和接口 接口: 用于将标准与实现隔离, 仅仅定义行为,不做实现. 1.3 属性、方法、事件 属性: 封装了一部分对…...

龙蜥 配置本地yum源8.6----亲测

系统版本: 说明:丫丫的,内网服务安装了个龙蜥操作系统。内网不能访问互联网,所以就需要挂载yum源 用的以前的方法挂载,一直报错 [Couldnt open file /mnt/anolisos/repodata/repomd.xml] yum挂载的时候报错,奇葩!!!,龙蜥的挂载方法好像不一样。 解决: 一、上传并挂…...

Xshell日志录制

步骤 1&#xff1a;设置日志文件位置 打开 Xshell 软件&#xff0c;选择目标会话&#xff08;或者创建一个新的会话&#xff09;。右键点击会话名称&#xff0c;选择“属性”。在会话属性窗口中&#xff0c;找到“日志”选项卡。勾选“启用日志记录”。在“文件名”中设置日志…...

vue下载和上传的地址动态ip地址配置方法

vue3结合element-plus实现【下载文件】和【上传文件】的动态ip地址配置 效果图 一、修改【文件上传】静态地址 1、首先引入axios import axios from "/utils/request"; import { getToken } from "/utils/auth"; 定义 const importDialogVisible ref(…...

动手做计算机网络仿真实验入门学习

打开软件 work1 添加串行接口模块&#xff0c;先关电源&#xff0c;添加之后再开电源 自动选择连接 所有传输介质 自动连接 串行线 绿色是通的&#xff0c;红色是不通的。 显示接口。se是serial串行的简写。 Fa是fast ethernet的简写。 为计算机配置ip地址&#xff1a; 为服…...

LeetCode 面试题 17.10. 主要元素

LeetCode 面试题 17.10. 主要元素 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组&#xff0c;找出其中的主要元素。若没有&#xff0c;返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 示例 1&#xff1a; 输入&#xff1a;[1,2,5,9,5,9,5…...

Hive之import和export使用详解

在hive-0.8.0后引入了import/export命令。 Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置&#xff0c;并且导出数据可以被移动到另一个hadoop集群或hive实例&#xff0c;并且可以通过import命令导入数据。 当导出一个分区表&#xff0c;原始数据可能在hdf…...

SpringBoot数据字典字段自动生成对应code和desc

效果&#xff1a;接口会返回orderType&#xff0c;但是这个orderType是枚举的类型&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff09;&#xff0c;我想多返回一个orderTypeDesc给前端展示&#xff0c;这样前端就可以直接拿orderTypeDesc使用了。 1. 定义注解 …...

HTML——16.相对路径

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><a href"../../fj1/fj2/c.html" target"_blank">链接到c</a><!--相对路径&#xff1a;-->…...

字——位级运算与有无符号数之间的比较

前言 本文整理和归纳《深入理解计算机系统》这本书的内容&#xff0c;但本文不会继续长篇大论地去将所有内容都总结&#xff0c;而是总结笔者认为容易遗忘或混淆或表述不清的内容。 字 首先字这个概念对于学习过《计算机体系结构》或《操作系统》的同学都不陌生&#xff0c;…...

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例

本文介绍了7个Python爬虫小案例&#xff0c;包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息&#xff0c;帮助读者理解并实践Python爬虫基础知识。 包含编程资料、学习路线图、源代码、软件安装包等&#xff01;【…...

‘Optional. get()‘ without ‘isPresent()‘ check

在Java中&#xff0c;Optional类被引入主要是为了解决NullPointerException的问题&#xff0c;它提供了一种更优雅的方式来处理可能为null的情况。Optional.get()方法用于获取Optional实例中包含的值&#xff0c;但如果Optional实例是空的&#xff08;即没有值&#xff09;&…...

015-spring-动态原理、AOP的xml和注解方式

强制使用cglib动态代理 spring-AOP的使用...

统计颜色Count Color(POJ2777)题解

有一个长度为L厘米板&#xff0c;L是一个正整数&#xff0c;所以我们可以把它均匀地划分成L个部分&#xff0c;分别从左到右编号为1&#xff0c;2……L&#xff0c;每一个部分长度都为1厘米。现在我们必须给每个部分涂色&#xff0c;一个部分一种颜色&#xff0c;要求完成以下两…...

Nginx 配置 SSL(HTTPS)详解

Nginx作为一款高性能的HTTP和反向代理服务器&#xff0c;自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL&#xff0c;实现HTTPS的访问。 随着互联网安全性的日益重要&#xff0c;HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务…...

Day10补代码随想录 理论基础|232.用栈实现队列|225.用队列实现栈|20.有效的括号|1047.删除字符串中的所有相邻重复项

栈和队列理论基础 抽象认识 栈是先进后出(FIFO)&#xff0c;队列是先进先出(LIFO) 队首(先进))队尾(后进)栈顶(后进)栈底(先进) 栈(Stack) 只在一端进行进出操作(只在一端进一端出)像个篮球框&#xff0c;取用篮球从一端进出。 /进栈 int a[1000];//足够大的栈空间 int top-1…...

pytorch基础之注解的使用--003

Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题&#xff0c;这里专门写一篇文章进行讲解。包括如何自定义注解&#xff0c;以及注意事项&#xff0c;相信JAVA中很多朋友业写过&#xff0c;但是今天写的是Python哦。。。 2.定义 在 Python…...

2024-12-30-g++

title: 探秘 g&#xff1a;C 编程的得力编译器 date: ‘2024-12-30’ category: blog tags: gC 编程编译器技术代码生成与优化 sig: compiler archives: ‘2024-12’ author:way_back summary: g 作为专门用于 C 语言的编译器&#xff0c;在 C 开发领域占据关键地位。它凭借对…...

互联网十万个为什么之什么是微服务

微服务&#xff08;Microservices&#xff09;是一种软件架构设计模式&#xff0c;它将应用程序分解为小型、自治的服务单元&#xff0c;这些服务单元可以独立部署、扩展和维护&#xff0c;其中每一个服务单元也都是一个微服务。 基于微服务形成的软件架构风格称为微服务架构&…...

mysql子查询

子查询是嵌套在另一个 SELECT, INSERT, UPDATE, 或 DELETE查询的 SQL 查询。子查询可以在 WHERE 子句中、FROM 子句或 SELECT 列表中出现。 以下是一些使用 MySQL 子查询的常见示例&#xff1a; 1.在 WHERE 子句中使用子查询&#xff1a; SELECT * FROM Employees WHERE s…...

智能故障诊断和寿命预测期刊推荐

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...

根据语言变化动态更新图片资源方案

根据语言变化动态更新图片资源方案 一、需求描述二、关于 Locale三、实现方案3.1 方案一&#xff08;不可行&#xff09;3.2 方案二&#xff08;不可行&#xff09;3.3 方案三 一、需求描述 Android 项目中引导页图片包含文字信息&#xff0c;由于应用是适配了三种语言&#x…...

Python世界:数据结构易错点小结

Python世界&#xff1a;数据结构易错点小结 总体list列表tuple元组Stringdict字典mapset 部分笔记汇总&#xff0c;持续刷新中。区别于其他笔记之处在于&#xff0c;主要记录易错点坑点。 总体 数据结构声明辨析 list []tuple () const listditc {} hashset res set(list) 数…...

Linux | Ubuntu零基础安装 nvm 管理nodejs

目录 介绍 项目地址 前置工具 安装 查看环境配置 更新环境变量 查看版本 查看 nodejs包 列表 安装nodejs 查看 nvm 状态 测试 nodejs 介绍 nvm是什么&#xff1f;你可以把它理解成 nodejs的管理软件&#xff0c;方便快速切换nodejs的版本&#xff0c;达到兼容状态 …...

flask后端开发(3):html模板渲染

目录 渲染模板html模板获取路由参数 gitcode地址&#xff1a; https://gitcode.com/qq_43920838/flask_project.git 渲染模板 这样就能够通过html文件来渲染前端&#xff0c;而不是通过return了 html模板获取路由参数...

HAL 库句柄

一、命名方式&#xff1a;句柄是h为首字母&#xff0c;后面接协议名称 比如&#xff1a;huart、hadc、hi2c等 二、句柄类型&#xff1a; 这里拿huart举例&#xff0c;它的类型是UART_HandleTypeDef 进去stm32f1xx_hal_uart.h之后发现句柄的结构定义有部分是灰色的 灰色的当U…...

53.最大子数组和

53.最大子数组和 思路&#xff1a;动态规划 dp[i]表示截止到i的最大连续子数组的和 dp[0]nums[0] dp[i]max(dp[i-1]nums[i],nums[i]) 代码&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size());dp[0]…...

计算机网络 (16)数字链路层的几个共同问题

一、封装成帧 封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部&#xff0c;构成了一个帧。接收端在收到物理层上交的比特流后…...

[OpenGL]使用glsl实现smallpt

一、简介 本文介绍了如何使用 OpenGL&#xff0c;使用 glsl 语言在 Fragment shader 中实现 smallpt。程序完成后可以得到以下渲染结果&#xff08;samples per pixel, spp 16&#xff09;。在程序中按下A,W可以左右平移&#xff0c;按下W,S可以前后平移&#xff1a; 二、s…...

数据结构与算法Python版 骑士周游问题与深度优先搜索

文章目录 一、图的应用-骑士周游问题二、图的深度优先搜索 一、图的应用-骑士周游问题 骑士周游问题 在一个88的国际象棋棋盘上&#xff0c;一个棋子“马”&#xff08;骑士&#xff09;&#xff0c;按照“马走日”的规则&#xff0c;从一个格子出发&#xff0c;要走遍所有棋…...

HIVE数据仓库分层

1&#xff1a;为什么要分层 大多数情况下&#xff0c;我们完成的数据体系却是依赖复杂、层级混乱的。在不知不觉的情况下&#xff0c;我们可能会做出一套表依赖结构混乱&#xff0c;甚至出现循环依赖的数据体系。 我们需要一套行之有效的数据组织和管理方法来让我们的数据体系…...

WOFOST作物模型(3):敏感性分析

目录 一、定义参数范围二、采样生成参数样本三、运行不同参数组下的WOFOST四、计算敏感度与可视化1.敏感度2.二阶交互敏感度五、敏感变量对产量的影响结果可视化一、定义参数范围 使用TAGP(Total Above Ground Production),地上总产量 TSUM1,temperature sum from emergence…...

【2024年-6月-14日-开源社区openEuler实践记录】探索 test - tools:高效测试的开源宝库

开篇引言 大家好&#xff0c;我是 fzr123&#xff0c;在软件开发领域深耕多年&#xff0c;一直致力于探索各种提升效率的工具与技术。今天&#xff0c;我将为大家深入介绍一款在测试领域极具价值的开源项目——test - tools&#xff0c;它为开发者们提供了一系列强大的测试功能…...

go-xorm连接

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""time""xorm.io/xorm" )func MysqlDbContent() {//数据库基本信息var (userName string "root"password string "12345678"ipAddress string &…...

Java字节分割文件流

使用 Java 通过字节分割大文件并将其以文件流的方式读写的示例代码。这个代码展示了如何将一个大文件分割成多个小文件&#xff0c;并以字节流的方式操作文件。 完整代码示例 import java.io.*;public class FileSplitter {public static void main(String[] args) {// 原始文…...

【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。

目录 一、toString() 方法是啥&#xff1f; &#xff08;一&#xff09;默认的 toString() 方法 &#xff08;二&#xff09;toString() 方法的作用 二、为啥要重写 toString() 方法&#xff1f; &#xff08;一&#xff09;提高代码的可读性 &#xff08;二&#xff09;…...

仙盟系统开发——启动app失败

var 返回 仙盟使者.Cyber_CallApp(VOAPP, 命令, 携带);...

使用ArcGIS Pro自带的Notebook计算多个遥感指数

在之前的分享中&#xff0c;我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件&#xff0c;我们可以一次性计算多种遥感指数&#xff0c;例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示&#xff0c…...

深入Android架构(从线程到AIDL)_认识进程(Process)与IPC架构02

3、 设定IPC通信 -- 使用AndroidManifest.xml文件 在Android框架里&#xff0c;一个应用(程序)套件(Application Package)通常含有多个Java类(Class)&#xff0c;这些类可以在同一个进程(Process)里执行&#xff1b;也可以在不同的进程里执行 。通常&#xff0c;一个进程…...

在K8S中,节点状态哪个组件负责上报?

在Kubernetes中&#xff0c;节点状态是kubelet组件负责定期上报的。Kubelet是运行在每个节点上的代理程序&#xff0c;它与Kubernetes Master节点上的控制面板组件紧密协作&#xff0c;以确保节点上的Pod能够正确运行。 kubelet的主要职责之一就是&#xff1a;与Kubernetes API…...

AI 神经网络在智能家居场景中的应用

在科技持续进步的当下&#xff0c;智能家居领域正经历着深刻变革&#xff0c;AI 神经网络技术的融入成为推动这一变革的关键力量&#xff0c;为家居生活带来了诸多显著变化与提升&#xff0c;本文将几种常见的AI算法应用做了一下总结&#xff0c;希望对物联网从业者有所帮助。 …...

C++基础:SGI STL二级空间配置器内存池

2024/12/14-2024/12/ &#xff1a; 这篇稍微写一下阅读SGI STL内存池的收获。 reference: [1] 深度剖析SGI STL二级空间配置器内存池源码 [2] C内存管理&#xff1a;new / delete 和 cookie [3] 侯捷 内存管理 文章目录 一、写在前面二、二级空间配置器解读2.1 从 malloc 和 fr…...

Python简介

Python 是一种高级编程语言&#xff0c;以其简洁易读的语法和强大的功能而广受欢迎。以下是对 Python 的详细简介&#xff1a; python官网&#xff1a;https://www.python.org/ python中文官网&#xff1a;Python中文网 官网 历史与起源‌&#xff1a; Python 由荷兰人 Guido…...

Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验

一&#xff0c;蜂鸣器模块 封装步骤&#xff1a; ①初始化SNVS_TAMPER这IO复用为GPIO ②设置SNVS_TAMPPER这个IO的电气属性 ③初始化GPIO ④控制GPIO输出高低电平 bsp_beep.c: #include "bsp_beep.h" #include "cc.h"/* BEEP初始化 */ void beep_init…...

手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电

手机实时提取SIM卡打电话的信令声音 --双卡手机来电如何获取哪一个卡的来电 一、前言 前面的篇章《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》中&#xff0c;我们论述了局域网SIP坐席通过手机外呼出去时&#xff0c;手机中主副卡的呼叫调度策略。 但…...

GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网

记录一些平时接触到的 GPU 知识。由于是笔记而非教程&#xff0c;因此内容不求连贯&#xff0c;有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进&#xff1a;1/2/3/4 代监控1.3 NVSwitch1.4 NVLink Switch1.5 HBM (High Bandwidth Memory) 由…...

Unresolved plugin: ‘org.apache.maven.plugins:maven-site-plugin:3.12.1‘

问题 使用idea 社区办加载项目提示下面问题&#xff1a; Unresolved plugin: org.apache.maven.plugins:maven-site-plugin:3.12.1 问题解决 maven插件地址&#xff1a; https://maven.apache.org/plugins/maven-dependency-plugin/plugins.html Maven 中央仓库地址&#…...

GO性能优化的一些记录:trace工具的使用

使用场景&#xff1a; 1 想要查看接口延时性偏高 2 深入了解协程具体如何运营的详细信息&#xff08;运行时长&#xff0c;或者什么原因导致了协程运行受阻&#xff09; 可以使用 trace 功能&#xff0c;程序便会对下面的一系列事件进行详细记录&#xff0c;并且会依据所搜集到…...