PHP/Cli
Wikibooks, manuali e libri di testo liberi.
- Introduzione PHP/Introduzione
- Installazione e configurazione PHP/Installazione e configurazione
- Programmazione PHP/Programmazione
- Una pagina PHP PHP/Programmazione/Una pagina PHP
- echo PHP/Programmazione/echo
- Commenti PHP/Programmazione/Commenti
- Variabili PHP/Programmazione/Variabili
- Operatori PHP/Programmazione/Operatori
- Array PHP/Programmazione/Array
- Condizioni PHP/Programmazione/Condizioni
- Cicli PHP/Programmazione/Cicli
- Funzioni di base PHP/Programmazione/Funzioni di base
- Funzioni personalizzate PHP/Programmazione/Funzioni personalizzate
- Variabili globali PHP/Programmazione/Variabili globali
- $GLOBALS PHP/Programmazione/Variabili globali/$GLOBALS
- $_GET PHP/Programmazione/Variabili globali/$_GET
- $_POST PHP/Programmazione/Variabili globali/$_POST
- $_SESSION PHP/Programmazione/Variabili globali/$_SESSION
- $_COOKIE PHP/Programmazione/Variabili globali/$_COOKIE
- $_SERVER PHP/Programmazione/Variabili globali/$_SERVER
- File PHP/Programmazione/File
- Immagini PHP/Programmazione/Immagini
- Espressioni regolari PHP/Programmazione/Regexp
- Programmazione orientata agli oggetti PHP/Programmazione/OOP
- Programmazione avanzata con le classi PEAR PHP/PEAR
- PHP e i database PHP/Database
- Funzioni PHP per l'accesso ai database
- Database e object oriented PHP/Dboop
- PHP Design Pattern PHP/PHP Design Pattern
- Smarty PHP/Smarty
- Sicurezza delle applicazioni web PHP/Sicurezza
- PHP CLI: Command Line Interpreter PHP/Cli
- PHP GTK2: applicazioni desktop in PHP PHP/Gtk
- Wikibook credits
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.
Indice |
[modifica] Primi passi
Consideriamo per esempio il seguente semplice script PHP:
#!/usr/local/bin/php <?php for ($i = 0; $i < 10; $i++) { echo "number is $i\n"; } ?>
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:
> php nomefile.php
In questo modo otterremo l'output che ci saremmo aspettati:
> php nomefile.php number is 0 number is 1 number is 2 number is 3 number is 4 number is 5 number is 6 number is 7 number is 8 number is 9
Per eseguire lo script sotto Linux, entra in gioco la prima riga di codice lasciata in sospeso in precedenza.
#!/usr/local/bin/php
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:
$ ./nomefile.php
Otterremo così l'output desiderato
[modifica] Ottenere valori dai parametri
Una funzionalità interessante del CLI è quella di ricevere parametri in ingresso, ad esempio digitando:
> php nomefile.php param1 param2
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)
#!/usr/local/bin/php <?php echo "ho ricevuto $argc argomenti"; for ($i = 0; $i < $argc - 1; $i++) { echo "il valore dell'argomento $i è ".$argv[$i]."\n"; } ?>
Ad esempio:
> nomefile.php abc ho ricevuto 3 argomenti il valore dell'argomento 0 è nomefile.php il valore dell'argomento 1 è abc il valore dell'argomento 2 è 123
[modifica] 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:
#!/usr/local/bin/php <?php echo shell_exec("dir"); ?>
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:
$dir_output = shell_exec("dir"); $dir = explode("\n", $dir_output); print_r($dir);
[modifica] 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:
| Flusso | Corrisponde a | Nome del file |
|---|---|---|
| Input standard (sola lettura) | Immissione da tastiera | php://stdin |
| Output standard | Console/terminale | php://stdout |
| Errore standard | Console o registro di sistema | php://stderr |
Per leggere o scrivere su questi file usiamo le funzioni fwrite e fgets, aprendo all'inizio dello script i file tramite fopen:
//all'inizio apro il flusso... $stdin = fopen('php://stdin', 'r'); //codice su codice... echo "inserisci il tuo nome"; $nome = trim(fgets($stdin, 100)); if (!(is_string($nome)) { //è per esempio un numero $stderr = fopen('php://stderr', 'w'); fwrite($stderr, 'Errore: il nome deve essere una stringa'); }

