实践项目-1
光看Linux学习视频,太容易恍神了
我们一起一边项目一边学习吧😊
之前有学习到《Linux 实战技能 100 讲》20讲了,我们就先实践项目吧
然后是搭建极简电商系统项目:
1.是搭建环境php,mysql,nginx
2.创建用户模块,任务点是:(
a.注册/登录(密码MD5加密)
b.用户信息管理(CRUD)
c.权限控制(管理员/普通用户)
)
3.手写Mysql数据连接(不依赖PDO,也可以写一版依赖的)
4.封装Auth.php实现登录状态管理
好啦!上面就是这篇的内容操作大纲,大家也可以操作实践试试,都手搓哟😁
这里我用的是云服务器,安装的是ubantu系统
- 安装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环境就安装结束了
- 安装MySql服务
这里我安装的时候没有找官网,而是在Linux中输入的mysql,会提示你没有,但是你可以安装对应的版本
我安装的是:apt install mysql8.0.43
的
你们可以根据自己获取到的来安装
然后就是输入 mysql --version
判断是否有安装好了没,或者是输入mysql,弹出mysql>这样就是安装好了,同样安装应用也是在/usr/bin中哟
ctrl+d是退出哟!
以下这些命令,大家可以先试试看
记得,输入结束之后一定要;结束哟,一定注意
OK!!!这里就算安装好啦
- 安装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!!!这里就算安装好啦
- 安装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!!!这里就算达到我的需求啦!
- 创建用户模块(其实最开始我没想好怎么下手,之前都是用的框架,不知道小伙伴们最开始的时候有想到么?)
我想到的是我先跑起来网站,所以
✨先是创建数据表,然后连接到项目中,然后创建页面(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 # 项目说明文档