PHPUnit+Composer规范目录结构下如何保持部署URL不变且无需修改代码
解决方案
方案1:调整Web服务器路径映射(最符合最佳实践)
这是业内通用的标准方案,同时满足你所有要求,还能提升生产环境安全性:
- 生产部署时无需上传
tests目录(测试代码仅需在本地/CI环境保留,生产环境完全不需要),将src、vendor目录整体上传到服务端非Web可访问的目录,比如/data/project/,此时目录结构为:/data/project/src/ /data/project/vendor/ - 修改Web服务器(Nginx/Apache)配置,将原路径
https://server/path/的物理根目录指向/data/project/src/即可 - 效果:用户访问
https://server/path/my.php和原地址完全一致,my.php中require_once '../vendor/autoload.php'的代码不需要任何修改,同时vendor、composer.json等敏感文件不在Web可访问目录下,避免了恶意访问风险
方案2:通过部署脚本适配(无法修改服务器配置时选用)
如果你没有权限修改Web服务器配置,可以通过CI/CD部署脚本自动处理,全程不需要修改源码仓库内的src目录文件:
- 部署流程中拉取代码后,执行
composer install --no-dev安装生产依赖(排除PHPUnit等开发包) - 新建部署包目录,将
src下所有文件、vendor目录统一拷贝到部署包根目录 - 用脚本命令自动替换
my.php中的自动加载引入路径,比如用sed命令:sed -i "s#require_once '../vendor/autoload.php';#require_once 'vendor/autoload.php';#g" 部署包路径/my.php - 将部署包整体上传到服务端
path目录即可,访问地址和原有完全一致
临时方案说明
你提到的保留原有根目录结构仅新增tests目录的方案虽然可运行,但不符合Composer生态的通用规范,后续项目迭代维护成本会更高,优先选择前两个方案。
内容的提问来源于stack exchange,提问作者user81529
相关产品推荐
相关产品推荐

