php的案例分析----typecho项目
php的案例分析----typecho项目
typecho/typecho: A PHP Blogging Platform. Simple and Powerful.
下载的代码的地址
Download - Typecho Official Site
主要时能在网站上使用makdown的语法编写
步骤 1:创建项目目录
mkdir typecho-docker && cd typecho-docker
步骤 2:编写 Docker Compose 文件
version: '3.8'services:# 数据库服务db:image: mysql:8.1container_name: typecho-dbrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_DATABASE: typechoMYSQL_USER: typecho_userMYSQL_PASSWORD: typecho_passwordvolumes:- mysql-data:/var/lib/mysqlnetworks:- typecho-network# PHP-FPM服务php-fpm:image: bitnami/php-fpm:latestcontainer_name: typecho-php-fpmrestart: alwaysvolumes:- ./typecho:/var/www/htmldepends_on:- dbnetworks:- typecho-network# Nginx服务nginx:image: nginx:latestcontainer_name: typecho-nginxrestart: alwaysports:- "80:80"- "443:443"volumes:- ./typecho:/var/www/html- ./nginx-conf:/etc/nginx/conf.d- ./ssl:/etc/ssl/certsdepends_on:- php-fpmnetworks:- typecho-networknetworks:typecho-network:driver: bridgevolumes:mysql-data:
步骤 3:配置 Nginx
创建nginx-conf
目录并添加typecho.conf
:
mkdir nginx-conf && nano nginx-conf/typecho.conf
server {listen 80;server_name localhost;root /var/www/html;index index.php index.html;location / {try_files $uri $uri/ /index.php$is_args$args;}location ~ \.php$ {fastcgi_pass typecho-php-fpm:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}location ~ /\.ht {deny all;}location ~ /var/ {deny all;}
}
步骤 4:获取 Typecho 源码
自己先下载到本地
unzip typecho.zip -d typecho
rm typecho.zip
chown -R 1001:1001 typecho
测试连接数据库脚本\
test_db.php
<?php
// 数据库配置信息
$host = 'db'; // 数据库主机(Docker 中为服务名)
$dbname = 'typecho'; // 数据库名
$username = 'typecho_user'; // 用户名
$password = 'typecho_password'; // 密码
$port = 3306; // 端口号(MySQL 默认 3306)try {// 创建 PDO 连接$pdo = new PDO("mysql:host=$host;dbname=$dbname;port=$port;charset=utf8mb4", $username, $password);// 设置错误模式为异常$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);echo "数据库连接成功!<br>";// 测试查询$stmt = $pdo->query("SELECT VERSION()");$version = $stmt->fetchColumn();echo "MySQL 版本:$version<br>";// 测试创建表$createTableSQL = "CREATE TABLE IF NOT EXISTS `test_table` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`created_at` datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";$pdo->exec($createTableSQL);echo "测试表创建成功!<br>";// 插入测试数据$insertSQL = "INSERT INTO `test_table` (`name`) VALUES ('测试数据')";$pdo->exec($insertSQL);$lastInsertId = $pdo->lastInsertId();echo "数据插入成功,ID:$lastInsertId<br>";// 查询测试数据$selectSQL = "SELECT * FROM `test_table` WHERE `id` = :id";$stmt = $pdo->prepare($selectSQL);$stmt->bindParam(':id', $lastInsertId, PDO::PARAM_INT);$stmt->execute();if ($stmt->rowCount() > 0) {$row = $stmt->fetch(PDO::FETCH_ASSOC);echo "数据查询成功:ID={$row['id']},名称={$row['name']},创建时间={$row['created_at']}<br>";}// 删除测试表$dropTableSQL = "DROP TABLE IF EXISTS `test_table`";$pdo->exec($dropTableSQL);echo "测试表已删除!<br>";} catch (PDOException $e) {die("数据库连接失败:" . $e->getMessage());
}// 关闭连接(可选,脚本结束时会自动关闭)
$pdo = null;
?>
步骤 5:启动容器
docker-compose up -d
访问http://10.0.0.110/install.php
[root@docker-110 usr]# ls
plugins themes
[root@docker-110 usr]# mkdir uploads
步骤 6:完成安装
- 访问
http://localhost
进入安装向导。 - 数据库配置:
- 主机:
db
- 数据库名:
typecho
- 用户名:
typecho_user
- 密码:
typecho_password
- 主机:
- 设置管理员账号,完成安装
安装程序无法自动创建 config.inc.php 文件
您可以在网站根目录下手动创建 config.inc.php 文件, 并复制如下代码至其中
<?php
// site root path
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));// plugin directory (relative path)
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');// theme directory (relative path)
define('__TYPECHO_THEME_DIR__', '/usr/themes');// admin directory (relative path)
define('__TYPECHO_ADMIN_DIR__', '/admin/');// register autoload
require_once __TYPECHO_ROOT_DIR__ . '/var/Typecho/Common.php';// init
\Typecho\Common::init();// config db(重要:修改以下数据库信息)
$db = new \Typecho\Db('Pdo_Mysql', 'typecho_');
$db->addServer(array ('host' => 'db', // Docker环境中为服务名,传统服务器为localhost'port' => 3306, // 数据库端口'user' => 'typecho_user', // 数据库用户名'password' => 'typecho_password', // 数据库密码'charset' => 'utf8mb4','database' => 'typecho', // 数据库名'engine' => 'InnoDB','sslCa' => '','sslVerify' => true,
), \Typecho\Db::READ | \Typecho\Db::WRITE);
\Typecho\Db::set($db);