首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >require(vendor/autoload.php):无法打开流

require(vendor/autoload.php):无法打开流
EN

Stack Overflow用户
提问于 2016-12-18 22:33:51
回答 16查看 738K关注 0票数 196

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

事实上,这个错误

警告:需要(供应商/autoload.php):无法打开流:第3行的C:\xampp\htdocs\site_web\send_mail.php中没有这样的文件或目录

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

出现在我的代码开头,下面这一行:

require 'vendor/autoload.php';

因此,我猜我的计算机中一定有一个/vendor/autoload.php文件(我已经安装了composer并运行了composer require phpmailer/phpmailer)。

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

但对我来说,syswow64文件夹与autoload.php没有什么可看的,我看不到我在这里遗漏了什么。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2016-12-18 23:01:06

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

确保相对路径是正确的。例如,PHPMailer中的示例脚本位于项目根目录下的examples/中,因此从那里加载composer自动加载器的正确相对路径应该是../vendor/autoload.php

您在C:\Windows\SysWOW64\vendor\autoload.php中找到的autoload.php可能是一个全局composer安装-您通常会在其中放置诸如phpcs、phpunit、phpmd等内容。

composer update is 不是同一件事,也可能不是你想要使用的东西。如果你的代码是用你当前的包版本测试的,那么运行update可能会导致破坏,这可能需要进一步的工作和测试,所以不要运行update,除非你有特殊的理由并确切地理解它的含义。为了进一步澄清-你可能只应该在本地运行composer update,而不应该在你的服务器上运行,因为它很可能会破坏生产中的应用程序。

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

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

类似地,如果您当前没有composer.lock文件(例如,如果它没有提交到项目中),那么composer install也可以有效地执行composer update。因此,理解两者之间的区别是至关重要的,因为它们绝对不能互换。

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

composer update ramsey/uuid

这将重新解析composer.json中指定的版本,并将其安装在供应商文件夹中,然后更新composer.lock文件以与之匹配。如果您只需要对一个包进行特定的更新,那么与一般的composer update相比,这种方式产生问题的可能性要小得多。

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

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

票数 352
EN

Stack Overflow用户

发布于 2017-11-28 01:17:28

如果在运行以下命令时也出现错误

composer install

只需先运行此命令

composer dump-autoload

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

票数 62
EN

Stack Overflow用户

发布于 2018-01-28 22:26:11

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41209349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档