Compositeur/PHP: Comment faire pour vérifier si le compositeur paquet est installé?

Quelle est la meilleure façon de vérifier si un programme (n'importe quelle version) est installé/présent, à l'aide de PHP au sein de notre application?

Fondamentalement, à l'intérieur de notre application, nous voulons appeler une fonction avec la signature suivante:

bool function hasComposerPackage(string $packageName)

Ce que ce serait de la fonction à contenir afin que nous puissions faire quelque chose comme:

if (hasComposerPackage('phpunit/phpunit')) {
    echo 'PHPUnit is installed!';
}

Idéalement, cela doit se produire sans aucune ligne de commande exec appels et il ne devrait pas autoload tout inutile fichiers dans le processus.

  • stackoverflow.com/a/15186162/897075?? Désolé de ligne de commande de bits de ne pas s'inscrire jusqu'à la deuxième lecture puis-je vous demander pourquoi?
  • Cela devra se faire dans l'application sans compter sur la ligne de commande pour diverses raisons sans rapport avec cette question.
  • Désolé mon mauvais - il est tard ici - lire rapidement et répondu aussi vite
  • Un rapide coup d'oeil dans le vendor/compositeur a un fichier "installé.json" - pourrait être d'intérêt? Je pensais à ce problème très il ya une semaine - c'est donc un cerveau de vidage.
  • Pas de soucis! Je pense que ce serait un OK de solution, mais il introduit un nouveau problème: l'auto-localisation de l' installed.json fichier.
  • Oui...je pense que la valeur par défaut est toujours le "vendeur" - par rapport à votre compositeur.fichier json - à moins que votre écraser dans compositeur.json à l'aide de "config.vendeur-dir"
  • Quand vous dites "s'appuient sur la ligne de commande exec appels" - voulez-vous dire que shell_exec() est hors de question?
  • En effet, ce qui signifie que nous devons d'abord auto-localiser composer.json lui-même. @FatBoyXPC: Correct.
  • Vous devriez être en mesure d'assumer compositeur.json emplacement que c'est une exigence dans votre projet si votre utilisation de compositeur, non? Désolé je n'ai pas de réponse pour vous - frappeurs des idées 🙂
  • C'est vrai, mais ce ne sera pas une solution universelle qui fonctionne dans le projet. Je suppose que c'est acceptable & peut-être nécessaire compromis, mais peut-être que quelqu'un va venir avec un moyen de contourner cela.
  • Recherchez en défaut spot - si elle ne trouve pas utiliser symfony/finder à la chercher? Vous pourriez peut-être en savoir davantage sur le bon compositeur.json en le regardant de la tête de détails, version, etc. En tant qu'utilisateur, je peux vous dire que je préfère juste une documentation claire de ce à quoi s'attendre.
  • Je ne pense pas que vous trouverez un "universel" façon de faire, y compris à l'aide de shell_exec. Pourquoi ne pouvez-vous pas utiliser shell_exec, si?
  • Vous pouvez utiliser class_exists, alors il ne importe pas si le paquet a été installé par le compositeur ou par tout autre moyen. Cela vous donne une certaine souplesse, mais ne se promener à l'extérieur des lignes de "compositeur", cependant.
  • C'est probablement la meilleure solution pour l'instant. C'est juste une honte qu'il ne vous dit pas à propos d'un paquet dans son ensemble. Ce que nous voulons ici, c'est essentiellement de s'assurer qu'un ensemble de classes est disponible. Nous pourrions le faire avec class_exists, ce serait beaucoup plus pratique si on pouvait regarder pour le compositeur paquet en passant seulement son nom en tant que paramètre.

InformationsquelleAutor mae | 2017-03-05