实践项目-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
php 复制代码
ls /usr/bin | grep php //就可以查询到php应用 ( /usr/bin 存放相对次要但仍属系统级的应用程序,/bin 通常存放更核心的系统命令(如启动时必需的命令))

安装好之后输入 php -v 查看是否有弹出版本号没有,弹出了就表示安装成功了

然后可以在你创建的工程中的某一个目录中创建一个index.php文件,之后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进程哟!

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

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

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

太久没有手搓,到处都是坑坑。。。。😂
b.创建数据表

切换到mini_shop数据库中,或者创建的时候带上数据库名称也行

php 复制代码
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 复制代码
<?php
// 启用错误报告以便调试
error_reporting(E_ALL);
ini_set('display_errors', 1);

require __DIR__.'/../src/Database/Db.php';

config/database.php

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

src/Database/Db.php

使用的是mysql面向对象的连接方式

php 复制代码
<?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端口

php 复制代码
netstat -tulpn //查看端口号
//或者单独查询 
netstat -tulpn |grep 3306

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

php 复制代码
bind-address = 0.0.0.0 //允许所有ip连接,一般是127.0.0.1

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

php 复制代码
//先创建用户
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 # 项目说明文档