Come installare Composer in una distribuzione linux Centos 8 e come utilizzarlo in un progetto PHP
Composer è un "dependency manager" cioè un gestore delle dipendenze per tutti i nostri progetti PHP, che si utilizza da linea di comando, ed è utilizzato da tutti i moderni framework PHP come Laravel, Symfony, Drupal e Magento 2.
Spesso un applicativo web PHP, per eseguire determinate funzioni, si appoggia a librerie che vanno incluse all'interno del proprio codice, e queste librerie potrebbero appoggiarsi, a loro volta, ad altre librerie!
Queste librerie, che chiamiamo "dipendenze", sviluppate da terze parti, sono disponibili sul repository packagist.org. Composer di occupa di gestire automaticamente queste dipendenze, e di scaricarle sulla base delle indicazioni che vengono fornite in uno specifico file di configurazione chiamato composer.json scritto in formato JSON.
Composer si occupa anche dell'autoloading delle classi.
Oggi vediamo come installare Composer in una distribuzione linux Centos 8 e come utilizzarlo in uno script PHP.
Installazione di PHP
Per prima cosa dobbiamo installare, tramite lo strumento yum (o dnf), il pacchetto php con alcune sue librerie, e wget.
# yum install php php-cli php-common php-json php-zip wget
Download Composer installer
Successivamente dobbiamo scaricare lo script di installazione di Composer.
Questo comando, tramite PHP, scarica un file chiamato "composer-setup.php" nel nostro server, e specificatamente nella directory di lavoro in cui ci troviamo
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
Per sicurezza, verifichiamo l'integrità dei dati del file scaricato, confrontando l'hash del file scaricato con l'hash trovato nella pagina di Composer Public Keys / Signatures.
Per effettuare questo confronto scarichiamo, tramite lo strumento wget, questo hash dalla pagina Github di Composer e memorizziamolo in una variabile denominata HASH:
# HASH="$(wget -q -O - https://composer.github.io/installer.sig)"
Adesso finalmente possiamo comparare i due file e verificare che l'installer scaricato non sia danneggiato
# php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Se gli hash corrispondono, verrà visualizzato il seguente messaggio:
Installer verified
In caso contrario il messaggio sarà
Installer corrupt
Installazione di Composer globalmente
Per poter utilizzare Composer da qualcunque directory del server, andiamo ad installarlo nella directory "/usr/local/bin" con questo comando
# php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Il risultato sarà
All settings correct for using Composer
Downloading...
Composer (version 1.10.15) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Verifica installazione di Composer
Per verificare la corretta installazione digitiamo
# composer -V
Come output vedrai la versione installata
Composer version 1.10.15 2020-10-13 15:59:09
Per consultare il manuale d'uso, digita semplicemente
# composer
ed il risultato sarà il seguente
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.10.15 2020-10-13 15:59:09
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
--no-cache Prevent use of the cache
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
about Shows the short information about Composer.
archive Creates an archive of this composer package.
browse Opens the package's repository URL or homepage in your browser.
cc Clears composer's internal package cache.
check-platform-reqs Check that platform requirements are satisfied.
clear-cache Clears composer's internal package cache.
clearcache Clears composer's internal package cache.
config Sets config options.
create-project Creates new project from a package into given directory.
depends Shows which packages cause the given package to be installed.
diagnose Diagnoses the system to identify common errors.
dump-autoload Dumps the autoloader.
dumpautoload Dumps the autoloader.
exec Executes a vendored binary/script.
fund Discover how to help fund the maintenance of your dependencies.
global Allows running commands in the global composer dir ($COMPOSER_HOME).
help Displays help for a command
home Opens the package's repository URL or homepage in your browser.
i Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
info Shows information about packages.
init Creates a basic composer.json file in current directory.
install Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
licenses Shows information about licenses of dependencies.
list Lists commands
outdated Shows a list of installed packages that have updates available, including their latest version.
prohibits Shows which packages prevent the given package from being installed.
remove Removes a package from the require or require-dev.
require Adds required packages to your composer.json and installs them.
run Runs the scripts defined in composer.json.
run-script Runs the scripts defined in composer.json.
search Searches for packages.
self-update Updates composer.phar to the latest version.
selfupdate Updates composer.phar to the latest version.
show Shows information about packages.
status Shows a list of locally modified packages.
suggests Shows package suggestions.
u Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
update Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
upgrade Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
validate Validates a composer.json and composer.lock.
why Shows which packages cause the given package to be installed.
why-not Shows which packages prevent the given package from being installed.
Primo utilizzo di Composer in PHP
Vediamo subito come utilizzare composer in uno script php che necessita della libreria "carbon" che serve a gestire, come vedremo tra poco, le date in PHP.
Creiamo una directory per il nostro progetto, ad esempio "miotest"
# mkdir mioTest
ed entriamoci dentro
# cd mioTest
Se accediamo al sito packagist.org e cerchiamo nella barra di ricerca il pacchetto carbon, come primo risultato troveremo
nesbot/carbon
I pacchetti generalmente hanno questo formato "nome vendor / nome pacchetto", dove il vendor è chi ha realizzato il pacchetto.
Nella directory "mioTest" chiediamo a composer di installare nel nostro progetto questo pacchetto nesbot/carbon.
composer require nesbot/carbon
Composer andrà ad installare Carbon e le sue dipendenze.
Using version ^1.39 for nesbot/carbon
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
- Installing kylekatarnls/update-helper (1.2.1): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.18.1): Downloading (100%)
- Installing symfony/translation (v2.8.52): Downloading (100%)
- Installing nesbot/carbon (1.39.1): Downloading (100%)
symfony/polyfill-mbstring suggests installing ext-mbstring (For best performance)
symfony/translation suggests installing symfony/config
symfony/translation suggests installing symfony/yaml
symfony/translation suggests installing psr/log-implementation (To use logging capability in translator)
Writing lock file
Generating autoload files
Carbon 1 is deprecated, see how to migrate to Carbon 2.
https://carbon.nesbot.com/docs/#api-carbon-2
You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
2 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Nella directory "mioTest" verrà creato un file composer.json che serve a descrivere il nostro progetto PHP project, ed include tutte le dipendenze del nostro progetto
{
"require": {
"nesbot/carbon": "^1.39"
}
}
Da questo momento, il nostro progetto saprà che per funzionare è necessaria questa libreria carbon.
Inoltre troverai un file composer.lock, che serve a identificare le versioni installate di ogni libreria.
E infine è stata creata la directory vendor che conterrà tutte le librerie e dipendenze.
Adesso creiamo all'interno della nostra directory, utilizzando il nostro editor preferito, un file chiamato "test.php" ed al suo interno inserisci questo codice
<?php
require __DIR__ . '/vendor/autoload.php';
use Carbon\Carbon;
printf("Now: %s", Carbon::now());
?>
Analizziamo il codice
- Dopo l'apertura del tag php includiamo, con require, il file "vendor/autoload.php" che serve a caricare automaticamente tutte le librerie necessarie.
- Successivamente, tramite la keyword use, andiamo a richiamare la classe Carbon
- Infine, "stampiamo" l'ora corrente usando il metodo now di Carbon
Lanciamo lo script da riga di comando
# php test.php
L'output sarà la data in formato Y-m-d H:i:s
Now: 2020-10-15 13:35:42
Bene, la libreria funziona!
Se in futuro la libreria venisse aggiornata, puoi scaricare automaticamente gli aggiornamenti lanciando un update di composer
# composer update
Mentre per togliere una libreria lanciamo il remove di composer seguita dal nome del pacchetto
composer remove nesbot/carbon
Abbiamo così concluso la spiegazione. Hai imparato ad installare Composer su CentOS 8 e sarà utilissimo in tutti i tuoi progetti PHP.