【发布时间】:2021-10-16 00:47:02
【问题描述】:
我正在尝试将使用 PHP Composer 的小型 Web 应用程序从旧的过时服务器转移到新服务器。
在新服务器上,我已经运行 composer install 来安装 composer.lock 文件中的依赖项。
Web 应用程序需要一个配置文件来设置自己(并不是说它做了很多设置),其中包括行
require_once __DIR__ . '/vendor/autoload.php';
...哪个应该相对于配置文件定位自动加载器,并使系统知道 Composer 安装的包。
但是,这似乎无法正常工作,因为当网络应用程序尝试使用 SwiftMailer(通过 Composer 安装)时,它会说:
PHP 致命错误:未捕获错误:调用未定义方法 Swift_SmtpTransport::newInstance()
...在调用它的文件中,这显然表明它不知道它并且找不到它。
有没有一种方法可以有意义地检查自动加载器包含的结果是什么,看看它在做什么(或没有做什么)?
【问题讨论】:
-
newInstance()不是该类中的当前方法。看来您的代码需要的 Swift 版本比新服务器安装的版本旧。如果您在新服务器上运行composer update或者如果项目的存储库收到从未安装到旧服务器的提交,则可能会发生这种情况。我会在两台服务器上运行composer show以查看 Swift 的版本是否匹配。您也许可以更新composer.json以将其锁定为旧版本。 -
我还要确保您在两台服务器上运行相同的 PHP 版本,这可能会导致依赖版本不匹配。实现你现在所追求的最可靠的方法是使用 Docker 或其他东西,这样你就可以隔离所有依赖项、版本等
-
@AlexHowansky,很好,谢谢!我正在根据 SwiftMailer v6 文档审查站点代码,但是在漫长的一天结束时,总体进展相当缓慢,我想我的眼睛现在看到了他们想看到的东西,而我没有注意到这些(微妙的)方法变化!我已经更新了代码(正如我所说,幸运的是它是一个简单的应用程序!)现在它可以工作了,所以我认为 Composer 可能是问题的原因是错误的!
-
@dir,将这些旧的内部应用程序从旧的 PHP 5 服务器(和旧的操作系统)拖到新的 PHP 7 服务器是移动它们的主要原因。在一个理想的世界里,我们会有时间和资源来研究 Docker 等,但遗憾的是,今天不是我们的日子!谢谢! ;-)
-
感谢@AlexHowansky,我的问题现在得到了解决(事实证明,我对可能导致问题的原因的初步诊断实际上是不正确的)。我现在结束这个问题的合适的“SO方式”是什么?我应该删除它吗?
标签: php composer-php