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

实践项目-1

光看Linux学习视频,太容易恍神了
我们一起一边项目一边学习吧😊
之前有学习到《Linux 实战技能 100 讲》20讲了,我们就先实践项目吧
然后是搭建极简电商系统项目:
1.是搭建环境php,mysql,nginx
2.创建用户模块,任务点是:(
a.注册/登录(密码MD5加密)
b.用户信息管理(CRUD)
c.权限控制(管理员/普通用户)

3.手写Mysql数据连接(不依赖PDO,也可以写一版依赖的)
4.封装Auth.php实现登录状态管理
好啦!上面就是这篇的内容操作大纲,大家也可以操作实践试试,都手搓哟😁

这里我用的是云服务器,安装的是ubantu系统

  1. 安装php环境
    使用官方的安装操作:https://www.php.net/downloads.php?usage=web&os=linux&osvariant=linux-ubuntu&version=8.2 ,这里选择的是php8.2的版本
    在这里插入图片描述
    这里我们切换到根目录下操作基本没有什么大的问题,至于为什么要切换到根目录下操作,就是我自己的习惯了😂,你们也可以不用切换。之后都可以在 ls /usr/bin 中查看到安装的php
ls /usr/bin | grep php //就可以查询到php应用 ( /usr/bin 存放相对次要但仍属系统级的应用程序,/bin 通常存放更核心的系统命令(如启动时必需的命令))

安装好之后输入 php -v 查看是否有弹出版本号没有,弹出了就表示安装成功了
在这里插入图片描述
然后可以在你创建的工程中的某一个目录中创建一个index.php文件,之后php 运行起来,查看是否能成功。

mkdir -p /var/www/project/MiniShop/public //创建空目录
touch index.php //创建index.php的文件
vim index.php //编辑index.php文件内容 需要点击i进入编辑状态
cat index.php //查看文件内容
php index.php //运行文件

每次在IDE中创建php文件就会自动生成php开头标识,自己手打都忘记了😓,一定是<?php 开头哟
在这里插入图片描述
OK!!!到这里php环境就安装结束了

  1. 安装MySql服务

这里我安装的时候没有找官网,而是在Linux中输入的mysql,会提示你没有,但是你可以安装对应的版本
我安装的是:apt install mysql8.0.43
你们可以根据自己获取到的来安装
然后就是输入 mysql --version 判断是否有安装好了没,或者是输入mysql,弹出mysql>这样就是安装好了,同样安装应用也是在/usr/bin中哟
在这里插入图片描述
ctrl+d是退出哟!
以下这些命令,大家可以先试试看

记得,输入结束之后一定要;结束哟,一定注意

在这里插入图片描述
OK!!!这里就算安装好啦

  1. 安装nginx (如果是打算用用php+apache+mysql 就不用安装了哈)
    同样的哟,安装成功了之后记得回去看看是否有安装成功:nginx -version
    在这里插入图片描述
    在这里插入图片描述
    遇到了问题:80端口被占用了在这里插入图片描述
    可以用命令:sudo lsof -i :80 或者 sudo netstat -tulpn | grep :80 (在Linux的网络配置中有) 查看端口号80被那个进程所占。这里我的是被apache占用的
    在这里插入图片描述
    这里我需要关闭他:sudo systemctl stop apache2 (systemctl是单元文件 是在了解Linux中)
    关闭了之后,我又查询了nginx,没有提示但是查询进程是没有运行的 ,需要启动:systemctl start nginx
    在这里插入图片描述
    这里启动报错了,查询了之后说是:通常是配置文件存在语法错误或其他启动障碍,按照提示我查询了具体错误信息
    在这里插入图片描述
    我这里查询到发现是80端口被占用,查询了80是nginx本身,但是运行状态又是失败的,关闭进程也没有效果,最后使用的是杀死进程:sudo pkill -9 nginx 然后再重新启动就可以啦!

OK!!!这里就算安装好啦

  1. 安装ftp(本来是没有这个缓解的,不过用vim编辑真是糟糕透了,所以准备放到IDE中编辑)
    查询了下,比较常用的ftp服务(vsftpd/proftpd)
    大家可以按照自己的需求来安装使用,同样的哟安装命令:apt install vsftpd 我这里使用的是apt安装的,基本就是这样的命令
    在这里插入图片描述
    在这里插入图片描述
    OK!!!这里就算安装好啦!

不过在链接到phpstorm中,废了好大一番功夫。
在这里插入图片描述
这里我连接ftp一直失败,一直用的是root账号,也就以为是配置的问题。我查询了相关的资料,说可能是我
1.被动模式在:/etc/vsftpd.conf中没有设置好,我就去设置了,结果没有什么作用。这里还重启了ftp:sudo systemctl restart vsftpd
在这里插入图片描述2.然后需要我去查看我服务器中安全组是否有设置 这里也是设置好的在这里插入图片描述
3.中途有让我添加一个新的账号,root本身是不会被开放给到21端口,我用命令:useradd etta 创建了一个,但是密码没有设置正确,中途请求访问的时候就报错,后来我就查看密码文件:cat /etc/shadow 果然密码位置是!没有设置成功,重新使用命令:passwd etta设置上,然后连接到ftp中,成功!!!!!

革命还未成功,需继续努力。。。。。
这里我使用etta的账号远程登录了,不过展示出来的目录直接就是根目录,好家伙,修改错了,那我不得重新装系统。
1.这里需要修改权限:usermod -d /var/www/project/MiniShop etta (Linux权限章)//修改etta账号的家目录为MiniShop,这样ftp访问的时候就只会展示家目录的内容
2.需要修改ftp中的配置:vim /etc/vsftpd.conf 设置好之后,记得重启vsftp进程哟!

# 限制所有本地用户到他们的主目录
chroot_local_user=YES
# 允许用户对主目录有写权限(避免 chroot 安全限制导致登录失败)
allow_writeable_chroot=YES

OK!!!这里就算达到我的需求啦!

  1. 创建用户模块(其实最开始我没想好怎么下手,之前都是用的框架,不知道小伙伴们最开始的时候有想到么?)
    我想到的是我先跑起来网站,所以
    ✨先是创建数据表,然后连接到项目中,然后创建页面(ai生成),账号的CRUD,最后是登录的验证(真棒的自己😁)php方面会简单些
    a.创建数据库
 create database ·mini_shop· ; //创建数据库,这里要注意的是database没有s 查询的时候是有s的,然后就是数据库名前面是反引号,不是单引号

太久没有手搓,到处都是坑坑。。。。😂
b.创建数据表
切换到mini_shop数据库中,或者创建的时候带上数据库名称也行

use mini_shop;
show tables;
CREATE TABLE `mini_users` (`id` int(11) PRIMARY KEY AUTO_INCREMENT,`username` varchar(50) NOT NULL UNIQUE,`password` varchar(32) NOT NULL COMMENT 'MD5加密',`role` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0-普通用户,1-管理员',`created_at` datetime NOT NULL,`updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

c.连接到项目中
public/index.php

<?php
// 启用错误报告以便调试
error_reporting(E_ALL);
ini_set('display_errors', 1);require __DIR__.'/../src/Database/Db.php';

config/database.php

return ['host'=>'your-host-ip','database'=>'mini_shop','username'=>'root','password'=>'root','port'=>3306,'charset'=>'utf8mb4'
];

src/Database/Db.php
使用的是mysql面向对象的连接方式

<?php
$config = require_once __DIR__.'/../../config/database.php';// 检查配置是否正确加载
if (!isset($config)) {die("配置加载失败");
}$conn = new mysqli($config['host'],$config['username'],$config['password'],$config['database'],$config['port']
);if ($conn->connect_error){die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";$conn->close();

-遇到的问题:
请求我的host地址的时候提示我账号和密码没有权限登录
-修改方案
1.检查了服务器中是否有监听3306端口

netstat -tulpn //查看端口号
//或者单独查询 
netstat -tulpn |grep 3306

2.设置/etc/mysql/mysql.conf.d/mysqld.cnf 文件中的

bind-address = 0.0.0.0 //允许所有ip连接,一般是127.0.0.1

3.创建用户,再授权ip地址

//先创建用户
create user 'root'@'your-host-ip' identified by 'possword';
//再授权
grant all privileges on mini_shop.* to 'root'@'your-host-ip' with grant option;
//刷新权限
flush privileges;

ok!!!这样就可以啦!

还可以连接ssl 然后再本地连接数据库也行,或者这里就直接连接本地数据库,不连接线上的

d.ai生成登录页面样式
在这里插入图片描述
e.账号的CRUD
f.登录验证

项目结构设计:
MiniShop/
├── config/ # 配置文件目录

│ ├── app.php # 应用基础配置

│ ├── database.php # 数据库配置(适配多环境)

│ ├── payment.php # 支付接口配置

│ └── env.php # 环境变量加载类(第9周实践)

├── src/ # 核心业务代码(PSR-4自动加载)

│ ├── Database/ # 数据库相关

│ │ ├── Db.php # 数据库连接类(单例模式,第1周)

│ │ └── Query.php # 查询构造器

│ ├── User/ # 用户模块

│ │ ├── Model.php # 用户数据模型

│ │ └── Auth.php # 认证类(第2周)

│ ├── Goods/ # 商品模块

│ │ ├── Model.php # 商品数据模型

│ │ └── Algorithm.php # 算法工具类(排序/搜索,第3周)

│ ├── Order/ # 订单模块

│ │ ├── Model.php # 订单数据模型

│ │ └── Logger.php # 订单日志类(第5周)

│ ├── Payment/ # 支付模块

│ │ ├── Payment.php # 支付抽象类(第8周)

│ │ ├── Alipay.php # 支付宝实现类

│ │ └── Wechat.php # 微信支付实现类

│ ├── Common/ # 公共组件

│ │ ├── Permission.php # 权限中间件(第4周)

│ │ ├── Cache.php # 缓存工具类(第7周)

│ │ ├── System.php # 系统调用类(第6周)

│ │ ├── Ssl.php # HTTPS工具类(第11周)

│ │ ├── Queue.php # 队列服务类(第10周)

│ │ └── Monitor.php # 监控SDK(第12周)

│ └── Extensions/ # PHP扩展相关(第8/12周)

│ └── algorithm/ # 自定义C扩展源码

├── public/ # 入口与静态资源

│ ├── index.php # 应用入口

│ ├── static/ # 静态文件(CSS/JS/图片)

│ └── api/ # 接口路由

├── logs/ # 日志目录(Linux权限配置:755)

│ ├── app.log # 应用日志

│ └── order.log # 订单日志(第5周)

├── vendor/ # Composer依赖(第6周)

├── scripts/ # 脚本目录

│ ├── backup.sh # 数据备份脚本(第6周)

│ └── deploy.sh # 自动化部署脚本(第12周)

├── tests/ # 测试代码

├── .env.example # 环境变量示例

├── composer.json # 依赖管理配置(第6周)

└── README.md # 项目说明文档

http://www.lryc.cn/news/625916.html

相关文章:

  • Matplotlib数据可视化实战:Matplotlib图表注释与美化入门
  • LeetCode100-560和为K的子数组
  • Rust学习笔记(七)|错误处理
  • 2025年渗透测试面试题总结-21(题目+回答)
  • 堆、方法区、虚拟机栈、本地方法栈、程序计数器
  • RabbitMQ:SpringAMQP 多消费者绑定同一队列
  • Java配置文件
  • 第1章 React组件开发基础
  • 第10章 React应用测试
  • 我的SSM框架自学2
  • IDEA测试代码报java file outset source root异常
  • STM32-FreeRTOS快速入门指南(中)
  • 【软件安装】VScode介绍安装步骤及中文界面设置方法
  • 从数据孤岛到实时互联:Canal 驱动的系统间数据同步实战指南
  • Java 11中的Collections类详解
  • 正式签约 | OpenLoong 项目正式捐赠至开放原子开源基金会,成为全国首个具身智能方向孵化项目!
  • Vulkan笔记(十三)-帧缓冲区与命令池命令缓冲区
  • 使用 SemanticKernel 连接本地大模型 Ollama
  • 11.Ansible自动化之-内容集管理
  • 快手Klear-Reasoner登顶8B模型榜首,GPPO算法双效强化稳定性与探索能力!
  • 图像增强——灰度变换增强(线性,对数,指数)、空间滤波增强、频域增强、主成分/彩色合成增强(原理解释和代码示例)
  • FPGA 在情绪识别领域的护理应用(一)
  • Spring Boot应用实现图片资源服务
  • 电商数据分析可视化预测系统
  • gitlab、jenkins等应用集成ldap
  • Wireshark获取数据传输的码元速率
  • 【iOS】内存管理
  • implement libtime on Windows
  • 软件系统运维常见问题
  • STM32之beep、多文件、延迟、按键以及呼吸灯