本文目录导读:

- 环境检查与配置
- 目录结构创建
- 配置文件生成
- 依赖管理
- 环境变量配置
- 数据库初始化
- 基础数据填充
- 文件权限设置
- 生成应用密钥
- 自动加载器优化
- 测试环境准备
- 安全初始化
- 预处理与检查
- 日志和缓存清理
- 版本控制初始化
- 任务调度和队列队列
- 实际案例:Laravel 初始化脚本
- 最佳实践
我来详细解释 PHP 项目初始化脚本通常包含的内容,以及它们的作用:
环境检查与配置
// 检查 PHP 版本
if (version_compare(PHP_VERSION, '7.4.0', '<')) {
die('需要 PHP 7.4 或更高版本');
}
// 检查必要的扩展
$requiredExtensions = ['pdo', 'mbstring', 'curl', 'json'];
foreach ($requiredExtensions as $ext) {
if (!extension_loaded($ext)) {
die("缺少扩展: {$ext}");
}
}
目录结构创建
# 创建标准目录结构
mkdir -p {app,config,public,storage,resources,routes}
mkdir -p app/{Controllers,Middleware,Models,Services}
mkdir -p storage/{cache,logs,uploads}
配置文件生成
// 生成 .env 文件
$envContent = "
APP_NAME=MyApp
APP_ENV=development
APP_DEBUG=true
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=root
DB_PASSWORD=
";
file_put_contents('.env', $envContent);
// 生成 config 文件
$config = [
'database' => [...],
'mail' => [...],
'cache' => [...]
];
依赖管理
# 生成 composer.json composer init # 安装依赖 composer install --no-interaction --prefer-dist # 或指定版本 composer require laravel/framework:^9.0
环境变量配置
// 加载 .env 文件
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
// 生成 APP_KEY
if (!file_exists('.env')) {
$key = bin2hex(random_bytes(32));
// 写入 .env
}
数据库初始化
-- 创建数据库 CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 运行迁移 php artisan migrate --force
基础数据填充
// 创建默认管理员
$admin = [
'username' => 'admin',
'password' => password_hash('admin123', PASSWORD_DEFAULT),
'email' => 'admin@example.com'
];
// 插入种子数据
db()->table('users')->insert($admin);
文件权限设置
# 设置存储目录权限 chmod -R 775 storage bootstrap/cache chmod -R 755 public chown -R www-data:www-data storage/
生成应用密钥
// 生成唯一的应用密钥
$key = 'base64:' . base64_encode(random_bytes(32));
file_put_contents('.env', "\nAPP_KEY={$key}", FILE_APPEND);
自动加载器优化
# 优化自动加载 composer dump-autoload --optimize # 生成类映射 composer dump-autoload --classmap-authoritative
测试环境准备
// 创建测试数据库
$testConfig = [
'host' => 'localhost',
'database' => 'myapp_test',
'username' => 'root',
'password' => ''
];
// 设置测试环境变量
putenv('APP_ENV=testing');
putenv('DB_DATABASE=myapp_test');
安全初始化
// 生成安全密钥
$securityKeys = [
'cipher' => 'AES-256-CBC',
'key' => bin2hex(random_bytes(32)),
'iv' => bin2hex(random_bytes(16))
];
// 设置会话安全
ini_set('session.cookie_httponly', 1);
ini_set('session.use_strict_mode', 1);
预处理与检查
# 检查 PHP 语法
find . -name "*.php" -exec php -l {} \;
# 检查配置
php -m | grep -E "pdo|curl|json"
日志和缓存清理
# 清理缓存 php artisan cache:clear php artisan view:clear php artisan config:clear # 创建日志文件 touch storage/logs/laravel.log
版本控制初始化
# 创建 .gitignore echo "/vendor/" > .gitignore echo "/storage/" >> .gitignore echo ".env" >> .gitignore git init
任务调度和队列队列
# 创建计划任务 crontab -e # 添加行: * * * * * php /path/to/project/artisan schedule:run # 启动队列 php artisan queue:table php artisan migrate
实际案例:Laravel 初始化脚本
#!/bin/bash
# Laravel 项目初始化脚本
echo "🚀 开始初始化 Laravel 项目..."
# 1. 创建项目
composer create-project laravel/laravel .
echo "✅ 项目创建完成"
# 2. 配置环境
cp .env.example .env
php artisan key:generate
echo "✅ 环境配置完成"
# 3. 创建数据库用户
mysql -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME}"
# 4. 安装前端依赖
npm install
npm run build
echo "✅ 前端依赖安装完成"
# 5. 运行迁移
php artisan migrate --seed
echo "✅ 数据库初始化完成"
# 6. 创建存储链接
php artisan storage:link
echo "✅ 存储链接创建完成"
echo "🎉 项目初始化完成!"
最佳实践
- 幂等性:脚本应该可以安全地多次运行
- 错误处理:包含良好的错误处理和回滚机制
- 日志记录:记录初始化过程中的所有操作
- 交互性:允许用户输入配置选项
- 可配置:支持通过参数或配置文件自定义
这个脚本的核心目标是简化开发环境搭建、确保一致性,并减少手动配置的错误。