上架流程
上架
下单流程
流程
退款流程
退款
上架
流程
退款
use 关键字按引用传递(最直接的方法)这是最常用和最直接的方法。通过在使用 use 时在变量前加上 & 符号,你可以按引用传递变量。这意味着闭包内外的变量指向同一个内存地址,在闭包内修改它,外部的值也会同步改变。php复制下载
$externalValue = 10;
$anotherVariable = "Hello";
$myClosure = function() use (&$externalValue, $anotherVariable) {
// 修改按引用传递的变量
$externalValue += 50; // 这会影响外部的 $externalValue
// 这是按值传递的,修改它不会影响外部的 $anotherVariable
$anotherVariable .= " World";
echo "Inside closure: externalValue = $externalValue, anotherVariable = $anotherVariable\n";
};
$myClosure(); // 输出:Inside closure: externalValue = 60, anotherVariable = Hello World
echo "Outside: externalValue = $externalValue\n"; // 输出:Outside: externalValue = 60
echo "Outside: anotherVariable = $anotherVariable\n"; // 输出:Outside: anotherVariable = Hello
关键点:
use (&$variable):按引用传递,内部修改影响外部。use ($variable):按值传递(默认),内部修改不影响外部。闭包使用的是它创建时该变量的一个副本。通过 certd 获取证书crt和私钥key
通过命令生成PFX文件(大部分win server 需要用旧算法生成)
openssl pkcs12 -macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -out ./cert1.pfx -inkey ./cert.key -in ./cert.pem -passout pass:abc123
参数解释
-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES
指定旧算法兼容windows server
-export -out ./cert1.pfx
指定输出的文件
-inkey ./cert.key -in ./cert.pem
指定私钥 指定证书
-passout pass:abc123
指定pfx密码
打开mmc

进入MMC

添加和删除管理单元 选择证书服务





添加完证书服务后

选择个人证书

执行导入

选择PFX文件

密码为生成PFX的密码 且设置为可导出

设置为个人分类后完成

设置友好名称
打开IIS

选择服务器根证书 确保有新添加的证书

选择我的网站 点击右边的绑定

选择我的服务端口


选择另新证书点击确定
[dependencies] gpio-cdev = “0.4”
curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
. “$HOME/.cargo/env”
lsblk # 查看磁盘和分区信息
df -h # 查看文件系统使用情况
输出
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 64G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 8G 0 part / # 仅用了 8G,剩余空间未分配
/ 代表的就是跟文件系统分区 要扩容就是这个分区扩容
sudo resize2fs /dev/mmcblk0p2 # 扩展 ext4 文件系统
sudo mount -o loop rootfs.img ~/mount_dir
挂载镜像到某个目录
sudo vim /etc/shadow
修改密码文件
root:!:19475:0:99999:7:::
!或*代表该账号无法登录
数据段说明
用户名:加密密码:最后修改时间:最小密码年龄:最大密码年龄:警告期:不活动期:过期时间:保留字段
mkpasswd -m sha-512
执行该命令然后输入密码 替换上面的加密密码段
/etc/ssh/sshd_config
修改配置文件
PermitRootLogin yes # 修改后重启 SSH 服务:sudo systemctl restart sshd
设置允许root 密码登录
在嵌入式Linux系统中,U-Boot、Kernel(内核)和Rootfs(根文件系统) 是三个核心组件,它们分工协作,共同完成系统启动和运行。以下是它们的相互关系和作用:
zImage或uImage)和设备树(dtb)到内存。/ 目录。init 或 systemd,PID=1)。root= 指定Rootfs位置)。/bin、/sbin)。/etc)。/lib)。/usr)。root=/dev/mmcblk0p2)挂载。/sbin/init 或 /lib/systemd/systemd(第一个用户进程)。console=ttyS0 root=/dev/nfs)。init进程,进入用户空间,完成系统启动。/bin/sh缺失)。通过三者协同,嵌入式系统从硬件上电到完整启动,最终运行应用程序。
第一步 安装tokio库
cargo add tokio --features full
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::{TcpListener, TcpStream};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 绑定到本地地址的8080端口
let listener = TcpListener::bind("127.0.0.1:8080").await?;
println!("服务器正在监听 127.0.0.1:8080");
loop {
// 等待新的连接
let (socket, addr) = listener.accept().await?;
println!("接收到来自 {} 的新连接", addr);
// 为每个连接生成一个新任务
tokio::spawn(async move {
if let Err(e) = handle_connection(socket).await {
println!("处理连接时出错: {}", e);
}
});
}
}
async fn handle_connection(mut socket: TcpStream) -> Result<(), Box<dyn Error>> {
// 创建一个缓冲区来存储数据
let mut buf = [0; 1024];
loop {
// 读取数据
let size = match socket.read(&mut buf).await {
// 客户端关闭了连接
Ok(size) if size == 0 => return Ok(()),
Ok(size) => size,
Err(e) => {
return Err(e.into());
}
};
let data = &buf[..size];
let received = String::from_utf8_lossy(data);
println!("Received data: {}", received);
// 检查是否是telnet的断开命令(IAC IP)
if size >= 3 && buf[0] == 255 && buf[1] == 244 {
println!("Detected telnet disconnect command (IAC IP)");
//显示关闭连接并且传播异常
socket.shutdown().await?;
//这个也能退出事件循环 关闭连接
return Ok(());
}
// 检查普通ASCII的CTRL+C (3)
if buf[..size].contains(&3) {
println!("Detected CTRL+C, closing connection");
//显示关闭连接并且传播异常
socket.shutdown().await?;
//这个也能退出事件循环 关闭连接
return Ok(());
}
println!("接收到 {} 字节数据", size);
// 将数据写回客户端
if let Err(e) = socket.write_all(&buf[0..size]).await {
return Err(e.into());
}
}
}
本地 kubernetes dashboard访问路径 https://kubernetes.local/
本地nexus访问路径 http://nexus.local/
本地kibana访问路径 http://kibana.local/app/home
本地grafana访问路径 http://grafana.local/