# PHP/Cli

PHP
Copertina Tutti i moduli · Sviluppo
    CopertinaPHP/Copertina
* IntroduzionePHP/Introduzione
** StoriaPHP/Introduzione/Storia
** Come funzionaPHP/Introduzione/Come funziona
* Installazione e configurazionePHP/Installazione e configurazione
** InstallazionePHP/Installazione
*** LinuxPHP/Installazione/Linux
*** WindowsPHP/Installazione/Windows
*** Mac OS XPHP/Installazione/Mac OS X
** ConfigurazionePHP/Configurazione
* ProgrammazionePHP/Programmazione
** CommentiPHP/Programmazione/Commenti
** VariabiliPHP/Programmazione/Variabili
** OperatoriPHP/Programmazione/Operatori
** ArrayPHP/Programmazione/Array
** CondizioniPHP/Programmazione/Condizioni
** CicliPHP/Programmazione/Cicli
** Funzioni di basePHP/Programmazione/Funzioni di base
** Funzioni personalizzatePHP/Programmazione/Funzioni personalizzate
** Variabili globaliPHP/Programmazione/Variabili globali
*** $GLOBALSPHP/Programmazione/Variabili globali/$GLOBALS
*** $_GETPHP/Programmazione/Variabili globali/$_GET
*** $_POSTPHP/Programmazione/Variabili globali/$_POST
*** $_SESSIONPHP/Programmazione/Variabili globali/$_SESSION
*** $_COOKIEPHP/Programmazione/Variabili globali/$_COOKIE
*** $_SERVERPHP/Programmazione/Variabili globali/$_SERVER
** FilePHP/Programmazione/File
** ImmaginiPHP/Programmazione/Immagini
** Espressioni regolariPHP/Programmazione/Regexp
** Programmazione orientata agli oggettiPHP/Programmazione/OOP
* Programmazione avanzata con le classi PEARPHP/PEAR
* PHP e i databasePHP/Database
** Funzioni PHP per l'accesso ai database
*** Funzioni MySQLPHP/Programmazione/MySQL
**** Accesso al databasePHP/Programmazione/MySQL/Accesso al database
**** QueryPHP/Programmazione/MySQL/Query
**** Risultati di una queryPHP/Programmazione/MySQL/Risultati di una query
**** Liberare memoria dai risultati di una queryPHP/Programmazione/MySQL/Liberare memoria dai risultati di una query
**** Chiudi connessione al dbPHP/Programmazione/MySQL/Chiudi connessione al db
*** Funzioni PostgreSQLPHP/PostgreSQL
**** Accesso al database
**** Query
**** Risultati di una query
*** Funzioni Sqlite
**** Accesso al database
**** Query
**** Risultati di una query
** Database e object oriented
*** Abstraction Layers
**** PDO - Php Data Objects
**** PEAR::MDB2
**** Creole
*** Object Relational Mapping (ORM)
**** PEAR:DB_DataObject
**** PEAR:DB_Table
**** Propel
* PHP Design PatternPHP/PHP Design Pattern
* SmartyPHP/Smarty
* Sicurezza delle applicazioni web
* PHP CLI: Command Line InterpreterPHP/Cli
* PHP GTK2: applicazioni desktop in PHPPHP/Gtk
* Crediti
Modifica il sommario
Per PHP-CLI si intende la capacità di PHP di lavorare come command line interpreter (CLI, appunto), ovvero di eseguire script dalla riga di comando.

## Primi passi

Consideriamo per esempio il seguente semplice script PHP:
Questo semplice script dovrebbe essere facilmente comprensibile, tranne per la prima riga, che verrà trattata più avanti. Possiamo eseguire questo script come abbiamo fatto normalmente fino ad ora, ovvero da pagina web: caricandolo, otterremo una semplice pagina con stampate 10 righe di testo.
La peculiarità analizzata in questo modulo è quella di poter eseguire questo script dalla riga di comando, come la shell di Linux o il prompt dei comandi di Windows: in questo modo otterremmo sempre lo stesso output (10 righe di testo) ma saranno stampate, anziché sul browser, sulla schermata del prompt. Inoltre questo sistema non necessita neanche l'uso del web server, in quanto la richiesta non passa dal server web ma va direttamente al motore PHP.
Per eseguire lo script sotto Windows, è sufficiente spostarsi nella directory in cui abbiamo salvato il file ed eseguire:
In questo modo otterremo l'output che ci saremmo aspettati:
Per eseguire lo script sotto Linux, entra in gioco la prima riga di codice lasciata in sospeso in precedenza.
Questa riga indica che lo script deve essere passato e parsato dal motore PHP: per questo forniamo il nome dell'eseguibile del PHP, che solitamente si trova nella cartella !/usr/local/bin (ma non è detto). A questo punto basterà spostarsi nella cartella in cui abbiamo salvato il file e digitare:
Otterremo così l'output desiderato

## Ottenere valori dai parametri

Una funzionalità interessante del CLI è quella di ricevere parametri in ingresso, ad esempio digitando:
PHP per ottenere il valore dei parametri mette a disposizione, come nel linguaggio C, due variabili:
* $argv (arguments values) è un array che contiene i valori degli argomenti passati; $argv[0] contiene il nome dello script (es. nomefile.php).
* $argc (arguments count) indica il numero di parametri passati allo script (compreso il nome dello script)
Ad esempio:

## Eseguire un comando

Un'interessante funzionalità offerta dal CLI di PHP è quella di poter eseguire un comando della shell e ottenere la stringa che questo restituisce. Ad esempio:
Questo semplice script esegue il comando DIR e poi ne stampa l'output.
Ad esempio, tramite queste funzioni, possiamo ottenere i file presenti nella cartella e memorizzarli in un array tramite la funzione explode:

## Input e output

Abbiamo visto finora come ottenere un input tramite i parametri passati eseguendo lo script; e se volessimo invece ottenere input durante l'esecuzione del programma? In questo caso dobbiamo ragionare un po' come un programmatore in C, per il quale ottenere input e output non consiste in altro che leggere o scrivere sugli stream (flussi), trattabili come dei file.
In PHP esistono tre flussi di input/output:
Per leggere o scrivere su questi file usiamo le funzioni fwrite e fgets, aprendo all'inizio dello script i file tramite fopen: