共享主机无法运行 Composer 命令,故全局配置无效;唯一可行方案是本地构建完整 vendor 目录并上传,需严格匹配 PHP 版本、使用 --no-dev --optimize-autoloader --prefer-dist --no-plugins 参数,并确保 autoload 文件路径为相对路径。

共享主机上根本不能用 composer config -g
绝大多数共享主机(cPanel、SiteGround、Bluehost 等)禁用 exec、proc_open,连 composer 命令本身都执行不了,更别说写全局配置。你本地配好 repo.packagist,上传到服务器后根本不会被读取——因为服务器压根不运行 Composer 命令,~/.composer/config.json 文件在服务器上完全无意义。
常见错误现象:command not found、Permission denied、proc_open() has been disabled。这不是配置问题,是环境限制本身决定的。
- 别在
~/public_html/或 Web 根目录下尝试任何composer install操作,目录不可写,必失败 - 不要指望通过 FTP 上传
~/.composer目录来“模拟”全局配置,PHP 进程无权读取或加载它 - 即使你有 SSH 权限,也得先确认
which composer是否返回路径,否则config -g就是空转
composer.json 里的 repositories 在共享主机上多数无效
项目级 repositories 配置只在 composer install/update 运行时生效。而共享主机上这俩命令基本跑不起来,所以你在 composer.json 里写的镜像地址,只是个“待执行的指令”,永远没机会触发。
更麻烦的是:如果 repositories 里混了私有 Git 地址或 fxp-asset-plugin 类插件源,本地构建时还可能成功,但上传后因主机没装 Git 或禁用 symlink(),导致 vendor/autoload.php 末尾引入的是硬编码绝对路径(如 require '/home/user/xxx/vendor/composer/autoload_real.php'),一运行就 Class not found。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 上传前必须删掉
composer.json中所有"scripts"、"repositories"(除非是纯 dist 包形式)、"config"下的bin-dir或home - 避免使用
"type": "vcs"或"type": "package"+"source"字段,它们依赖 Git 或远程解析,共享主机不支持 - 若必须保留私有包,改用
"dist"字段手动指定 ZIP URL,并确保该 ZIP 可被公开访问且 HTTPS 可达
本地构建 vendor/ 必须满足三个硬条件
真正可行的路径只有一条:本地生成完整 vendor/,再上传。但这不是复制粘贴就行的事,漏掉任一条件,上线就报错。
-
PHP版本必须与共享主机一致(至少主版本相同),比如主机是PHP 8.1,你就不能用8.3跑composer install - 必须加
--no-dev --optimize-autoloader(简写-o),否则autoload_classmap.php里会漏类,或依赖opcache.file_cache(共享主机常关闭) - 必须加
--prefer-dist --no-plugins,强制走 ZIP 包、禁用插件,避开 Git 和钩子脚本执行 - 运行前清空缓存:
composer clear-cache,再删掉项目下的vendor/和composer.lock,重装
上传后 autoload.php 加载失败的真实原因
文件全传上去了,vendor/autoload.php 也在,但 class_exists('Monolog\Logger') 返回 false?大概率不是网络或权限问题,而是路径固化错了。
典型表现:vendor/autoload.php 文件末尾包含类似 require __DIR__ . '/composer/autoload_real.php'; 是安全的;但如果出现 require '/home/user/xxx/vendor/composer/autoload_real.php'; 这种绝对路径,说明本地构建时没清缓存或用了旧 lock 文件。
- 入口文件里别写
require __DIR__.'/vendor/autoload.php';,相对路径极易错位;改用require_once dirname(__DIR__).'/vendor/autoload.php';或结合$_SERVER['DOCUMENT_ROOT']拼绝对路径 - 上传后立即建
test-autoloader.php验证:var_dump(class_exists('Monolog\Logger'));,返回true才算过关 - 检查
vendor/composer/autoload_classmap.php里所有路径是否都是相对的(含__DIR__动态拼接),否则重装前先composer dump-autoload -o
Class not found 就不是报错,而是静默失效。

















