本文目录导读:

- 方案一:传统 Web 项目(部署到服务器)——压缩包/归档
- 方案二:使用 Composer 构建(现代 PHP 标准流程)
- 方案三:构建为 PHAR 文件(命令行工具/库)
- 方案四:打包为桌面应用(带 GUI 或内嵌服务器)
- 方案五:Docker 镜像(容器化部署)
- 重点防护:打包时必须排除的文件
- 总结建议
PHP 项目的打包方式取决于你的项目类型(是 Web 应用、命令行工具还是桌面应用)以及分发目标(是部署到服务器还是交付给用户),以下是几种主流的打包方案:
传统 Web 项目(部署到服务器)——压缩包/归档
这是最常见的场景,通常将整个项目代码打包成一个压缩包(如 .zip 或 .tar.gz),然后上传到服务器解压。
步骤:
-
确定包含内容:通常不包含
vendor目录(依赖包)和node_modules,因为这些可以在服务器上用composer install和npm install重新安装。 -
使用 Git 导出(推荐):
# 导出当前 Git 仓库的干净代码(不含 .git 目录) git archive --format=zip HEAD -o project.zip # 或者导出指定分支/标签 git archive --format=tar.gz v1.0.0 -o project.tgz
-
使用命令行工具:
# 打包但不包含指定目录(Linux/macOS) zip -r project.zip . -x "vendor/*" -x "node_modules/*" -x ".git/*" # Windows 下推荐用 7-Zip 或 WinRAR 右键排除目录
-
添加部署脚本:在压缩包内包含一个
deploy.sh或README,说明如何安装依赖。
使用 Composer 构建(现代 PHP 标准流程)
这种方式侧重于依赖锁定和自动安装,通常配合 CI/CD 流水线。
核心工具: Composer 的 install 命令。
流程:
-
本地执行
composer install生成composer.lock文件(如果还没有)。 -
修改
composer.json,在scripts中添加打包后的清理命令(可选)。 -
在 CI/CD 环境(如 GitHub Actions)中执行:
- name: Install Dependencies run: composer install --no-dev --optimize-autoloader - name: Build Zip run: | zip -r release.zip . -x "*.git*" -x "tests/*" -x "node_modules/*"优势: 确保服务器环境与本地一致(通过
composer.lock)。
构建为 PHAR 文件(命令行工具/库)
PHAR 类似于 Java 的 JAR,是一个独立的可执行文件,适合分发 CLI 工具或库。
工具: Box(最流行)或 Phar 扩展的手写代码。
使用 Box 打包:
- 安装 Box:
composer require --dev humbug/box - 创建
box.json配置文件,指定入口文件和依赖。 - 运行
vendor/bin/box build,生成一个myapp.phar文件。
示例 box.json:
{
"main": "bin/index.php",
"output": "myapp.phar",
"force-autodiscovery": true,
"exclude-composer-files": true
}
优势: 用户只需下载一个文件即可运行(php myapp.phar)。
打包为桌面应用(带 GUI 或内嵌服务器)
如果项目需要打包成可双击运行的桌面程序(如基于 PHP + SQLite 的工具),通常需要嵌入一个 PHP 二进制程序。
工具: PHPDesktop、NativePHP(用 PHP 写桌面应用)或直接使用 php -S 内嵌服务器。
NativePHP 方法(较新):
composer require nativephp/cli php artisan native:install
它会将你的 Laravel 应用打包为 Windows/macOS 应用,内嵌 PHP 运行时,产出 .exe 或 .app 文件。
Docker 镜像(容器化部署)
如果开发环境是 Docker,这是最推荐的打包方式,因为它包含了 PHP 运行环境本身。
步骤:
- 编写一个
Dockerfile:FROM php:8.2-fpm COPY . /var/www/html WORKDIR /var/www/html RUN composer install --no-dev # 或 RUN docker-php-ext-install pdo_mysql
- 打包命令:
docker build -t myphpapp:v1.0 .
分发: 构建完成后,可以
docker push到私有仓库,或docker save导出为.tar文件。
重点防护:打包时必须排除的文件
无论使用哪种方案,建议将以下内容加入排除列表:
.git或.svnnode_modules/(除非你确认要在本地跑构建)tests/(测试代码).env(包含密码和密钥!重要)storage/logs/*.log*.sql备份文件- 开发工具缓存(如
.idea/,.vscode/)
总结建议
| 项目类型 | 最佳方案 |
|---|---|
| 最简 Web 部署 | git archive 或 zip 排除依赖包 |
| 严谨的服务器部署 | Composer 锁定依赖 + CI 打包 |
| 命令行工具 | 构建为 .phar 包 |
| 桌面软件 | NativePHP 或 PHPDesktop |
| 微服务/K8s | Docker 构建镜像 |
如果你的项目只是临时传给别人看看或者部署到虚拟主机(不支持 SSH),最稳妥的做法就是:压缩整个项目文件夹,但手动删除压缩包中的 vendor 和 .env 文件,然后附上一份简短的部署说明(composer install 和 cp .env.example .env)。