Composer come forzare versione php

Vediamo come fare in modo che sia composer ad occuparsi di cercare per noi la versione adatta di un pacchetto, in modo da  conformarsi alla versione di php che gli indichiamo.

Succede di voler creare un pacchetto di librerie da utlizzare su un server, ma il server ha qualche annetto sulle spalle, ha una vecchia versione di PHP, una bella valanga di Legacy Code, che ci guardiamo bene da toccare.

Vogliamo solo qualche pacchetto/libreria per sistemare piccole cose, facendo meno danni possibili. Conosciamo una serie di pacchetti che usiamo nei server più recenti e vorremmo servircene anche in questa situazione.

Utilizzando composer sulla macchina che stai usando abitualmente per lo sviluppo, cercherà di scaricare le librerie compatibli con l’ambiente in cui sta girando, riferendosi al php che trova installato. Questo potrebbe poi compomettere l’usabilità delle librerie sul reale ambiente di produzione (non che sia una grande genialata sviluppare su un ambiente non compatibile, ma di solito ci si adatta).

Invece di andare a caccia della versione corretta del pacchetto che vogliamo installare, che funzioni con la versione di php prensete, possiamo forzare composer a fare tutto il lavoro per noi. Sempre che esista una versione del pacchetto compatibile con il nostro ambiente.

Vediamo come fare.

Verifica preliminare della versione

Per prima cosa verifichiamo sul server la corretta versione di php presente, con un semplice file:

<?php
echo phpinfo();
?>

Mettiamo il file sul server, apriamolo con un browser e nelle prime righe della pagina potremmo vedere quale sia l’esatta versione di php che genera le pagine. Segnamo la stringa e rimuoviamo il file dal server.

Passiamo a composer

Ora che sappiamo quale versione dobbiamo usare per i nostri pacchetti facciamo in modo che sia composer ad occuparsene, mediante il seguente commando:

$ cd /directory/del/progetto
$ composer config platform.php 5.3.3

Ora se andiamo a vedere cosa contiene il file di configurazione composer.json  del nostro progetto, possiamo notare che sono state aggiunte le righe necessarie [3-7]:

{
    "name": "test/test",
    "config": {
        "platform": {
            "php": "5.3.3"
        }
    },
    "require": {
        "symfony/http-foundation": "^2.6"
    }
}

Subito dopo aver lanciato il comando di configurazione, ho provato ad installare il pacchetto symfony/http-foundation  e composer mi ha trovato l’ultima versione disponibile compatibile con le restrizioni imposte (riga 9).

Quale versione php cerca di forzare composer?

Nel dubbio di quale versione stia cercando di utilizzare composer, posso andare a leggere il file di configurazione del progetto: composer.json, o nel dubbio che la configurazione non sia corretta, posso farmelo indicare direttamente da composer ulizzando il seguente comando:

$ composer show --platform
... bla bla 
... bla bla
php                 5.3.3    Package overridden via config.platform (act...
php-ipv6            5.3.3    Package overridden via config.platform (act...
php-zts             5.3.3    Package overridden via config.platform (act...

Come si vede dalle ultime righe evidenziate, è stata forzata la versione 5.3.3 presa dalla configurazione, se ci fosse stato qualche errore, dovuto a qualche edit maldestro del file, avremo constatato che non veniva caricata la versione forzata.

 

Leave a Comment

Your email address will not be published. Required fields are marked *