网安入门之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)
用于存储逻辑值:true
或 false
。常用于条件判断。
示例:
<?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 | 服务器和环境信息 | 提供请求头、服务器信息等 |
$_GET | URL 查询字符串的数据 | 数据可见于 URL,适合小型数据传递 |
$_POST | 表单通过 POST 提交的数据 | 数据不显示在 URL,适合敏感数据传递 |
$_REQUEST | GET、POST 或 COOKIE 数据的集合 | 不推荐用于明确来源的数据 |
$_SESSION | 会话变量 | 数据存储在服务器端,需启动会话 |
$_COOKIE | 客户端存储的小型数据 | 数据存储于客户端浏览器 |
$_FILES | 文件上传相关信息 | 处理文件上传表单的数据 |
HTTP GET 和 POST 方法的区别
在 HTTP 协议中,GET 和 POST 是最常用的两种请求方法,用于客户端与服务器之间的数据交互。虽然它们的功能相似,但在用途和技术实现上有显著差异。
1. 数据传输方式
GET | POST |
---|---|
通过 URL 的查询字符串传输数据。 | 通过请求体(Body)传输数据。 |
数据直接附加在 URL 后,形式为 example.com?name=Alice&age=25 。 | 数据不显示在 URL 中,嵌入请求体,形式不可见。 |
2. 数据长度限制
GET | POST |
---|---|
数据长度有限制,因为 URL 的长度受到浏览器和服务器的限制(通常为 2048 个字符)。 | 无明显长度限制,可传输大量数据,具体限制取决于服务器设置。 |
3. 数据安全性
GET | POST |
---|---|
安全性较低,因为数据包含在 URL 中,容易被拦截或记录在浏览历史中。 | 相对安全,数据存储在请求体中,不会出现在浏览器地址栏,但仍需使用 HTTPS 保护。 |
4. 数据用途
GET | POST |
---|---|
用于请求数据。典型用途是获取资源,如网页或 API 数据。 | 用于提交数据。典型用途是提交表单或上传文件。 |
示例:查询用户信息。 | 示例:登录、注册。 |
5. 可缓存性
GET | POST |
---|---|
可以被缓存。浏览器和中间代理服务器会缓存 GET 请求。 | 不会被缓存。每次都会提交新的请求。 |
6. 浏览器行为
GET | POST |
---|---|
可通过浏览器的地址栏直接输入或保存为书签。 | 不能通过地址栏直接输入,也不能保存为书签。 |
可被搜索引擎索引。 | 不会被搜索引擎索引。 |
7. 常用场景
GET | POST |
---|---|
适用于查询操作,如搜索页面或获取资源信息。 | 适用于需要对服务器进行修改或提交敏感数据的操作。 |
示例:在线搜索、分页。 | 示例:提交表单、上传文件。 |
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'];
?>
总结表
特点 | GET | POST |
---|---|---|
数据传输方式 | 数据附加在 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');
// 输出:<script>alert("XSS")</script>
**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是一种服务器端脚本语言,常用于动态网站开发和 web 应用程序。以下是 PHP 的基本概念与特点的详细说明: 1. PHP 文件的默认文件扩展名 PHP 文件的扩展名通常为 .php,例如 index.php。PHP 文件可以包含 PHP 代码、HTML…...
windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter
1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt(Anaconda)就会打开类似cmd的命令终端窗口,默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…...
【C#特性整理】C#特性及语法基础
1. C#特性 1.1 统一的类型系统 C#中, 所有类型都共享一个公共的基类型. 例如,任何类型的实例都可以通过调用ToString方法将自身转换为一个字符串 1.2 类和接口 接口: 用于将标准与实现隔离, 仅仅定义行为,不做实现. 1.3 属性、方法、事件 属性: 封装了一部分对…...
龙蜥 配置本地yum源8.6----亲测
系统版本: 说明:丫丫的,内网服务安装了个龙蜥操作系统。内网不能访问互联网,所以就需要挂载yum源 用的以前的方法挂载,一直报错 [Couldnt open file /mnt/anolisos/repodata/repomd.xml] yum挂载的时候报错,奇葩!!!,龙蜥的挂载方法好像不一样。 解决: 一、上传并挂…...
Xshell日志录制
步骤 1:设置日志文件位置 打开 Xshell 软件,选择目标会话(或者创建一个新的会话)。右键点击会话名称,选择“属性”。在会话属性窗口中,找到“日志”选项卡。勾选“启用日志记录”。在“文件名”中设置日志…...
vue下载和上传的地址动态ip地址配置方法
vue3结合element-plus实现【下载文件】和【上传文件】的动态ip地址配置 效果图 一、修改【文件上传】静态地址 1、首先引入axios import axios from "/utils/request"; import { getToken } from "/utils/auth"; 定义 const importDialogVisible ref(…...
动手做计算机网络仿真实验入门学习
打开软件 work1 添加串行接口模块,先关电源,添加之后再开电源 自动选择连接 所有传输介质 自动连接 串行线 绿色是通的,红色是不通的。 显示接口。se是serial串行的简写。 Fa是fast ethernet的简写。 为计算机配置ip地址: 为服…...
LeetCode 面试题 17.10. 主要元素
LeetCode 面试题 17.10. 主要元素 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 示例 1: 输入:[1,2,5,9,5,9,5…...
Hive之import和export使用详解
在hive-0.8.0后引入了import/export命令。 Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置,并且导出数据可以被移动到另一个hadoop集群或hive实例,并且可以通过import命令导入数据。 当导出一个分区表,原始数据可能在hdf…...
SpringBoot数据字典字段自动生成对应code和desc
效果:接口会返回orderType,但是这个orderType是枚举的类型(1,2,3,4),我想多返回一个orderTypeDesc给前端展示,这样前端就可以直接拿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><!--相对路径:-->…...
字——位级运算与有无符号数之间的比较
前言 本文整理和归纳《深入理解计算机系统》这本书的内容,但本文不会继续长篇大论地去将所有内容都总结,而是总结笔者认为容易遗忘或混淆或表述不清的内容。 字 首先字这个概念对于学习过《计算机体系结构》或《操作系统》的同学都不陌生,…...
Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。 包含编程资料、学习路线图、源代码、软件安装包等!【…...
‘Optional. get()‘ without ‘isPresent()‘ check
在Java中,Optional类被引入主要是为了解决NullPointerException的问题,它提供了一种更优雅的方式来处理可能为null的情况。Optional.get()方法用于获取Optional实例中包含的值,但如果Optional实例是空的(即没有值)&…...
015-spring-动态原理、AOP的xml和注解方式
强制使用cglib动态代理 spring-AOP的使用...
统计颜色Count Color(POJ2777)题解
有一个长度为L厘米板,L是一个正整数,所以我们可以把它均匀地划分成L个部分,分别从左到右编号为1,2……L,每一个部分长度都为1厘米。现在我们必须给每个部分涂色,一个部分一种颜色,要求完成以下两…...
Nginx 配置 SSL(HTTPS)详解
Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。 随着互联网安全性的日益重要,HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务…...
Day10补代码随想录 理论基础|232.用栈实现队列|225.用队列实现栈|20.有效的括号|1047.删除字符串中的所有相邻重复项
栈和队列理论基础 抽象认识 栈是先进后出(FIFO),队列是先进先出(LIFO) 队首(先进))队尾(后进)栈顶(后进)栈底(先进) 栈(Stack) 只在一端进行进出操作(只在一端进一端出)像个篮球框,取用篮球从一端进出。 /进栈 int a[1000];//足够大的栈空间 int top-1…...
pytorch基础之注解的使用--003
Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题,这里专门写一篇文章进行讲解。包括如何自定义注解,以及注意事项,相信JAVA中很多朋友业写过,但是今天写的是Python哦。。。 2.定义 在 Python…...
2024-12-30-g++
title: 探秘 g:C 编程的得力编译器 date: ‘2024-12-30’ category: blog tags: gC 编程编译器技术代码生成与优化 sig: compiler archives: ‘2024-12’ author:way_back summary: g 作为专门用于 C 语言的编译器,在 C 开发领域占据关键地位。它凭借对…...
互联网十万个为什么之什么是微服务
微服务(Microservices)是一种软件架构设计模式,它将应用程序分解为小型、自治的服务单元,这些服务单元可以独立部署、扩展和维护,其中每一个服务单元也都是一个微服务。 基于微服务形成的软件架构风格称为微服务架构&…...
mysql子查询
子查询是嵌套在另一个 SELECT, INSERT, UPDATE, 或 DELETE查询的 SQL 查询。子查询可以在 WHERE 子句中、FROM 子句或 SELECT 列表中出现。 以下是一些使用 MySQL 子查询的常见示例: 1.在 WHERE 子句中使用子查询: SELECT * FROM Employees WHERE s…...
智能故障诊断和寿命预测期刊推荐
往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...
根据语言变化动态更新图片资源方案
根据语言变化动态更新图片资源方案 一、需求描述二、关于 Locale三、实现方案3.1 方案一(不可行)3.2 方案二(不可行)3.3 方案三 一、需求描述 Android 项目中引导页图片包含文字信息,由于应用是适配了三种语言&#x…...
Python世界:数据结构易错点小结
Python世界:数据结构易错点小结 总体list列表tuple元组Stringdict字典mapset 部分笔记汇总,持续刷新中。区别于其他笔记之处在于,主要记录易错点坑点。 总体 数据结构声明辨析 list []tuple () const listditc {} hashset res set(list) 数…...
Linux | Ubuntu零基础安装 nvm 管理nodejs
目录 介绍 项目地址 前置工具 安装 查看环境配置 更新环境变量 查看版本 查看 nodejs包 列表 安装nodejs 查看 nvm 状态 测试 nodejs 介绍 nvm是什么?你可以把它理解成 nodejs的管理软件,方便快速切换nodejs的版本,达到兼容状态 …...
flask后端开发(3):html模板渲染
目录 渲染模板html模板获取路由参数 gitcode地址: https://gitcode.com/qq_43920838/flask_project.git 渲染模板 这样就能够通过html文件来渲染前端,而不是通过return了 html模板获取路由参数...
HAL 库句柄
一、命名方式:句柄是h为首字母,后面接协议名称 比如:huart、hadc、hi2c等 二、句柄类型: 这里拿huart举例,它的类型是UART_HandleTypeDef 进去stm32f1xx_hal_uart.h之后发现句柄的结构定义有部分是灰色的 灰色的当U…...
53.最大子数组和
53.最大子数组和 思路:动态规划 dp[i]表示截止到i的最大连续子数组的和 dp[0]nums[0] dp[i]max(dp[i-1]nums[i],nums[i]) 代码: class Solution { public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size());dp[0]…...
计算机网络 (16)数字链路层的几个共同问题
一、封装成帧 封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部,构成了一个帧。接收端在收到物理层上交的比特流后…...
[OpenGL]使用glsl实现smallpt
一、简介 本文介绍了如何使用 OpenGL,使用 glsl 语言在 Fragment shader 中实现 smallpt。程序完成后可以得到以下渲染结果(samples per pixel, spp 16)。在程序中按下A,W可以左右平移,按下W,S可以前后平移: 二、s…...
数据结构与算法Python版 骑士周游问题与深度优先搜索
文章目录 一、图的应用-骑士周游问题二、图的深度优先搜索 一、图的应用-骑士周游问题 骑士周游问题 在一个88的国际象棋棋盘上,一个棋子“马”(骑士),按照“马走日”的规则,从一个格子出发,要走遍所有棋…...
HIVE数据仓库分层
1:为什么要分层 大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。 我们需要一套行之有效的数据组织和管理方法来让我们的数据体系…...
WOFOST作物模型(3):敏感性分析
目录 一、定义参数范围二、采样生成参数样本三、运行不同参数组下的WOFOST四、计算敏感度与可视化1.敏感度2.二阶交互敏感度五、敏感变量对产量的影响结果可视化一、定义参数范围 使用TAGP(Total Above Ground Production),地上总产量 TSUM1,temperature sum from emergence…...
【2024年-6月-14日-开源社区openEuler实践记录】探索 test - tools:高效测试的开源宝库
开篇引言 大家好,我是 fzr123,在软件开发领域深耕多年,一直致力于探索各种提升效率的工具与技术。今天,我将为大家深入介绍一款在测试领域极具价值的开源项目——test - tools,它为开发者们提供了一系列强大的测试功能…...
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 通过字节分割大文件并将其以文件流的方式读写的示例代码。这个代码展示了如何将一个大文件分割成多个小文件,并以字节流的方式操作文件。 完整代码示例 import java.io.*;public class FileSplitter {public static void main(String[] args) {// 原始文…...
【潜意识Java】深入详细理解分析Java中的toString()方法重写完整笔记总结,超级详细。
目录 一、toString() 方法是啥? (一)默认的 toString() 方法 (二)toString() 方法的作用 二、为啥要重写 toString() 方法? (一)提高代码的可读性 (二)…...
仙盟系统开发——启动app失败
var 返回 仙盟使者.Cyber_CallApp(VOAPP, 命令, 携带);...
使用ArcGIS Pro自带的Notebook计算多个遥感指数
在之前的分享中,我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件,我们可以一次性计算多种遥感指数,例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示,…...
深入Android架构(从线程到AIDL)_认识进程(Process)与IPC架构02
3、 设定IPC通信 -- 使用AndroidManifest.xml文件 在Android框架里,一个应用(程序)套件(Application Package)通常含有多个Java类(Class),这些类可以在同一个进程(Process)里执行;也可以在不同的进程里执行 。通常,一个进程…...
在K8S中,节点状态哪个组件负责上报?
在Kubernetes中,节点状态是kubelet组件负责定期上报的。Kubelet是运行在每个节点上的代理程序,它与Kubernetes Master节点上的控制面板组件紧密协作,以确保节点上的Pod能够正确运行。 kubelet的主要职责之一就是:与Kubernetes API…...
AI 神经网络在智能家居场景中的应用
在科技持续进步的当下,智能家居领域正经历着深刻变革,AI 神经网络技术的融入成为推动这一变革的关键力量,为家居生活带来了诸多显著变化与提升,本文将几种常见的AI算法应用做了一下总结,希望对物联网从业者有所帮助。 …...
C++基础:SGI STL二级空间配置器内存池
2024/12/14-2024/12/ : 这篇稍微写一下阅读SGI STL内存池的收获。 reference: [1] 深度剖析SGI STL二级空间配置器内存池源码 [2] C内存管理:new / delete 和 cookie [3] 侯捷 内存管理 文章目录 一、写在前面二、二级空间配置器解读2.1 从 malloc 和 fr…...
Python简介
Python 是一种高级编程语言,以其简洁易读的语法和强大的功能而广受欢迎。以下是对 Python 的详细简介: python官网:https://www.python.org/ python中文官网:Python中文网 官网 历史与起源: Python 由荷兰人 Guido…...
Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验
一,蜂鸣器模块 封装步骤: ①初始化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卡切换方案》中,我们论述了局域网SIP坐席通过手机外呼出去时,手机中主副卡的呼叫调度策略。 但…...
GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网
记录一些平时接触到的 GPU 知识。由于是笔记而非教程,因此内容不求连贯,有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进: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 社区办加载项目提示下面问题: Unresolved plugin: org.apache.maven.plugins:maven-site-plugin:3.12.1 问题解决 maven插件地址: https://maven.apache.org/plugins/maven-dependency-plugin/plugins.html Maven 中央仓库地址&#…...
GO性能优化的一些记录:trace工具的使用
使用场景: 1 想要查看接口延时性偏高 2 深入了解协程具体如何运营的详细信息(运行时长,或者什么原因导致了协程运行受阻) 可以使用 trace 功能,程序便会对下面的一系列事件进行详细记录,并且会依据所搜集到…...