本文目录导读:

我来全面介绍PHP交付物,涵盖不同场景下的最佳实践和常见交付形式。
常见PHP交付物类型
A. 源代码包
project/ ├── src/ │ ├── Controllers/ │ ├── Models/ │ └── Views/ ├── config/ ├── public/ │ └── index.php ├── vendor/ # Composer依赖 ├── .env.example ├── composer.json ├── README.md └── requirements.txt
B. Docker 镜像
# Dockerfile FROM php:8.2-fpm # 安装扩展 RUN docker-php-ext-install pdo_mysql mysqli gd # 复制代码 COPY . /var/www/html # 设置权限 RUN chown -R www-data:www-data /var/www/html EXPOSE 9000 CMD ["php-fpm"]
C. Phar 包
// 创建Phar包
$phar = new Phar('app.phar');
$phar->buildFromDirectory('src/');
$phar->setStub($phar->createDefaultStub('index.php'));
交付物配置管理
环境配置示例
<?php
// config/app.php
return [
'env' => getenv('APP_ENV') ?: 'production',
'debug' => (bool) getenv('APP_DEBUG') ?: false,
'database' => [
'host' => getenv('DB_HOST') ?: 'localhost',
'name' => getenv('DB_NAME') ?: 'app_db',
'user' => getenv('DB_USER') ?: 'root',
'password' => getenv('DB_PASSWORD') ?: '',
],
'cache' => [
'driver' => getenv('CACHE_DRIVER') ?: 'file',
'prefix' => getenv('CACHE_PREFIX') ?: 'app_',
],
'log' => [
'level' => getenv('LOG_LEVEL') ?: 'warning',
'path' => __DIR__ . '/../storage/logs/app.log',
],
];
部署脚本示例
自动化部署脚本
#!/bin/bash
# deploy.sh
# 1. 检查环境
echo "Checking PHP version..."
php -v | head -n 1
# 2. 安装依赖
echo "Installing dependencies..."
composer install --no-dev --optimize-autoloader
# 3. 配置环境
echo "Configuring environment..."
if [ ! -f .env ]; then
cp .env.example .env
echo "Please update .env file with production settings"
fi
# 4. 优化
echo "Optimizing..."
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 5. 设置权限
echo "Setting permissions..."
chmod -R 755 storage bootstrap/cache
chmod -R 775 storage/logs
# 6. 数据库迁移
echo "Running migrations..."
php artisan migrate --force
# 7. 清理
echo "Cleaning up..."
php artisan optimize:clear
不同框架的交付物特点
Laravel 项目
# 典型的Laravel交付物结构 laravel-app/ ├── app/ ├── bootstrap/ ├── config/ ├── database/ ├── public/ ├── resources/ ├── routes/ ├── storage/ ├── tests/ ├── vendor/ ├── .env.example ├── artisan ├── composer.json └── server.php
WordPress 插件
<?php
/**
* Plugin Name: My Custom Plugin
* Plugin URI: https://example.com
* Description: Custom WordPress plugin
* Version: 1.0.0
* Author: Your Name
* License: GPL v2 or later
*/
// 插件核心代码
class MyCustomPlugin {
public function __construct() {
add_action('init', [$this, 'init']);
}
public function init() {
// 初始化代码
}
}
new MyCustomPlugin();
CI/CD 配置示例
GitHub Actions
# .github/workflows/deploy.yml
name: PHP Deploy
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Install Dependencies
run: composer install --no-progress --no-suggest
- name: Run Tests
run: vendor/bin/phpunit
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
script: |
cd /var/www/app
git pull origin main
composer install --no-dev
php artisan migrate --force
安全性交付清单
# PHP 项目交付安全检查清单 ## 代码安全 - [ ] 移除所有调试代码 (var_dump, dd, print_r) - [ ] 关闭错误显示 (display_errors = Off) - [ ] 删除所有测试文件和临时文件 - [ ] 检查SQL注入防护 - [ ] 验证XSS防护措施 ## 配置安全 - [ ] 更新数据库密码为强密码 - [ ] 更改默认管理员密码 - [ ] 配置HTTPS - [ ] 设置正确的文件权限 - [ ] 禁用危险PHP函数 (exec, system, shell_exec) ## 环境安全 - [ ] 更新composer.lock - [ ] 移除.env文件中的敏感信息 - [ ] 配置正确的CORS策略 - [ ] 设置Rate Limiting - [ ] 启用CSRF保护 ## 部署检查 - [ ] 确认数据库迁移脚本就绪 - [ ] 验证缓存机制 - [ ] 测试备份恢复流程 - [ ] 核对日志轮转配置
最佳实践建议
交付物优化
// 1. 自动加载优化
composer dump-autoload -o
// 2. 启用OPcache
opcache.enable=1
opcache.memory_consumption=128
// 3. 压缩静态资源
public function optimizeAssets() {
// 压缩CSS/JS
$this->minifyCSS();
$this->minifyJS();
// 合并文件
$this->combineAssets();
}
版本控制
# 使用Git标签管理版本 git tag -a v1.0.0 -m "Production release 1.0.0" git push origin v1.0.0 # 或使用语义化版本 major.minor.patch
推荐交付方案:
- 小型项目:源码包 + README
- 中大型项目:Docker镜像 + CI/CD
- 企业应用:完整的部署脚本 + 监控配置
关键是要确保:
- ✅ 环境配置分离
- ✅ 依赖管理完善
- ✅ 安全检查到位
- ✅ 文档清晰完整