要求(供应商/autoload.php):无法打开流

Posted

技术标签:

【中文标题】要求(供应商/autoload.php):无法打开流【英文标题】:require(vendor/autoload.php): failed to open stream 【发布时间】:2022-01-03 18:41:21 【问题描述】:

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

确实是这个错误

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

致命错误:require(): Failed opening required 'vendor/autoload.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\site_web\send_mail.php on line 3

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

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 没什么可看的,我看不到我在这里缺少什么。

【问题讨论】:

如果您在预安装脚本部分的 composer.json 文件中启动或关闭了 php artisan,也会发生这种情况。似乎需要 vendor 文件夹中的文件来执行维护模式,目前尚不可用。 【参考方案1】:

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

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

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

composer update 不是相同的东西,并且可能不是您想要使用的东西。如果您的代码是用您当前的包版本测试的,那么运行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。

【讨论】:

如何运行 composer install?它不被识别为命令 Google cloud for PHP 提供 composer 来安装它的依赖,你只需要设置它,看这里:cloud.google.com/appengine/docs/flexible/php/… 是的,谷歌云需要运行composer install,然后它将读取您的composer.json 文件的内容并将所有依赖项安装到vendor 文件夹中。如果没有这样做,我只能建议阅读我指出的文档并仔细检查所有内容。这确实是“上传”和“部署”的区别。 @Synchro 是的,该编辑更有意义 - 它不再表明缺少供应商目录本身会改变行为,这是我在编辑中试图纠正的感知问题。关于库的注释也是一个很好的注释,因为我已经看到这会引起一些混乱,因为作曲家并没有在库和使用它们的项目之间做出强烈的区分。 :) 对。当人们使用 PHPMailer 时,我经常看到的是他们下载了 tarball,然后对 PHPMailer 自己的 composer.json 文件进行了编辑,而没有意识到他们不应该碰它,而应该自己制作。灾难的秘诀!【参考方案2】:

如果你在运行时也遇到错误

composer install

先运行这个命令

composer dump-autoload

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

【讨论】:

【参考方案3】:

@Bashir 几乎帮助了我,但我需要:

composer update --no-scripts

显然这会阻止在执行 artisan 之前包含任何脚本。

我在页面的中间找到了答案: https://laracasts.com/discuss/channels/general-discussion/fatal-error-class-illuminatefoundationapplication-not-found-in-pathtoprojectbootstrapappphp-on-line-14?page=0

【讨论】:

除非你完全理解它在做什么,否则不要这样做;它很可能会破坏生产中的应用程序。 请在您的答案中添加一些解释,以便其他人可以从中学习 @NicoHaase 我在laracasts.com 偶然发现了这个解决方案,我正在拼命寻找一种方法来让我的作曲家更新工作。在包含各种解决问题的方法的页面的大约一半处,有一篇简陋的小帖子建议使用 --no-scripts。我不知道为什么会这样,但确实有效!【参考方案4】:

首先确保你已经安装了composer。

composer install

如果您已经安装,请更新作曲家。

composer update

【讨论】:

这个答案需要认真编辑才能对用户有所帮助。请明确说明您的建议并提供在这种情况下有用的代码示例。 请为您的答案添加更多解释。在什么情况下composer update应该解决任何问题?【参考方案5】:

正确的autoload.php配置:

A) 快速回答

您的 autoload.php 路径错误。 IE。 C:\Windows\SysWOW64\vendor\autoload.php 迄今为止:您需要将其更改为:C:\Users\<Windows User Name>\vendor\autoload.php


B) 示例步骤: 我们以facebook/php-graph-sdk 为例;根据需要更改为Package Name

    安装composer.exe 打开 CMD 提示。 + R + 输入CMD 运行此命令:composer require facebook/graph-sdk 在您的 PHP 页面中包含路径:require_once 'C:\Users\<Windows User Name>\vendor\autoload.php'; 为您的包定义配置SecretsAccess Token...等等。 编码愉快。

C) 更多详情:

在 windows 上安装 composer 会为你的 pacakges 设置这个默认路径;您可以在那里找到它们并包含自动加载器路径:

C:\Users\<Windows User Name>\vendor

对于您提出的相同问题;答案是WAMP Server 64 BIT for Windows 的这条路径。

然后只需在您的 PHP 应用程序中更改:

require_once __DIR__ . '/vendor/autoload.php'; 

收件人:

require_once 'C:\Users\<Windows User Name>\vendor\autoload.php'; 

Find your windows username下C:\Users\

在所有这一切之前,正如之前在 B) 中所指出的,您需要运行以下命令:

composer require <package name>

以 facebook php SDK 为例:

composer require facebook/graph-sdk

感谢您提出这个问题;感谢它帮助我解决了类似的问题并结束了编写这个简单的教程。

【讨论】:

一般来说,Composer 旨在处理安装在本地安装到特定项目的包,因此直接从系统或用户配置文件目录包含 autoload.php 将是 非常不寻常。【参考方案6】:

如果你从 Github 克隆了你的项目或从其他地方得到它,你会遇到这个错误。那是因为您缺少 vendor 文件夹 和其他文件。 vendor 文件夹 包含依赖于您的项目的包。包依赖项存储在composer.json 文件中,并且该文件夹在推送到 Github 时被排除

只需运行即可修复此错误:

composer install

然后您将获得项目所需的所有资产。

【讨论】:

【参考方案7】:

首先,查看 index.php 中的路由

require __DIR__.'/../vendor/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

在我的情况下,路线不起作用,我必须查看目录。

【讨论】:

节省了我的时间,谢谢,你得到了 1 个赞。干得好【参考方案8】:

对我来说 只需先运行此命令

composer dump-autoload

添加供应商文件夹。

然后运行这个命令

composer update --no-scripts

更新作曲家。

【讨论】:

【参考方案9】:

运行composer update。就是这样

【讨论】:

是的,这已经是公认答案的一部分。复制它有什么意义? 这也是个坏建议,可能会破坏生产中的应用程序。 请在您的答案中添加一些解释,以便其他人可以从中学习 从作曲家帮助中提取:The update command reads the composer.json file from the current directory, processes it, and updates, removes or installs all the dependencies. 所以。如果你这样做,无论你在哪里(测试环境,本地,生产环境),你所有的项目依赖都可能会发生变化或删除。所以这是一个糟糕的解决方案,没有解释。投反对票。【参考方案10】:

我的机器上有这条路径:

C:/xampp5.0/htdocs/project-recordando-symfony/project-recordando-symfony

然后我运行composer install 或/和composer update 并返回此错误:

ErrorException ZipArchive::extractTo...

那个错误是因为你的路径太长了,我改成:

C:/xampp5.0/htdocs/p-symfony/*

并且工作了!

【讨论】:

这似乎是另一个问题的答案,因为您遇到了不同的错误。您可以ask and answer your own question,以便看到相同错误的人更容易找到。 请分享更多细节。这个答案与给定的问题有什么关系?【参考方案11】:

在您的项目文件夹中,缺少 vendor 文件夹,因此您收到此错误:

警告:require(vendor/autoload.php):打开流失败:没有这样的文件或目录

当你通过git下载项目时,下载的项目没有vendor文件夹

你需要/vendor,因为你所有的包都在那里,包括 Laravel 使用的所有类。供应商目录包含您的 Composer 依赖项。

解决方法很简单,只要运行这个命令:

composer update --no-scripts 
composer update
composer update --no-scripts 它将跳过在composer.json 文件中定义的脚本的执行。 composer update 它将更新您在composer.json 文件中指定的依赖关系。

使用此命令,您将在您的项目中重新创建 vendor 文件夹,之后您的项目将开始正常工作。

【讨论】:

你还没有解释为什么你想跳过执行脚本,并且应该真正提到最常见的命令将是composer install,如果项目有一个正确提交composer.lock 文件。 如果您刚刚签出现有项目,则不应运行 composer update【参考方案12】:

为 ex: 创建带有必要库的 composer.json 文件:


    "require": 
        "mpdf/mpdf": "^6.1"
    

在 composer.json 存在的地方执行以下命令:

composer install

在 Drupal 的情况下:

使用 drupal 的 web 根文件夹包含 autoload for ex:

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/vendor/autoload.php';

如果是其他系统: 使用根文件夹变量或位置来包含 autoload.php

【讨论】:

【参考方案13】:

我能够通过删除作曲家并以正确的方式重新安装来解决。这是我所做的:

sudo apt 删除作曲家 sudo apt autoclean && sudo apt autoremove 全局安装,指令来自:https://getcomposer.org/doc/00-intro.md 下载地址:https://getcomposer.org/installer 全局安装: mv composer.phar /usr/local/bin/composer (注意:我必须将我的移动到 mv composer.phar /usr/bin/composer)

然后我能够让 composer install 再次工作。在本期底部找到我的答案:https://github.com/composer/composer/issues/5510

【讨论】:

我收到了同样的错误信息,这是由于作曲家安装不当造成的。一旦我用上面的答案安装了作曲家,我就不再收到与 OP 相同的错误。这是原始问题的可能解决方案。 仅仅重新安装 composer 本身并不能解决 PHP 代码中的错误,因为 PHP 代码运行时不会直接使用它。你已经安装了它,你必须实际运行它来安装和生成相关文件。所以大概你在尝试运行命令时也遇到了不同的错误,这与这个问题中描述的不同。 给定的问题显示来自 Windows 的路径。你不应该在 Windows 上使用apt【参考方案14】:

这个错误是因为丢失了一些文件,主要原因是“Composer”

首先在 CMD 中运行这些命令

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a')  echo 'Installer verified';  else  echo 'Installer corrupt'; unlink('composer-setup.php');  echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

然后 创建一个新项目 示例:

D:/Laravel_Projects/New_Project
laravel new New_Project

然后使用启动服务器

php artisan serve

【讨论】:

【参考方案15】:

如果您有一个克隆的存储库并尝试设置发生此类错误的时间,那么您的根目录中将需要一个名为“vendor”的目录。

".gitingore" 文件已编写代码以不包括 GIT 上的供应商目录,因此在克隆 GIT 后,您的项目面临缺少供应商目录的问题。

添加供应商目录后,您的项目将重新开始工作。

【讨论】:

【参考方案16】:

在linux中先添加github个人访问令牌

    导航到 GitHub 的个人访问令牌页面。 点击“生成新令牌”按钮。 键入有意义的“Note”,选择“repo”作为范围,然后点击“Generate token”按钮。 记下令牌。

5 在终端中输入新的“个人访问令牌”

export COMPOSER_AUTH='"github-oauth":"github.com":"AB8cd4cab23a9d5399934a7d7698d3fa74e9cfAB"'

在终端运行composer install

【讨论】:

请分享更多细节。为什么需要这样做?多年来一直使用 Composer,我从来不需要这样的令牌【参考方案17】:

更改 php.ini 上的 auto_prepend_file 属性

; Automatically add files before PHP document. 
;http://php.net/auto-prepend-file 
auto_prepend_file =

【讨论】:

这与问题有何关系?有一个完全其他解决方案的公认答案 今天早上我遇到了以下错误。 “警告:未知:无法打开流:第 0 行的未知中没有此类文件或目录”因此我编写了此解决方案。 这似乎是对一个完全不同的问题的回答。如果你想记录一些东西,你可以ask and answer your own question,以便其他有相同错误的人可以找到它。

以上是关于要求(供应商/autoload.php):无法打开流的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中打开 autoload.php 失败

我无法使用 phpunit 进行测试:无法打开文件“autoload.php”

避免作曲家的autoload.php解析所有文件

安装 Sylius 时出错:“PHP 致命错误:require():无法打开所需的 autoload.php”

什么原因'警告:require(C:\wamp64\www\laravel\bootstrap/../vendor/autoload.php) 无法打开流:

警告:无法打开流:第 17 行的 C:\wamp\www\laravel\bootstrap\autoload.php 中没有这样的文件或目录