183 votes

require(vendor/autoload.php) : échec de l'ouverture du flux

Je sais que ce problème a été signalé à de nombreuses reprises, mais pour moi, il semble s'agir d'un problème différent.

En effet, cette erreur

Warning : require(vendor/autoload.php) : failed to open stream : No such file or directory in C:\xampp\htdocs\site_web\send_mail.php sur la ligne 3

Erreur fatale : require() : Failed opening required 'vendor/autoload.php' (include_path=' C:\xampp\php\PEAR ') dans C:\xampp\htdocs\site_web\send_mail.php sur la ligne 3

apparaît au début de mon code à partir de cette ligne :

require 'vendor/autoload.php';

Donc, je suppose qu'il doit y avoir un fichier /vendor/autoload.php quelque part dans mon ordinateur (j'ai installé composer et exécuté composer require phpmailer/phpmailer ).

J'ai donc cherché ce fichier en utilisant : dir /s autoload.php dans la ligne de commande de Windows, et j'en ai trouvé une ici : C:\Windows\SysWOW64\vendor\autoload.php ,

mais pour moi, syswow64 dossier n'a rien à voir avec autoload.php Je ne vois pas ce que je rate ici.

1 votes

Cela peut également se produire si vous avez php artisan up ou down dans votre fichier composer.json dans la section scripts de la pré-installation. Il semble avoir besoin de fichiers dans le dossier vendor pour exécuter le mode maintenance, qui n'est pas encore disponible.

336voto

Synchro Points 2539

Ce qui vous manque, c'est de courir composer install qui importera vos paquets et créera le dossier vendor, ainsi que le script autoload.

Assurez-vous que votre chemin relatif est correct. Par exemple, les scripts d'exemple dans PHPMailer sont dans examples/ sous la racine du projet, de sorte que le chemin relatif correct pour charger l'autochargeur du compositeur à partir de là serait le suivant ../vendor/autoload.php .

Le fichier autoload.php que vous avez trouvé dans C:\Windows\SysWOW64\vendor\autoload.php est probablement une installation globale du compositeur - où vous mettez généralement des choses comme phpcs, phpunit, phpmd, etc.

composer update est pas la même chose, et probablement pas ce que vous voulez utiliser. Si votre code est testé avec les versions actuelles de votre paquetage, l'exécution de la commande update peut provoquer des ruptures qui peuvent nécessiter des travaux et des tests supplémentaires, donc ne courez pas update à moins que vous n'ayez une raison spécifique de le faire et que vous compreniez exactement ce que cela signifie. Pour clarifier davantage - vous ne devriez probablement jamais exécuter composer update localement, jamais sur votre serveur car cela risque de casser les applications en production.

Je vois souvent des plaintes selon lesquelles les gens ne peuvent pas utiliser Composer parce qu'ils ne peuvent pas l'exécuter sur leur serveur (par exemple, parce qu'il est partagé et qu'ils n'ont pas d'accès au shell). Dans ce cas, vous peut Utilisez toujours Composer : exécutez-le localement (dans un environnement qui ne présente pas de telles restrictions) et téléchargez le dossier fournisseur local qu'il génère avec tous vos autres scripts PHP.

Running composer update également effectue un composer install et si vous ne disposez pas actuellement d'un vendor (normal si vous avez un nouveau checkout d'un projet), alors il en créera un, et écrasera aussi tout dossier composer.lock que vous avez déjà, en mettant à jour les versions des paquets qui y sont marquées, et c'est ce qui est potentiellement dangereux.

De même, si vous ne disposez pas actuellement d'un composer.lock (par exemple, s'il n'a pas été commis au projet), alors composer install réalise aussi efficacement un composer update . Il est donc essentiel de comprendre la différence entre les deux car ils sont définitivement pas interchangeables.

Il est également possible de mettre à jour un seul paquet en lui donnant un nom, par exemple :

composer update ramsey/uuid

Cela va résoudre à nouveau la version spécifiée dans votre fichier composer.json et l'installer dans votre dossier de vendeur, et mettre à jour votre composer.lock pour correspondre. Cette méthode est beaucoup moins susceptible de causer des problèmes qu'une méthode générale de vérification de l'identité de l'utilisateur. composer update si vous avez juste besoin d'une mise à jour spécifique d'un paquet.

Il est normal que les bibliothèques pas inclure un composer.lock C'est aux applications qu'il appartient de corriger les versions, et non aux bibliothèques qu'elles utilisent. Par conséquent, les développeurs de bibliothèques doivent assurer la compatibilité avec un plus grand nombre d'environnements hôtes que les développeurs d'applications. Par exemple, une bibliothèque peut être compatible avec Laravel 5, 6, 7 et 8, mais une application qui l'utilise peut avoir besoin de Laravel 8 pour d'autres raisons.

Composer 2.0 (bientôt disponible) devrait supprimer toutes les incohérences restantes entre les résultats des installations et des mises à jour.

2 votes

Comment lancer l'installation du compositeur ? Il n'est pas reconnu comme une commande

0 votes

Merci, j'ai trouvé cela, et je l'ai téléchargé - mais il me demande où PHP est installé localement. Je n'ai pas vraiment envie d'installer PHP localement (ou Composer), je veux juste l'exécuter sur mon application Google Cloud.

0 votes

Je suis les étapes de cette documentation ici : github.com/googlecloudplatform/google-cloud-php

58voto

mbouzahir Points 754

Si vous obtenez également l'erreur lorsque vous exécutez

composer install

Exécutez d'abord cette commande

composer dump-autoload

Cette commande nettoiera tous les fichiers compilés et leurs chemins.

18voto

mcmacerson Points 373

@Bashir a failli m'aider mais j'en avais besoin :

composer update --no-scripts

J'ai trouvé la réponse ici : https://laracasts.com/discuss/channels/general-discussion/fatal-error-class-illuminatefoundationapplication-not-found-in-pathtoprojectbootstrapappphp-on-line-14?page=0

1 votes

Ne le faites pas si vous ne comprenez pas exactement ce qu'il fait ; cela risque fort de casser une application en production.

0 votes

Veuillez ajouter une explication à votre réponse afin que d'autres puissent en tirer des enseignements.

0 votes

@NicoHaase Je suis tombé sur cette solution à laracasts.com Je cherchais désespérément un moyen de faire fonctionner la mise à jour de mon compositeur. À peu près à mi-chemin de la page contenant toutes sortes de moyens de résoudre le problème, il y avait un petit post modeste suggérant l'utilisation de --no-scripts. Je ne sais pas pourquoi cela fonctionne, mais c'est le cas !

9voto

IsharaNW Points 41

Assurez-vous d'abord que vous avez installé le compositeur.

composer install

Si vous avez déjà installé le compositeur, mettez-le à jour.

composer update

2 votes

Cette réponse doit être sérieusement modifiée pour être utile à un utilisateur. Veuillez énoncer clairement vos suggestions et fournir des exemples de code qui seraient utiles dans cette situation.

0 votes

Veuillez ajouter quelques explications supplémentaires à votre réponse. Dans quel cas faut-il composer update résoudre un problème ?

9voto

wpcoder Points 523

Correctement autoload.php configuration :

A) Réponse rapide :

Votre chemin d'accès à autoload.php est erroné, par exemple. C:\Windows\SysWOW64\vendor\autoload.php A ce jour : vous devez le changer en : C:\Users\<Windows User Name>\vendor\autoload.php


B) Étapes avec exemple : Nous allons prendre facebook/php-graph-sdk à titre d'exemple ; changer en Package Name si nécessaire.

  1. Installer composer.exe
  2. Ouvrez l'invite CMD. <img src="https://i.stack.imgur.com/pMPhg.png"> + R + type CMD
  3. Exécuter cette commande : composer require facebook/graph-sdk
  4. Inclure le chemin dans votre page PHP : require_once 'C:\Users\<Windows User Name>\vendor\autoload.php';
  5. Définir la configuration Secrets et Access Token pour votre paquet...etc.
  6. Joyeux codage.

C) Plus de détails :

L'installation de Composer sous Windows définira ce chemin par défaut pour vos paquets ; vous pouvez les trouver là et inclure le chemin de l'autoloader :

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

Pour la même question que vous avez posée ; la réponse était ce chemin pour Serveur WAMP 64 BIT pour Windows .

Ensuite, dans votre application PHP, changez simplement ceci :

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

A :

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

Trouvez votre nom d'utilisateur Windows sous C:\Users\

Avant tout cela, comme indiqué au point B), vous devez exécuter cette commande :

composer require <package name>

pour le kit de développement php de Facebook, par exemple :

composer require facebook/graph-sdk

Merci d'avoir posé cette question ; je l'ai appréciée car elle m'a aidé à résoudre un problème similaire et à rédiger ce simple tutoriel.

3 votes

En général, Composer est conçu pour fonctionner avec les paquets installés localement à un projet particulier Par conséquent, l'inclusion directe d'un fichier autoload.php à partir d'un répertoire de système ou de profil utilisateur serait la suivante extrêmement inhabituel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X