require(vendor/autoload.php): failed to open stream
What you're missing is running composer install
, which will import your packages and create the vendor folder, along with the autoload script.
Make sure your relative path is correct. For example the example scripts in PHPMailer are in examples/
, below the project root, so the correct relative path to load the composer autoloader from there would be ../vendor/autoload.php
.
The autoload.php you found in C:\Windows\SysWOW64\vendor\autoload.php
is probably a global composer installation – where you'll usually put things like phpcs, phpunit, phpmd etc.
composer update
is not the same thing, and probably not what you want to use. If your code is tested with your current package versions then running update
may cause breakages which may require further work and testing, so don't run update
unless you have a specific reason to and understand exactly what it means. To clarify further – you should probably only ever run composer update
locally, never on your server as it is reasonably likely to break apps in production.
I often see complaints that people can't use composer because they can't run it on their server (e.g. because it's shared and they have no shell access). In that case, you can still use composer: run it locally (an environment that has no such restrictions), and upload the local vendor folder it generates along with all your other PHP scripts.
Running composer update
also performs a composer install
, and if you do not currently have a vendor
folder (normal if you have a fresh checkout of a project), then it will create one, and also overwrite any composer.lock
file you already have, updating package versions tagged in it, and this is what is potentially dangerous.
Similarly, if you do not currently have a composer.lock
file (e.g. if it was not committed to the project), then composer install
also effectively performs a composer update
. It's thus vital to understand the difference between the two as they are definitely not interchangeable.
It is also possible to update a single package by naming it, for example:
composer update ramsey/uuid
This will re-resolve the version specified in your composer.json
and install it in your vendor folder, and update your composer.lock
file to match. This is far less likely to cause problems than a general composer update
if you just need a specific update to one package.
It is normal for libraries to not include a composer.lock
file of their own; it's up to apps to fix versions, not the libraries they use. As a result, library developers are expected to maintain compatibility with a wider range of host environments than app developers need to. For example, a library might be compatible with Laravel 5, 6, 7, and 8, but an app using it might require Laravel 8 for other reasons.
Composer 2.0 removed any remaining inconsistencies between install and update results; if you're running composer 1.x you should definitely upgrade.
/autoload.php): failed to open stream: No such file or directory in
Try to run from command line
composer install
or composer update
vendor/autoload.php: failed to open stream
You are using require_once
with a relative path. It is possible but there are so many things that can go wrong that I usually avoid it.
Where is the vendor
folder relative to index.php
? I recommend using an absolute path. You can use the magic constants to determine it:
require_once(__DIR__ . '/vendor/autoload.php');
NOTE: you can use /..
to go up the directory tree.
NOTE2: __DIR__
requires php 5.3 or higher. You can use dirname(__FILE__)
for older versions.
Failed to open stream: No such file or directory, when using __DIR__
index.php
isn't inside controllers
, you need to add that to the path.
require_once __DIR__ . '/../controllers/vendor/autoload.php';
Related Topics
How to Use Objects from Other Namespaces and How to Import Namespaces in PHP
How to Dynamically Write a PHP Object Property Name
How to Enable Memcache in Wamp
Getting ’ Instead of an Apostrophe(') in PHP
Header in PDF Page Using Dompdf in PHP
Ajax File Download Using Jquery, PHP
How to Catch This Error: "Notice: Undefined Offset: 0"
My Magento Extension Install Script Will Not Run
Check Whether or Not a Cidr Subnet Contains an Ip Address
Can't Install Laravel Installer via Composer
How to Protect from Downloading a Video from a Site
How to Generate Random 64-Bit Value as Decimal String in PHP