1. ホーム
  2. php

[解決済み] require(vendor/autoload.php): ストリームを開くのに失敗しました。

2022-02-13 22:16:55

質問

この問題は何度も投稿されているようですが、私にとっては別の問題のようです。

確かに、このエラー

Warning: require(vendor/autoload.php): ストリームを開くのに失敗しました。No such file or directory in C:\xampphtdocsite_websend_mail.php on line 3

Fatal error: require(): Failed opening required 'vendor/autoload.php' (include_path='C:\xamppphp') in C:\xampphtdocsite_websend_mail.php on line 3

は、この行から私のコードの先頭に表示されます。

require 'vendor/autoload.php';

ということは、私のコンピュータのどこかに /vendor/autoload.php ファイルがあるのだろう(composer をインストールして composer require phpmailer/phpmailer ).

で、このファイルを探しました。 dir /s autoload.php をWindowsのコマンドラインで実行したところ、ここに1つ見つかりました。 C:\Windows\SysWOW64\vendor\autoload.php ,

が、私にとっては syswow64 フォルダには何もありません。 autoload.php 何が足りないのかがわからない。

どうすればいいですか?

足りないのは composer install これはパッケージをインポートして vendor フォルダを作成し、autoload スクリプトも一緒に作成します。

相対パスが正しいことを確認してください。たとえば、PHPMailer のサンプルスクリプトは以下の場所にあります。 examples/ したがって、そこから作曲家オートローダーを読み込むための正しい相対パスは、次のようになります。 ../vendor/autoload.php .

で見つけたautoload.phpは C:\Windows\SysWOW64\vendor\autoload.php は、おそらくグローバルコンポーザーのインストールで、通常 phpcs, phpunit, phpmd などが置かれる場所です。

composer update ではない 同じことであり、おそらく ではない を使用したい。もしあなたのコードが現在のパッケージのバージョンでテストされているのであれば update を実行すると問題が発生し、さらなる作業やテストが必要になる可能性があります。 update 特別な理由があり、その意味を正確に理解している場合を除きます。さらに明確にしておくと、おそらくは composer update ローカルで使用し、サーバーでは決して使用しないでください。

composerをサーバーで実行できないから使えないという不満をよく見かけます(例:サーバーが共有されていてシェルアクセスができない)。そのような場合、あなたは できる ローカル(そのような制限のない環境)で実行し、生成されたローカルの vendor フォルダを他のすべての PHP スクリプトと一緒にアップロードします。

実行中 composer update また を実行します。 composer install がない場合は vendor フォルダを作成し、さらに、すべての composer.lock ファイルにタグ付けされたパッケージのバージョンが更新され、これが潜在的に危険です。

同様に、もし現在、あなたが composer.lock ファイルを作成した場合 (たとえばプロジェクトにコミットされていない場合) は composer install も効果的に実行されます。 composer update . したがって、この2つの違いを理解することは非常に重要です。 ない は互換性があります。

また、パッケージの名前をつけるなどして、1つのパッケージを更新することも可能です。

composer update ramsey/uuid

で指定したバージョンを再解決します。 composer.json をインストールし、vendor フォルダにインストールします。 composer.lock ファイルを一致させる。この方法は、一般的な composer update あるパッケージに対する特定のアップデートが必要な場合。

通常、ライブラリは ではなく が含まれます。 composer.lock そのため、バージョンを修正するのはアプリケーションであり、使用するライブラリではありません。その結果、ライブラリ開発者は、アプリ開発者よりも幅広いホスト環境との互換性を維持することが期待されます。例えば、あるライブラリはLaravel5、6、7、8と互換性がありますが、それを使用するアプリは他の理由でLaravel8を必要とするかもしれません。

Composer 2.0 では、インストールとアップデートの結果に残っていた不一致が解消されました。 アップグレード .