phpenv 不支持一键导出站点,其“导出”仅保存json格式的站点元信息;完整备份需手动涵盖代码、phpenv配置(site/*.json)和数据库(mysqldump),还原时须重新执行composer install并注意db_host和php版本兼容性。

phpEnv 本身不提供“一键导出站点”功能
phpEnv 是 Windows 下的绿色集成环境,定位是本地开发调试,不是部署工具。它没有内置的站点打包、配置导出或项目快照机制——所谓“一键导出”在官方文档、界面菜单和 CLI 命令中均不存在。
用户常误以为「站点配置」导出 = 整个站点可迁移,但实际 phpEnv 的站点管理仅保存路径、端口、PHP 版本映射等元信息,不包含代码、数据库、Composer 依赖或 .env 文件等内容。
-
phpEnv界面里的「导出」按钮(如有)通常只导出当前站点的 JSON 配置片段,比如{"name":"myapp","path":"D:\www\myapp","php":"7.4"} - 该 JSON 无法直接还原运行环境:缺少 MySQL 数据库 dump、
vendor/目录、Nginx/Apache 虚拟主机完整配置、SSL 证书等 - 绿色版安装目录下
datasite存的是站点注册记录,不是可执行包
手动备份 phpEnv 站点的可靠做法
真正能复原一个 phpEnv 站点的备份,必须覆盖三类内容:代码 + 配置 + 数据。不能跳过任何一项,否则上线即报错。
-
代码部分:直接复制整个站点根目录(如
D:wwwmyapp),确保包含composer.json、.env、public/、app/等全部子目录 -
phpEnv 配置部分:导出
%USERPROFILE%phpenvdatasite*.json(Windows 用户目录下的站点定义),并记下所用 PHP 版本号(如7.4.33) -
数据库部分:用 phpMyAdmin 或命令行导出 SQL:
mysqldump -u root -p myapp_db > myapp_db_20260421.sql;注意 phpEnv 自带的 MySQL 默认无密码,但若改过需带上-p后输入 -
额外提醒:如果用了 Redis/Memcached,其数据默认不持久化,备份前需确认是否需要
SAVE或BGSAVE;session 存文件的话,检查session.save_path指向的目录是否一并复制
还原时最容易被忽略的两个坑
即使你把代码、SQL、JSON 都备齐了,还原到另一台机器或重装后 phpEnv 仍可能跑不起来,关键在以下两点:
-
composer install必须在目标机器上重新执行 ——vendor/不跨平台兼容,且 phpEnv 不同版本的 PHP ABI 可能不一致(比如从 8.1.2 升级到 8.3.5 后,扩展二进制不匹配) -
.env中的DB_HOST=127.0.0.1通常没问题,但若用了DB_HOST=localhost,在某些 phpEnv MySQL 配置下会走 socket 而非 TCP,导致连接失败;统一改成127.0.0.1更稳妥 - phpEnv 的「PHP 版本切换」是软链接行为,备份时不要复制
%USERPROFILE%.phpenversions下的 PHP 安装目录 —— 它体积大、含系统路径硬编码,应通过 phpEnv 界面重新下载对应版本
想自动化?用脚本补足缺失环节
既然 phpEnv 没原生导出,就自己写个批处理补位。下面这个 backup_site.bat 能完成核心动作(需放在站点根目录执行):
set SITE_NAME=myapp set BACKUP_DIR=D:ackup set TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2% set TIMESTAMP=%TIMESTAMP: =0% xcopy /E /I "%CD%" "%BACKUP_DIR%%SITE_NAME%_%TIMESTAMP%" mysqldump -u root myapp_db > "%BACKUP_DIR%%SITE_NAME%_%TIMESTAMP%db.sql" copy "%USERPROFILE%phpenvdatasite%SITE_NAME%.json" "%BACKUP_DIR%%SITE_NAME%_%TIMESTAMP%site_config.json"
注意:该脚本假设 MySQL 无密码;若有密码,把 mysqldump 行改为 mysqldump -u root -pYourPass myapp_db,但密码明文有风险,生产环境建议用 my.cnf 配置文件方式免密。
复杂点在于数据库字符集和时区一致性 —— phpEnv 默认 MySQL 是 utf8mb4,但导出 SQL 若没加 --default-character-set=utf8mb4,还原时可能乱码。这点几乎没人检查,直到中文字段变问号才回头找。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











