J'ai lu plusieurs questions dans SO sur la façon d'installer des bibliothèques tierces dans un autre "projet". Inévitablement, la réponse est d'utiliser composer
et ils disent tous que nous avons besoin d'un fichier composer.json à la racine du projet.
Je suis confus. Je travaille sur un projet dont la construction "source" a la structure suivante
web/ src/
Le dossier web
comprend plusieurs fichiers PHP qui sont implémentés par le projet. Jusqu'à présent, ce projet n'utilise pas du tout composer.
Le répertoire src
contient des fichiers c / c ++ pour certains fichiers du moteur principal.
Je dois maintenant ajouter, disons, php-jwt à ce" projet "(qui est un projet hybride PHP + C ++) d'une manière que je peux inclure le jwt dans un fichier dans web/views/myfile.php
J'ai également les exigences supplémentaires suivantes:
jwt-php
fait partie, n'ont pas besoin d'installer composer. Compte tenu de cela, où télécharger exactement la bibliothèque jwt en utilisant composer? À l'intérieur de web /
?
3 Réponses :
Peut-être, nous ajoutons simplement un composer.json
juste à côté de ces deux répertoires:
cd path/to/main/dir sudo composer install
Ensuite, notre composer.json
pourrait ressembler à:
{ "name": "project/cphp", "type": "library", "description": "PHP C++ Project X", "keywords": ["php","c++"], "copyright": "", "license": "", "version": "1.0.0", "authors": [{ "name": "user1361529", "role": "Developer" }], "require": { "jwt-php": "*", }, "require-dev": {}, "autoload": { "classmap": [], "psr-0": {}, "psr-4": {} }, "config": {} }
Si nous utilisons un MacOS par exemple, nous installerions le composeur:
- web/ - src/ - vendor/--------- composer.json - composer.lock - ------ autoload.php ------ composer ------ jwt-php ------ other-php-cpp-package-1 ------ other-php-cpp-package-2 ------ other-php-cpp-package-3 ------ other-php-cpp-package-4 -------
Nous peut toujours changer le répertoire plus tard. Ce n'est peut-être pas si important au départ.
Si vous ne souhaitez pas utiliser composer, vous pouvez simplement télécharger la bibliothèque et l'appeler dans votre code.
<?php require _DIR.'path-to-librayr'; use class;
Comme vous l'avez dit, votre projet est une application hybride multilingue.
Je ne vous recommande pas d'installer le répertoire fournisseur du fournisseur dans le répertoire racine de votre projet. Si votre php existe principalement dans le répertoire web, vous pouvez installer le fournisseur dans le répertoire web
. La structure des répertoires est la suivante:
web/ ---vendor/ ------autoload.php ------... ---composer.json ---composer.lock ---... src/
Pour les références aux bibliothèques installées, vous pouvez utiliser le include '../vendor/autoload.php'
dans web / views / myfile.php
pour charger le script d'enregistrement automatique du composeur (ou vous pourrez peut-être introduire le chargement automatique dans un script d'entrée principal unifié). Appelez ensuite la bibliothèque tierce via l'espace de noms: new Firebase \ JWT \ JWT ();
Ensuite, soumettez le fournisseur à votre VCS et conditionnez-le dans RPM ou DEB afin vos clients n'ont pas besoin d'installer composer.
Réponse de Google Traduction
Modifier : Il est dangereux de placer le répertoire du fournisseur dans le répertoire avec des autorisations ouvertes sur le serveur Web. Veuillez ajuster la structure de répertoire spécifique en fonction de la situation réelle. À propos, le répertoire nommé web n'a pas nécessairement l'autorisation d'ouverture du serveur Web.
Notez que le fait d'avoir composer.json
, composer.lock
et vendor
dans un répertoire accessible sur le Web est un problème de sécurité potentiel.
Ah d'accord. Dans ce cas, je suppose que je dois faire ce que @Emma a suggéré dans l'autre réponse. Merci.