Executing PHP files
Ci sono tre differenti modi per fornire alla CLI SAPI il codice PHP
da eseguire:
-
Dire al PHP di eseguire un file.
Entrambi i metodi (con o senza l'opzione -f) eseguono il
file my_script.php. Si può scegliere qualsiasi nome per lo
script da eseguire - non è obbligatorio che gli script PHP finiscano
con l'estensione .php
.
Nota:
Se si ha la necessità di passare degli argomenti allo script quando si usa l'opzione
-f, il primo argomento deve essere --
.
-
Passare il codice PHP da eseguire direttamente da linea di comando.
Occorre prestare molta attenzione alla sostituzione delle variabili di shell
e all'uso degli apici.
Nota:
Osservando con attenzione l'esempio si nota l'assenza dei tag di inizio e fine!
L'opzione -r non li richiede. L'uso dei tag genera un
errore di parsing.
-
Si può passare il codice PHP da eseguire via standard input
(stdin
).
Questo da la possibilità di generare dinamicamente del codice
PHP e passarlo all'eseguibile, come illustrato nel seguente esempio (fittizio):
Non si possono combinare tra loro questi tre metodi di esecuzione del codice.
Come qualsiasi applicazione di shell, anche l'eseguibile PHP accetta diversi
argomenti, ma anche lo script PHP può ricevere argomenti. Il
numero degli argomenti che possono essere passati allo script non è limitato dal PHP
(e anche se la shell ha un limite nel numero di caratteri che possono essere
passati, solitamente non si raggiunge questo limite). Gli argomenti passati allo
script sono disponibili nell'array globale $argv. L'indice
zero contiene sempre il nome dello script come è stato chiamato dalla
linea di comando. Si noti che se il codice è eseguito in-line usando l'opzione
-r il valore dei $argv[0]
sarà un trattino (-
). Lo stesso avviene se il codice è
eseguito attraverso un pipe dallo STDIN
.
Una seconda variabile globale, $argc,
contiene il numero degli elementi nella matrice $argv
(non è il numero degli argomenti passati allo
script).
Fino a quando gli argomenti passati allo script non iniziano con
il carattere -
non si deve prestare alcuna cautela.
Tuttavia se si passa allo script argomenti che iniziano con -
si hanno dei problemi perché lo stesso PHP ritiene di doverli gestire,
anche prima di eseguire lo script. Per evitare ciò occorre utilizzare il separatore di argomenti
--
. Dopo che il PHP ha incontrato questo separatore,
ogni argomento verrà passato direttamente allo script.
Tuttavia esiste un'altro modo per eseguire gli script PHP.
Si può scrivere uno script la cui prima riga inizi con
#!/usr/bin/php
. Seguendo questa regola si può posizionare
il normale codice PHP tra i tag di apertura e chiusura
del PHP. Una volta impostati correttamente gli attributi
del file (ad esempio chmod +x test) lo script può essere eseguito
come una normale shell o script perl:
Example #1 Eseguire uno script PHP come shell script
#!/usr/bin/php
<?php
var_dump($argv);
?>
Supponendo che questo file sia chiamato test nella directory
corrente, si può eseguire:
$ chmod +x test
$ ./test -h -- foo
array(4) {
[0]=>
string(6) "./test"
[1]=>
string(2) "-h"
[2]=>
string(2) "--"
[3]=>
string(3) "foo"
}
Come si può notare in questo caso non vi è necessità di prestare attenzione nel passare
i parametri che iniziano con -
.
L'eseguibile PHP può essere utilizzato per eseguire script PHP in modo indipendente
dal server web. Se ci si trova su sistemi Unix, si deve aggiungere allo script una prima linea
contentente lo "shebang" #!
in modo che il sistema
sappia quale programma deve interpretare lo script. Sui sistemi Windows si può
associare php.exe all'estensione
.php, o si può scrivere un batch per eseguire
gli script tramite PHP. La prima riga inserita per i sistemi Unix non crea
problemi in Windows (dal momento che è formattata com un commento PHP), in questo modo
si possono scrivere batch multi-piattaforma. Qui sotto è mostrato
un semplice esempio di programma PHP da linea di comando.
Example #2 Script sviluppato per essere eseguito da linea di comando (script.php)
#!/usr/bin/php
<?php
if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>
Questo è uno script PHP da linea di comando con una opzione.
Utilizzo:
<?php echo $argv[0]; ?> <option>
<option> può essere qualsiasi parola che si desidera
stampata. Con --help, -help, -h,
o -? si ottiene questo aiuto.
<?php
} else {
echo $argv[1];
}
?>
Nello script precedente, abbiamo utilizzato la prima riga per indicare
che questo file deve essere interpretato dal PHP. Poiché qui lavoriamo con la versione CLI
non vengono prodotte intestazioni HTTP.
Il programma verifica se esiste l'unico il parametro richiesto (in
aggiunta al nome dello script, che è ugualmente contato). Se non c'è, o se
l'argomento è --help, -help,
-h oppure -?, si visualizza il messaggio di aiuto,
usando $argv[0] per visualizzare dinamicamente il nome dello script come
scritto nella linea di comando. Altrimenti, l'argomento è stampato esattamente come
ricevuto.
Se si desidera eseguire lo script precedente su Unix, occorre per prima cosa renderlo
eseguibile, e quindi richiamarlo con script.php echothis oppure
script.php -h. Su Windows occorre scrivere un batch
per ottenere questo risultato:
Example #3 File batch per eseguire uno script PHP da linea di comando (script.bat)
@echo OFF
"C:\php\php.exe" script.php %*
Supponendo che il programma precedente si chiami script.php, e che la versione
CLI di php.exe sia in C:\php\php.exe,
questo batch eseguirà lo script con le opzioni passate:
script.bat echothis oppure script.bat -h.
Vedere anche la documentazione del modulo
Readline per informazioni su funzioni
che possono essere utilizzate per migliorare le applicazioni da linea di comando.
In Windows, PHP può essere configurato per essere eseguito senza
fornire il nome C:\php\php.exe o l'estensione .php
,
come descritto in Linea di comando
PHP su Microsoft Windows.
Nota:
Su Windows si consiglia di eseguire PHP con un account utente effettivo.
Durante l'esecuzione in un servizio di rete, alcune operazioni avranno esito negativo, perché
"Non è stata eseguita alcuna mappatura tra i nomi degli account e gli ID di sicurezza".