Kapitola 43. Použití PHP z příkazové řádky

Možnosti PHP při spouštění z příkazové řádky přinášejí mnoho užitku, pokud chcete ladit nebo testovat vaše nastavení PHP, hodí se však i pro případy, kdy byste rádi použili PHP pro jiné účely než WWW skriptování.

Uvědomte si, že můžete vždy směrovat výstup programu PHP do vnějšího souboru pomocí znaku >, takže php -q test.php > test.html vytiskne výstup test.php bez HTTP hlaviček do test.html ve stejném adresáři.

Možnosti příkazové řádky můžete využívat pouze tehdy, máte-li (spustitelný) program PHP. Pokud jste zkompilovali pouze modul do serveru a nemáte na počítači žádnou CGI verzi, nemůžete příkazovou řádku používat. Pro uživatele Windows je v binárním balíčku jak serverový modul, tak spustitelný soubor nazvaný php.exe.

Tento seznem voleb pro příkazovou řádku je konzistentní s PHP 4.0.6. Aktuální seznam včetně jednořádkových popisů můžete získat pomocí parametru -h. Výstup php -h by měl vypadat přibližně takto:
Usage: php [-q] [-h] [-s [-v] [-i] [-f <file>] |  {<file> [args...]}
  -q             Quiet-mode.  Suppress HTTP Header output.
  -s             Display colour syntax highlighted source.
  -f <file>      Parse <file>.  Implies `-q'
  -v             Version number
  -C             Do not chdir to the script's directory
  -c <path>      Look for php.ini file in this directory
  -d foo[=bar]   Define INI entry foo with value 'bar'
  -e             Generate extended information for debugger/profiler
  -z <file>      Load Zend extension <file>.
  -l             Syntax check only (lint)
  -m             Show compiled in modules
  -i             PHP information
  -h             This help

Zde uvádíme některé z nejdůležitějších voleb s detailním vysvětlením.

Tabulka 43-1. Volby pro příkazovou řádku

VolbaPopis
-q Potlačí výstup HTTP hlaviček. Normálně PHP tiskne HTTP hlavičky pro volající program (typicky WWW server) k předání prohlížeči. Při použití pro aplikace spouštěné z příkazové řádky nemají hlavičky smysl.
-s Zobrazí barevně vysvícený zdrojový soubor s daným názvem. Je to totéž, jako když se zdroj vytiskne pomocí funkce highlight_file() v PHP skriptu.
-f Parsuje daný soubor a hledá syntaktické a fatální chyby. Tato volba implikuje -q. Použijte pro ladicí účely (debugging).
-v Zavoláním PHP s tímto přepínačem si můžete vypsat číslo verze, např. 4.0.6.
-C Za normálních okolností PHP mění pracovní adresář na ten, kde se nachází spouštěný skript. To například umožňuje otvírat soubory ve stejném adresáři určením pouhého názvu souboru (bez cesty). Pokud byste toto chtěli potlačit, použijte tuto volbu.
-c Použitím tohoto argumentu můžete specifikovat alternativní umístění souboru php.ini, takže PHP bude hledat konfigurační soubor zde namísto implicitního umístění.
-d Touto volbou můžete provést individuální nastavení php.ini během provádění skriptu.
-l Otestuje daný soubor na syntaktické chyby. Tato volba implikuje -q. Použijte ji pro účely ladění. Nebudou se hledat fatální chyby (jako jsou nedefinované funkce). Pokud chcete hledat i fatální chyby, použijte -f.
-m Použitím této volby PHP vypíše zabudované (a načtené) PHP a Zend moduly, čísla verzí PHP a Zend, a také krátkou informaci o autorských právech k jádru Zend.
-i Tento přepínač zavolá funkci phpinfo() a vypíše její výsledek. Pokud PHP nepracuje správně, je dobré spustit php -i a podívat se, zda se nevypsala nějaká chybová hlášení před nebo uvnitř informačních tabulek.
-h Touto volbou získáte informace o aktuálních volbách příkazové řádky a jednořádkové popisy o tom, co dělají.

Spustitelná verze PHP může být použita pro spouštění skriptů absolutně nezávisle na webovském serveru. Pokud jste na unixovém systému, můžete do PHP skriptu přidat speciální první řádek a udělat z něj spustitelný program - systém bude vědět, jaký program by měl skript zpracovávat. Na Windows můžete asociovat php.exe -q se souborovou příponou .php (pro spouštění dvojklikem), nebo můžete vytvořit dávkový soubor pro spuštění skriptu přes PHP. První řádek skriptu pro práci v Unixu nebude ve Windows vadit, takže tímto způsobem můžete psát programy pro více platforem. Jednoduchý příklad psaní PHP programu pro příkazovou řádku je uveden níže.

Příklad 43-1. Skript určený ke spouštění z příkazové řádky (script.php)

#!/usr/bin/php -q
<?php

if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>

This is a command line PHP script with one option.

  Usage:
  <?php echo $argv[0]; ?> <option>

  <option> can be some word you would like
  to print out. With the --help, -help, -h,
  or -? options, you can get this help.

<?php
} else {
    echo
$argv[1];
}
?>

Ve výše uvedeném skriptu jsme použili speciální první řádek k indikaci, že by tento soubor měl být spouštěn pomocí PHP a neměl by vypisovat HTTP hlavičky. Jsou zde dvě proměnné, které můžete použít při psaní aplikací pro PHP spouštěných z příkazové řádky: $argc a $argv. První z nich je počet argumentů + 1 (název běžícího skriptu). Druhá je pole obsahující argumenty, počínaje názvem skriptu jako číslo 0 ($argv[0]).

V ukázkovém programu se testuje, zda je argumentů více či méně než jeden. Pokud by argument byl --help, -help, -h nebo -?, vytiskne se nápověda k programu včetně skutečného názvu skriptu. Pokud by byly přidány nějaké další argumenty, vytisknou se na výstup.

Pokud byste chtěli spouštět uvedený skript pod Unixem, musíte ho udělat spustitelným (nastavit práva pro spouštění), a pak jednoduše napsat script.php vypis_tohle nebo script.php -h. Na Windows musíte pro tento úkol vytvořit dávkový soubor:

Příklad 43-2. Dávkový soubor pro spouštění PHP skriptu z příkazové řádky (script.bat)

@c:\php\php.exe -q script.php %1 %2 %3 %4

Za předpokladu, že jste výše uvedený program nazvali script.php a soubor php.exe máte uložený jako c:\php\php.exe, můžete tento dávkový soubor spouštět takto: script.bat echothis nebo script.bat -h.

Viz také dokumentaci rozšíření Readline, kde najdete více funkcí pro použití k aplikacím PHP spouštěných z příkazové řádky.