You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2 Linux实例STP迁移PHP项目后Composer无法正常工作

PHP项目迁移EC2内网实例后Composer依赖报错解决方法

问题现象

  • 原XAMPP环境的PHP项目迁移至内网Linux EC2实例(通过Putty私连访问),STP迁移后多数功能正常,但部分PHP文件调用Composer时触发致命错误,Apache日志信息如下:
    PHP Fatal error:  Uncaught Error: Failed opening required '/var/www/html/host/public_html/vendor/composer/../ezyang/htmlpurifier/library/HTMLPurifier.composer.php' (include_path='.:/usr/share/php') in /var/www/html/host/public_html/vendor/composer/autoload_real.php:41
    Stack trace:
    #0 /var/www/html/host/public_html/vendor/composer/autoload_real.php(45): {closure}()
    #1 /var/www/html/host/public_html/vendor/autoload.php(25): ComposerAutoloaderInitc3b80a39a0d2307602d3e5706c8f19a8::getLoader()
    #2 /var/www/html/host/public_html/accessdata.php(18): require('...')
    #3 {main}
      thrown in /var/www/html/host/public_html/vendor/composer/autoload_real.php on line 41, referer: http://host/page1.php
    
  • 项目依赖Composer引入PHPOffice实现Excel上传入库功能,执行composer install时出现超时错误:
    Failed to download myclabs/php-enum from dist: curl error 28 while downloading https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483: Connection timeout after 10001 ms
    

核心原因

内网EC2实例无法访问外网的GitHub、Packagist等Composer依赖源,导致composer install无法完整下载依赖包;迁移的vendor目录可能存在文件缺失、权限配置不当的问题,引发PHP自动加载失败。

解决步骤

1. 迁移外网完整的vendor目录

  • 在可联网的机器(如原XAMPP环境)中,进入项目根目录执行composer install,确保所有依赖包下载完成
  • 将项目根目录下的vendor目录打包,通过SCP等内网传输工具上传至EC2实例的/var/www/html/host/public_html/路径下
  • 修复目录权限,确保Apache进程可读取:
    sudo chown -R apache:apache /var/www/html/host/public_html/vendor
    sudo chmod -R 755 /var/www/html/host/public_html/vendor
    

2. 配置内网Composer镜像(可选)

如果内网搭建了私有Composer镜像源,执行以下命令配置:

composer config repo.packagist composer https://内网镜像地址

或直接修改项目根目录的composer.json,添加镜像配置:

"repositories": [
    {"type": "composer", "url": "https://内网镜像地址"}
]

3. 手动补全缺失依赖

若仅个别包缺失(如myclabs/php-enum):

  • 在可联网机器下载对应版本的包文件(可从GitHub Releases页面获取zip包)
  • 解压后将目录放置到/var/www/html/host/public_html/vendor/myclabs/php-enum下,确保目录结构与Composer自动生成的一致
  • 执行以下命令更新自动加载映射:
    composer dump-autoload
    

4. 检查PHP include_path配置

  • 编辑PHP配置文件(php.ini,路径通常为/etc/php/[版本]/apache2/php.ini),确保include_path包含项目vendor目录:
    include_path = ".:/usr/share/php:/var/www/html/host/public_html/vendor"
    
  • 重启Apache服务使配置生效:
    sudo systemctl restart apache2
    

内容的提问来源于stack exchange,提问作者Mega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:10:54