Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP-CLI: PHP da linea di comando

Cosa è, a cosa serve e come si usa PHP-CLI, l'interfaccia che consente di eseguire script PHP da riga di comando: sia in Linux sia in Windows
Cosa è, a cosa serve e come si usa PHP-CLI, l'interfaccia che consente di eseguire script PHP da riga di comando: sia in Linux sia in Windows
Link copiato negli appunti

L'acronimo CLI è l'abbreviazione di Command Line Interface ('Interfaccia da Linea di Comando'), una modalità di accesso al sistema attraverso un interprete per comandi testuali; questi comandi sono espressi essenzialmente attraverso delle stringhe alfanumeriche che possono essere eseguite da altre applicazioni. Nel caso di PHP, per esempio, sarà possibile utilizzare le CLI per integrare determinati programmi con funzionalità messe a disposizione da questo linguaggio.

Vantaggi nell'utilizzo di PHP-CLI

L'utilizzo di PHP tramite linea di comando risale alla versione 4.3.0 (nella 4.2.0 non era pianamente supportato) quando fu introdotta una SAPI (Server Application Programming Interface), denominata PHP-CLI; attraverso questa interfaccia divenne possibile eseguire script PHP tramite istruzioni testuali e l'ambito di utilizzo di questo linguaggio per lo scripting server side superò i rigidi confini imposti dalle pagine Web e dai browser. Gli sviluppatori PHP poterono avvalersi di numerosi strumenti a disposizione fino a quel momento soltanto degli amministratori di sistema.

Le differenze tra il tradizionale sviluppo di pagine Web e l'utilizzo di PHP tramite interfaccia testuale non sono poche, è possibile però elencarne le principali:

  • l'output generato tramite CLI è "pulito" (di default non vengono introdotti degli headers), l'utilizzatore lo vede esattamente così com'è cioè nel modo in cui viene prodotto;
  • l'output presenta una formattazione minima se non assente, il formato in "semplice testo" permette una più semplice elaborazione da parte di programmi di terze parti;
  • il tempo di esecuzione dei comandi è solitamente molto più veloce di quello richiesto nel caso in cui debba essere caricata una pagina Web;
  • l'utilizzatore può agire dall'interno dello spazio fisico dedicato a PHP nel file system;
  • gli input vengono gestiti a livello di runtime e cioè nel momento in cui un programma viene eseguito, cosa non possibile per le pagine Web dove la definizione degli input precede l'esecuzione dello script.

In molti potrebbero chiedersi come mai si è sentita l'esigenza di integrare in PHP la possibilità di inviare istruzioni tramite linea di comando, esistono infatti linguaggi molto più collaudati come per esempio Perl grazie ai quali interagire con il sistema. L'obiezione è sensata, ma nello stesso tempo è necessario elencare i vantaggi derivanti dall'introduzione della CLI in questo linguaggio:

  • non è necessario imparare altri linguaggi come appunto Perl, Bash o Awk;
  • consente di riutilizzare componenti e codici preesistenti;
  • mette a disposizione uno strumento per sfruttare al meglio il multithreading in PHP5;
  • permette di integrare nuove funzionalità in applicazioni PHP preesistenti;
  • introduce la possibilità di automatizzare e programmare (CRON) i processi, cosa impossibile tramite il tradizionale sviluppo limitato alle pagine Web;
  • consente di creare interfacce grafiche (GUI) utilizzando PHP e GTK.

Tra i punti elencati quello relativo alla programmazione di eventi è probabilmente il più importante, per fare un esempio immaginiamo di dover cancellare ogni 24 ore delle righe che una nostra applicazione PHP scrive in un file di testo; in assenza di CLI avremmo la necessita di fare questo manualmente inviando allo script un determinato input ad un ora stabilita, utilizzare la programmazione ci permette invece di programmare l'ora esatta di una determinata esecuzione senza la necessità di alcun intervento da parte dell'utilizzatore. Lo stesso discorso potrebbe essere fatto per operazioni importanti come la creazione di backup o l'invio di messaggi tramite posta elettronica agli utenti di una newsletter.

PHP-CLI e ambiente di esecuzione

Un'installazione standard di PHP in ambiente Linux o Windows dovrebbe fornire di default il pieno supporto per PHP-CLI, nel caso in cui questo mancasse sarà possibile porvi facilmente rimedio con una di queste operazioni:

  • aggiornare la propria versione di PHP nel caso in cui sia particolarmente datata;
  • in Windows: aggiungere l'esecutore di PHP tra le variabili d'ambiente (Risorse del Computer / Proprietà / Avanzate / Variabili d'ambiente);
  • ricompilare PHP con il flag --enable-cli.

Gli script basati su PHP-CLI funzionano esattamente nello stesso modo rispetto a quelli realizzati tramite il sistema di sviluppo basato su pagine Web, un qualsiasi script potrà infatti essere richiamato ed eseguito tramite il semplice comando diretto verso la pagina che lo contiene:

php -f nome_file.php

Vi sono però delle differenze riguardanti l'ambiente in cui lavorano gli script; per approfondire questo argomento è però necessario introdurre il tema riguardante i cosiddetti "standard streams", essi sono dei canali per l'input e l'output che si trovano tra un'applicazione e l'ambiente in cui essa gira quando viene lanciata un'esecuzione. Tra gli standard streams distinguiamo:

  • standard input (STDIN): i dati diretti verso l'applicazione per la loro lettura;
  • standard output (STOUT): lo stream in cui l'applicazione scrive i dati da essa prodotti;
  • standard error (STERR): lo stream attraverso cui vengono prodotti output relativi ad errori di esecuzione;

Dato che STDIN e STDOUT hanno il compito di gestire gli input e gli output relativi ad un determinato programma, PHP-CLI mette a dispostone degli appositi costrutti per il loro controllo; quindi abbiamo:

fgets(STDIN)

con cui sarà possibile raccogliere gli input inviati dagli utenti; l'esempio seguente raccoglie in una variabile il parametro di input e lo stampa all'interno di una stringa contenente un saluto e la data odierna:

#!/usr/bin/php

$nome = fgets(STDIN);
echo 'Ciao, '.trim($nome).'! Oggi  è il '.date('j, n, Y')."n";
die;

Passando a fwrite() gli streams STDOUT e STDERR sarà invece possibile gestire le due diverse tipologie di output.

Quando si lancia un comando verso uno script PHP è bene tenere presente che la directory di lavoro dell'applicazione (reperibile attraverso il comando getcwd()) non indica la posizione in cui si trovano i file ma quella da cui essi vengono richiamati; PHP non modifica quindi la directory di lavoro corrente sulla base delle funzioni di uno script.

Per questo motivo l'utilizzo della funzione getcwd() potrebbe restituire risultati diversi se utilizzata da CLI o CGI. Per fare un esempio pensiamo di avere uno script sul percorso /usr/local/bin/pippo e che la nostra directory di lavoro sia invece /home/pluto, la funzione getcwd() ci restituirà presumibilmente home/pluto se lanciata tramite CLI mentre stamperà /usr/local/bin/ da CGI.

Un ultima caratteristica importante di cui tenere conto è quella relativa alla definizione della direttiva register_argc_argv del file di configurazione php.ini che in PHP-CLI è impostata come TRUE, in questo modo PHP è in grado di ricevere gli argomenti tramite linea di comando; la variabile $argc metterà a disposizione gli argomenti passati all'applicazione mentre l'array $argv è destinato a contenere come valori gli argomenti correnti.

Esempi pratici di utilizzo di PHP-CLI

Esistono due modalità per eseguire un script basato su PHP-CLI:

  1. utilizzare il comando php -f seguito dal nome del file che contiene il codice, completo di percorso all'interno del file system (php -f /percorso/nome_file.php)
  2. impostare i permessi di esecuzione (chmod +x) sul file PHP che si desidera richiamare indicando innanzitutto il percorso all'esecutore.

Per fare un esempio, potremmo creare un semplice script in grado di restituire in output una stringa di testo procedendo come segue:

  1. scriviamo il codice della nostra applicazione avendo cura di indicare nella prima riga il percorso all'esecutore di PHP:
    #!/usr/bin/php -q
    
    <?php
    echo 'Messaggio realizzato con PHP-CLI!';
    ?>
    
  2. salviamo il codice in un file chiamato "messaggio.php" e impostiamo su di esso i permessi di esecuzione:
    $ chmod 755 messaggio.php
    
  3. Ora per richiamare il nostro script basterà digitare un semplice:
    $ ./messaggio.php
    
  4. Se si utilizza Windows il percorso all'esecutore non potrà che essere differente, per indicarlo in modo corretto basterà seguire l'esempio seguente:
    #!C:Program Filesphpphp.exe -q
    

    Dove php.exe è naturalmente l'esecutore del linguaggio.

L'esempio mostrato rappresenta una base per la creazione di applicazioni più complesse grazie alle quali sarà possibile mettere a disposizione del sistema programmi in grado di svolgere utili operazioni come:

  • generare periodicamente copie di sicurezza dei nostri file o dei contenuti delle nostre basi di dati;
  • rimuovere file di log, cache e altri documenti che conservano statistiche sull'attività del sistema;
  • inviare report ad una casella di posta elettronica predefinita;
  • connettersi a macchine remoto tramite SSH;
  • rimuovere record da un database sulla base di criteri come per esempio l'obsolescenza dei dati.

Facciamo un esempio basato sull'ultimo punto dell'elenco appena mostrato e immaginiamo di possedere un database in cui è presente una tabella che non deve mai contenere dati più vecchi di 24 ore; il nostro semplice script per la pulizia quotidiana dei record potrebbe somigliare a qualcosa del genere:

#!/usr/bin/php -q

<?php
include("/var/www/html/config/mysql.php');
$db->query("DELETE FROM `tbl` WHERE `data` < ".time()-86400);
$db->close();
?>

La prima riga indica naturalmente il percorso all'esecutore PHP, mentre la seconda riporta il percorso completo ad un file di configurazione contenente i dati per la connessione al DBMS, per la selezione del database e una classe con metodi per la manipolazione dei dati.

Conclusioni

Il pieno supporto per CLI (Interfaccia da Linea di Comando) è stato introdotto in PHP con la versione 4.3.0, in questa breve trattazione abbiamo affrontato l'argomento descrivendo le caratteristiche di questa interfaccia alternativa allo sviluppo tradizionale basato sulla produzione in output di pagine Web: ambiente di sviluppo, sintassi, ambiti di applicazione e procedure per la creazione di semplici script.

Per approfondimenti si consiglia la lettura dei tutorial e degli articoli presenti in Php-cli.com, un sito interamente dedicato alla Command Line Interface in PHP.

Ti consigliamo anche