github 上的php项目

发布于:2025-06-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

github 上的php项目

项目的网址 (Loong1996/LikeGirlSite: 情侣网站、情侣网页、恋爱记录网站

在这里插入图片描述

# 修改
# admin/Config_DB.php


//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1)
$db_address = "mysql_php";

//数据库用户名
$db_username = "root";

//数据库密码
$db_password = "root123";

//数据库表名
$db_name = "love";

//敏感信息修改安全码 建议设置复杂一些
$Like_Code = "Love";

//版本号
$version = 20240612;

创建网桥

docker network create -d bridge php_net 

mysql镜像的启动

docker run \
-itd  --name mysql_php \
--network php_net \
--restart unless-stopped  \
-e MYSQL_USER="php" \
-e MYSQL_PASSWORD="php123" \
-e MYSQL_ROOT_PASSWORD="root123" \
mysql:8.0.23 \
--default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_bin

修改数据库

# 找到数据库的ip 

[root@docker-110 LikeGirlSite]# docker inspect mysql_php | grep -i ipaddr 
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.23.0.2",

# 登录数据库
[root@docker-110 LikeGirlSite]# mysql -h 172.23.0.2  -uroot -proot123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.23 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

# 创建一个数据库
MySQL [(none)]> create database love;
Query OK, 1 row affected (0.00 sec)


# 导入文件
MySQL [(none)]> USE love;
Database changed
MySQL [love]> source /root/LikeGirlSite/love20240612.sql;

# 检查一下

MySQL [love]> show tables;
+----------------+
| Tables_in_love |
+----------------+
| IPerror        |
| about          |
| article        |
| diySet         |
| leavSet        |
| leaving        |
| login          |
| loveImg        |
| lovelist       |
| text           |
| warning        |
+----------------+
11 rows in set (0.00 sec)


启动phpmyadmin镜像\

  1. 看dockerhub,给了什么资料,(这里需要科学上网,我这里就截图了)
    https://hub.docker.com/_/phpmyadmin

  2. docker history
    docker run 去分析 入口点脚本,启动脚本,都调用了哪些变量

在这里插入图片描述

docker run -d --restart=always  \
--name blog_phpadmin \
--network php_net \
-e PMA_HOST=mysql_php \
-p 888:80
phpmyadmin

在这里插入图片描述

看到数据了,表示phpadmin 和 数据库连接成功 !!!! 

最后是nginx

  1. 当你已http协议去访问这个源的时候
    http://10.0.0.7:80/test-info.php

    到达nginx,找到test-info.php

    fastcg_pass 127.0.0.1:9000; (php-fpm去读取,执行test-info.php)

    返回执行结果给nginx

    用户浏览器看到这个代码的结果

这里是 bitnami/php-fpm 也就是处理php代码的

version: '3'

services:
  db:
    image: mysql:8.0.23
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - app-network

  php-fpm:
    image: bitnami/php-fpm
    restart: always
    volumes:
      - /opt/test_php:/var/www/html  # 挂载你的 PHP 代码
    depends_on:
      - db
    networks:
      - app-network

  nginx:
    image: nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - /opt/test_php:/var/www/html
      - /opt/test_php/nginx.conf:/etc/nginx/conf.d/default.conf  # 需要创建 nginx.conf
    depends_on:
      - php-fpm
    networks:
      - app-network

networks:
  app-network:

volumes:
  mysql-data:

创建 Nginx 配置文件 (nginx.conf)

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;  # 指向 php-fpm 服务
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    }
}

创建 PHP 测试文件 (test.php)

<?php
try {
    $pdo = new PDO(
        'mysql:host=db;dbname=mydb;charset=utf8mb4',
        'user',         // 数据库用户名
        'password',     // 数据库密码
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );
    echo "数据库连接成功!";
    
    // 测试查询
    $stmt = $pdo->query("SELECT 1+1 AS result");
    $row = $stmt->fetch();
    echo "测试查询结果: " . $row['result'];
    
} catch (PDOException $e) {
    die("连接失败: " . $e->getMessage());
}

启动容器

docker-compose up -d

测试

访问 http://localhost/test.php,如果看到以下输出,则连接成功:

在这里插入图片描述

看到这我们就ok了。开始部署

  1. 我们先把代码下到opt目录下
[root@docker-110 opt]# mv LikeGirlSite-master love-project
[root@docker-110 love-project]# ls
about.php  Botui      favicon.ico  head.php   ipjc.php  leaving.php  list.php    love20240612.sql  page.php   Style
admin      error.php  footer.php   index.php  ip.php    LICENSE      little.php  loveImg.php       README.md
# 修改
# admin/Config_DB.php


//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1)
$db_address = "db";

//数据库用户名
$db_username = "root";

//数据库密码
$db_password = "root123";

//数据库表名
$db_name = "love";

//敏感信息修改安全码 建议设置复杂一些
$Like_Code = "Love";

//版本号
$version = 20240612;

version: '3'

services:
  db:
    image: mysql:8.0.23
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: love
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - app-network

  php-fpm:
    image: bitnami/php-fpm
    restart: always
    volumes:
      - /opt/love-project:/var/www/html  # 挂载你的 PHP 代码
    depends_on:
      - db
    networks:
      - app-network

  nginx:
    image: nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - /opt/love-project:/var/www/html
      - /opt/love-project/nginx.conf:/etc/nginx/conf.d/default.conf  # 需要创建 nginx.conf
    depends_on:
      - php-fpm
    networks:
      - app-network

networks:
  app-network:

volumes:
  mysql-data:

nginx.conf

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;  # 指向 php-fpm 服务
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    }
}

test.php

<?php
try {
    $pdo = new PDO(
        'mysql:host=db;dbname=love;charset=utf8mb4', //注意修改dbname
        'root',         // 数据库用户名
        'root123',     // 数据库密码
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );
    echo "数据库连接成功!";
    
    // 测试查询
    $stmt = $pdo->query("SELECT 1+1 AS result");
    $row = $stmt->fetch();
    echo "测试查询结果: " . $row['result'];
    
} catch (PDOException $e) {
    die("连接失败: " . $e->getMessage());
}

在这里插入图片描述

测试一下呗

在这里插入图片描述

导入数据

[root@docker-110 love-project]# mysql -u root -p root123 -h 172.26.0.2
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'172.26.0.1' (using password: YES)
[root@docker-110 love-project]# mysql -uroot -proot123 -h172.26.0.2
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 8.0.23 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 




<?php
// 设置页面编码
header("Content-Type:text/html; charset=utf-8");

$db_config = [
    'host'     => 'db',          // 使用容器名
    'port'     => '3306',
    'username' => 'user',        // 使用Docker创建的用户
    'password' => 'password',    // 使用Docker设置的密码
    'dbname'   => 'love',
    'charset'  => 'utf8mb4'
];

// 安全配置
$security_config = [
    'like_code' => 'Love',
    'version'   => '20240612'
];

// 创建数据库连接
try {
    // 修复:在DSN中添加端口配置
    $pdo = new PDO(
        "mysql:host={$db_config['host']};port={$db_config['port']};dbname={$db_config['dbname']};charset={$db_config['charset']}",
        $db_config['username'],
        $db_config['password'],
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ]
    );
    
    // 开发环境测试连接
    if (isset($_SERVER['APP_ENV']) && $_SERVER['APP_ENV'] === 'development') {
        echo "数据库连接成功!";
    }
} catch(PDOException $e) {
    // 开发环境显示详细错误
    if (isset($_SERVER['APP_ENV']) && $_SERVER['APP_ENV'] === 'development') {
        die("数据库连接失败: " . $e->getMessage());
    }
    
    // 生产环境记录日志并显示友好错误
    error_log("数据库连接失败: " . $e->getMessage());
    die("系统暂时无法访问,请稍后再试");
}

// 设置错误报告级别(根据环境调整)
if (isset($_SERVER['APP_ENV']) && $_SERVER['APP_ENV'] === 'development') {
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
} else {
    error_reporting(0);
    ini_set('display_errors', 0);
}
?>

在这里插入图片描述

可惜最后没运行出来