不能在虚拟主机上直接运行 composer install,因为共享主机禁用 proc_open、exec 等函数,public_html 不可写,无 Git,memory_limit 过低;唯一可行方案是本地用相同 PHP 版本执行 composer install --no-dev --optimize-autoloader --prefer-dist --no-plugins 后上传 vendor 和 composer.lock。

为什么不能在虚拟主机上直接运行 composer install
因为绝大多数共享虚拟主机禁用 proc_open、exec 等函数,且 public_html 目录默认不可写。你上传 composer.json 后试图用 PHP 脚本触发安装,大概率会卡在:proc_open() has been disabled、Permission denied(无法创建 vendor/)、Cloning into ''(主机没装 Git)或直接 500 错误(memory_limit=64M 不够)。这不是配置问题,是硬性限制,绕不过。
composer install --no-dev --optimize-autoloader 必须本地跑
唯一可行路径:在你本地机器上,用和虚拟主机**完全一致的 PHP 版本**(比如主机是 PHP 8.1.27,你就得用 8.1.x),执行以下命令:
-
composer clear-cache—— 清掉旧缓存,避免混入不兼容包 -
rm -rf vendor composer.lock—— 彻底干净起步 -
composer install --no-dev --optimize-autoloader --prefer-dist --no-plugins—— 四个参数缺一不可:--no-dev跳过 PHPUnit 等开发依赖;--optimize-autoloader(或-o)生成静态 classmap,不依赖 opcache.file_cache;--prefer-dist强制走 zip 包,避开 Git;--no-plugins防止插件因权限失败中断
跑完后确认 vendor/autoload.php 存在,且 vendor/composer/autoload_classmap.php 文件非空(空文件 = 自动加载失效)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
上传后 Class not found 的真实原因
不是 vendor 没传全,而是 autoloader 加载路径错了或被限制。常见情况:
- 入口文件里写的是
require __DIR__.'/vendor/autoload.php';,但项目实际放在public_html/myapp/,而域名绑定了public_html/—— 此时__DIR__指向根目录,路径就错了一级。应改为require dirname(__DIR__).'/myapp/vendor/autoload.php';或更稳妥的绝对路径 - 主机开了
open_basedir,而vendor/目录不在允许范围内 —— 查错误日志,看是否有open_basedir restriction in effect提示 -
vendor/autoload.php权限设成了600或400,PHP 进程读不了 —— 改成644即可
私有仓库依赖怎么处理(无 SSH 时)
如果 composer.json 里引用了 GitHub/GitLab 私有包,别用 git@ 地址,改用 HTTPS + Token:
- 在 GitHub/GitLab 创建 Personal Access Token,只勾选
read:packages或repo(按需) - 在项目根目录新建
auth.json(记得加进.gitignore),内容为:{ "http-basic": { "github.com": { "username": "your-github-username", "password": "your-token-here" } } } - 确保
auth.json也上传到服务器,且权限为600(部分主机对 644 也会拒绝读取) - 部署前本地重新
composer install,让 Composer 把 token 注入到vendor/composer/installed.json和 classmap 中 —— 上传后它不依赖实时认证
最易忽略的一点:本地 PHP 版本、扩展(ext-zip、ext-openssl)必须和线上一致,否则哪怕 vendor 目录传全了,require 时也可能报 undefined symbol 或 failed to open stream —— 这类错误不会明确提示版本不匹配,只能靠比对 phpinfo。

















