1
votes

Installation du compositeur pour un projet PHP-C ++

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:

  • Le projet est assez vaste et ses règles de packaging sont assez complexes. À la fin, les fichiers RPM ou DEB sont essentiellement créés que les utilisateurs installent sur leurs systèmes. Je veux m'assurer que les utilisateurs installant le projet, dont 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 / ?


0 commentaires

3 Réponses :


3
votes

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.


0 commentaires

-2
votes

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;


0 commentaires

1
votes

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.


2 commentaires

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.