Home page / PHP Tips'n'tricks

PHP da consolle

In questa sezione abbiamo inserito alcuni esempi di vario tipo riguardanti l' utilizzo del linguaggio PHP da consolle.

L' utilizzo del PHP da consolle risulta molto comodo per varie ragioni e in varie situazioni:

  1. Si puo' lavorare come altro utente rispetto a www-data o apache
  2. Non si e' (volendo) soggetti a timeout
  3. Si puo' lavorare sia a riga di comando che tramite un prompt

E' ovviamente necessario il PHP non come modulo di apache ma come CLI

es.

/usr/local/bin/php /path/to/file.php [arguments]


Quindi direi di iniziare levando il timeout e flushando l' output buffering implicitamente

 

set_time_limit(0);
@
ob_end_flush();
ob_implicit_flush(true);

 

Se si ha bisogno di un prompt dei comandi suggerirei una classettina semplice, portabile, multipiattaforma.

class prompt {
    var 
$tty;
    function 
prompt() {
        if (
substr(PHP_OS03) == "WIN") {
            
$this->tty fopen("\con""rb");
        } else {
            if (!(
$this->tty fopen("/dev/tty""r"))) {
                
$this->tty fopen("php://stdin""r");
            }
        }
    }
    function 
get($string$length 1024) {
        echo 
$string;
        
$result trim(fgets($this->tty$length));
        return 
$result;
    }
}
 

 

Utilizzo:

Si istanzia un oggetto di classe prompt

 

$prompt = new prompt();

 

Si chiede all' utente qualcosa memorizzando la stringa inserita fino alla pressione del tasto [Invio] in una variabile

 

$variabile = $prompt->get('inserisci il tuo nome: ');
echo $variabile;

 


Per far arrivare i parametri desiderati direttamente dallo script di lancio

es. /usr/local/bin/php /path/to/stampa.php Mario

 

Gli argomenti separati da spazio sono accessibili tramite la variabile $argv[]

Array numerico dove:

$argv[0] = nome stesso del file eseguito

$argv[1] = parametro1


 

si puo' controllare quindi se sono stati passati parametri semplicemente facendo:

if(count($argv)>1){ /* avemus parametro */ }

 

:P 


Autore: #ffffff (09-02-2007 00:00:00)

07-01-2009 - PM 03:29