require(供应商/自动加载.php): 无法打开流

2022-08-30 06:15:16

我知道这个问题已经发布了很多次,但对我来说,这似乎是一个不同的问题。

确实,这个错误

警告:require(vendor/autoload.php):无法打开流:第 3 行的 C:\xampp\htdocs\site_web\send_mail.php 中没有此类文件或目录

致命错误:require(): 无法打开所需的“vendor/autoload.php”(include_path='C:\xampp\php\PEAR')在第 3 行的 C:\xampp\htdocs\site_web\send_mail.php

出现在代码的开头,从这一行开始:

require 'vendor/autoload.php';

所以,我想我的计算机中一定有一个/vendor/autoload.php文件(我已经安装了作曲家并运行了)。composer require phpmailer/phpmailer

因此,我在Windows命令行中使用:查找此文件,并在此处找到一个: ,dir /s autoload.phpC:\Windows\SysWOW64\vendor\autoload.php

但对我来说,syswow64文件夹没有任何自动加载.php,我没有看到我在这里缺少什么。


答案 1

您缺少的是 运行 ,这将导入您的软件包并创建供应商文件夹以及自动加载脚本。composer install

确保您的相对路径正确无误。例如,PHPMailer 中的示例脚本位于 项目根目录下方的 中,因此从那里加载 composer 自动加载程序的正确相对路径为 。examples/../vendor/autoload.php

您在自动加载.php可能是全局作曲家安装 - 您通常会在其中放置phpc,phpunit,phpmd等内容。C:\Windows\SysWOW64\vendor\autoload.php

composer update不是一回事,可能不是你想用的。如果您的代码是使用当前的包版本进行测试的,那么运行可能会导致中断,这可能需要进一步的工作和测试,因此除非您有特定的原因并确切了解其含义,否则不要运行。为了进一步澄清 - 您可能只应该在本地运行,而不是在服务器上运行,因为它很可能在生产中破坏应用程序。updateupdatecomposer update

我经常看到有人抱怨人们不能使用作曲家,因为他们不能在他们的服务器上运行它(例如,因为它是共享的,他们没有shell访问权限)。在这种情况下,您仍然可以使用 composer:在本地运行它(没有此类限制的环境),并上传它生成的本地供应商文件夹以及所有其他 PHP 脚本。

运行还会执行 一个 ,如果您当前没有文件夹(如果您重新签出项目,则正常),那么它将创建一个文件夹,并且还会覆盖您已经拥有的任何文件,更新其中标记的包版本,这就是潜在的危险。composer updatecomposer installvendorcomposer.lock

同样,如果您当前没有文件(例如,如果它未提交到项目中),则还可以有效地执行.因此,了解两者之间的区别至关重要,因为它们绝对不可互换。composer.lockcomposer installcomposer update

也可以通过命名来更新单个包,例如:

composer update ramsey/uuid

这将重新解析中指定的版本,并将其安装在供应商文件夹中,并更新文件以匹配。如果您只需要对一个软件包进行特定更新,则与一般软件包相比,这不太可能引起问题。composer.jsoncomposer.lockcomposer update

不包含自己的文件是正常的;修复版本取决于应用程序,而不是他们使用的库。因此,库开发人员应保持与应用程序开发人员所需的更广泛的主机环境的兼容性。例如,库可能与 Laravel 5、6、7 和 8 兼容,但使用它的应用可能出于其他原因需要 Laravel 8。composer.lock

Composer 2.0删除了安装和更新结果之间的任何剩余不一致;如果你运行的是 composer 1.x,你绝对应该升级


答案 2

如果在运行时也收到错误

composer install

只需先运行此命令

composer dump-autoload

此命令将清理所有已编译的文件及其路径。


推荐