如何在没有 SSH 访问权限的共享主机(Shared Hosting)上运行 Composer?

13次阅读

在无ssh的共享主机上运行composer需将依赖安装移至本地完成再上传vendor目录,或打包为单文件,同时确保php版本、扩展和路径与主机环境严格一致。

如何在没有 SSH 访问权限的共享主机(Shared Hosting)上运行 Composer?

在没有 SSH 访问权限的共享主机上运行 Composer,核心思路是:把依赖安装过程从服务器端转移到本地完成,再将生成的 vendor 目录上传。Composer 本身无法直接在无命令行的环境里执行,但你可以绕过它——关键是确保自动加载和依赖路径完全兼容目标主机环境。

本地完整安装并上传 vendor 目录

这是最常用、最可靠的方法。你不需要在共享主机上运行任何 Composer 命令,只需保证本地 PHP 版本与主机一致(或更低),并按生产模式安装:

  • 在本地项目根目录执行:composer install --no-dev --optimize-autoloader
  • 确认 composer.jsoncomposer.lock 已提交,且未忽略 vendor/
  • 用 FTP/SFTP 将整个 vendor/ 目录(连同 autoload.php)上传到主机对应位置
  • PHP 脚本中用 require 'vendor/autoload.php'; 正常引入即可

使用“无 Vendor”部署:用 Composer Compile 或 Phar 打包

如果你不能上传大量小文件(比如某些主机限制单次上传数量或禁止写入 vendor/),可考虑打包成单文件:

  • composer install --no-dev --optimize-autoloader 生成优化后的自动加载器
  • 借助工具Boxphpab 合并为一个 autoload.php 或 Phar 文件
  • 上传该单文件,然后 require 'vendor-compiled.php'; 替代原 autoload
  • 注意:部分扩展(如 ext-curl)仍需主机支持,打包不解决扩展缺失问题

检查并适配 PHP 版本与扩展限制

共享主机常禁用某些函数(proc_openexec)或缺少扩展(如 jsonmbstringopenssl),这会导致 Composer 安装失败或运行时出错:

  • 在本地 composer.json 中显式声明 "platform": {"php": "7.4.33"}(填主机实际 PHP 版本)
  • 运行 composer install 前加 COMPOSER_MEMORY_LIMIT=-1 防止内存不足中断
  • 上传后,在主机上建个 info.php,用 phpinfo() 确认必需扩展已启用

替代方案:用纯 ZIP 预构建 + 自定义自动加载

如果连 vendor/ 上传都受限(例如只允许上传到 /public_html 下),可手动精简依赖:

  • 下载所需库的稳定 ZIP 包(如从 gitHub Releases 或 Packagist 下载 .zip
  • 解压后重命名并放入统一目录(如 lib/monolog/
  • 写一个简易 PSR-4 自动加载器,或直接 require 关键文件
  • 适合轻量项目(如只用 Monolog + Guzzle),不适合深度依赖链

基本上就这些。没有 SSH 不等于不能用 Composer,只是要把“构建”和“运行”两个阶段彻底分开。关键不是技术多炫,而是版本对得上、路径写得准、扩展有保障。

text=ZqhQzanResources