我知道这个问题已经发布了很多次,但对我来说,这似乎是一个不同的问题。
事实上,这个错误
在C:\xampp\htdocs\site_web\send_mail.php第3行中没有这样的文件或目录
致命错误:require():在C:\xampp\htdocs\site_web\send_mail.php第3行打开required 'vendor/autoload.php' (include_path='C:\xampp\php\PEAR')失败
从这一行开始出现在我的代码中:
require 'vendor/autoload.php';
所以,我猜在我的计算机中一定有一个/vendor/autoload.php文件(我已经安装了composer并运行composer require phpmailer/phpmailer)。
所以,我在Windows命令行中使用:dir /s autolload .php查找这个文件,并在这里找到了一个:C:\Windows\SysWOW64\vendor\ autolload .php,
但对我来说,syswow64文件夹没有看到autoload.php,我没有看到我在这里遗漏了什么。
您缺少的是运行composer install,它将导入您的包并创建供应商文件夹以及自动加载脚本。
确保您的相对路径正确。例如,PHPMailer中的示例脚本在examples/中,位于项目根目录下,因此从那里加载composer自动加载器的正确相对路径应该是../vendor/autoload.php。
你在C:\Windows\SysWOW64\vendor\ autolload .php中找到的autolload .php可能是一个全局编写器安装,你通常会在其中放置phpcs、phpunit、phpmd等东西。
Composer update不是同一件事,可能不是你想要使用的。如果您的代码是用当前的包版本测试的,那么运行update可能会导致破坏,这可能需要进一步的工作和测试,所以不要运行update,除非您有特定的理由并确切地理解它的含义。为了进一步澄清——你应该只在本地运行composer update,而不是在你的服务器上,因为它很可能会破坏生产中的应用程序。
我经常看到人们抱怨说,他们不能使用composer,因为他们不能在自己的服务器上运行它(例如,因为它是共享的,他们没有shell访问权限)。在这种情况下,您仍然可以使用composer:在本地运行它(一个没有这种限制的环境),并上传它生成的本地供应商文件夹以及所有其他PHP脚本。
运行composer update也会执行composer安装,如果当前没有供应商文件夹(正常情况下,如果您有一个新的项目签出),那么它会创建一个,并覆盖任何composer。锁定您已经拥有的文件,更新其中标记的包版本,这是潜在的危险。
类似地,如果您目前没有作曲家。锁定文件(例如,如果它没有提交到项目中),那么composer install也会有效地执行一个composer更新。因此,理解两者之间的区别至关重要,因为它们肯定是不可互换的。
也可以通过命名来更新单个包,例如:
composer update ramsey/uuid
这将重新解析编写器中指定的版本。并将其安装到你的供应商文件夹中,并更新你的作曲器。锁定文件以匹配。如果您只需要对一个包进行特定的更新,那么这比一般的编写器更新更不可能引起问题。
库中不包含作曲家是很正常的。锁文件自己;修复版本取决于应用程序,而不是它们使用的库。因此,库开发人员需要保持与应用程序开发人员所需要的更广泛的主机环境的兼容性。例如,一个库可能与Laravel 5、6、7和8兼容,但使用它的应用程序可能出于其他原因需要Laravel 8。
Composer 2.0删除了安装和更新结果之间的任何剩余不一致;如果你正在运行composer 1。你一定要升级。