Chytání zadního větru nebo jak spustit PHP skript. Spusťte PHP skript v konzole

Pokud čtete tento článek, pak už pravděpodobně umíte psát jednoduché skripty v PHP a také víte, kde se používají. Ale napadlo někoho, že PHP skripty lze kromě webu používat i na PC. Nyní vám ukážu jednoduchý příklad, jak můžeme spustit naše PHP.

Nejprve musíme napsat samotný skript. Proto vytvoříme soubor PHP. Pro tutoriál jsem jej vytvořil přímo na disku C, takže cesta byla C:\script.php

Funkce sum($a,$b)( echo $a + $b; ) eval($argv.";");

Právě díky poslednímu řádku budeme moci spouštět naše PHP na příkazovém řádku. Uložíme náš soubor a pokračujeme.

Doufám, že máte nainstalovaný místní server, pokud ne, pak neváhejte a přejděte na oficiální web Open Server, stáhněte a nainstalujte. Doporučuji nainstalovat přesně tak, jak to osobně používám a samozřejmě z toho vycházejí všechny články.

Aby bylo možné spustit dříve napsaný skript přímo v konzole, nastavme systémové proměnné prostředí. Stále doufám v přítomnost výše uvedeného serveru.
A tak se nejprve musíte dostat do vlastností systému. Přejděte do mého počítače a klikněte pravým tlačítkem na libovolné volné místo a poté klikněte na vlastnosti.


Proměnné prostředí


V okně, které se otevře, vyhledejte v poli Proměnné prostředí uživatele ***. S největší pravděpodobností po instalaci serveru tam již bude nějaká proměnná PATH. Pokud neexistuje, klikněte na tlačítko vytvořit.
Název proměnné PATH je velkými písmeny
Hodnota proměnné, nastavte cestu na php.exe. Pokud máte operační systém, cesta by měla být tato: C:\OpenServer\modules\php\PHP-5.6\
Pokud jste pro instalaci nevybrali jiný adresář.
Pokud již byla proměnná vytvořena, jednoduše ji umístěte na konec hodnoty; a přidat naši cestu výše.
Kdykoli je to možné, klepněte na OK a restartujte počítač.

Pomocí tohoto příkazu se dostaneme do kořenového adresáře disku. Dále zadáme toto.

php script.php "součet(5,2)"

Po provedení tohoto příkazu uvidíte na dalším řádku konzoly číslo 7

Samozřejmě to byl jeden z nejjednodušších příkladů. Ale co je nejdůležitější, objasňuje, jak můžete své skripty spouštět přímo z příkazového řádku. Můžete například napsat skript, který zaznamená datum a čas do souboru v době spuštění. A spustili by to ve chvíli, kdy se PC nabootuje. V tomto případě můžete určit, zda někdo provozoval váš počítač ve vaší nepřítomnosti atd.

Existují tři různé způsoby, jak spustit kód PHP v SAPI CLI:

    Určení konkrétního souboru ke spuštění.

    $ php my_script.php $ php -f my_script.php

    Oba způsoby (s uvedením možnosti -F nebo bez) spustí soubor my_script.php. Neexistují žádná omezení ohledně toho, který soubor se má spustit, a skripty PHP nemusí mít příponu .php.

    Komentář:

    Pokud potřebujete skriptu předat argumenty, pak při použití volby -F první argument by měl být -- .

  1. Předejte PHP kód přímo na příkazovém řádku.

    $ php -r "print_r(get_defined_constants());"

    Při použití této metody musíte být obzvláště opatrní, protože při použití dvojitých uvozovek může dojít k nahrazení proměnné shellu.

    Komentář:

    Přečtěte si pozorně příklad: nejsou zde žádné otevírací ani zavírací značky! Volba -r prostě je nepotřebuje. Jejich použití bude mít za následek chybu analyzátoru.

  2. Předejte spuštěný PHP kód přes standardní vstup ( stdin).

    To poskytuje výkonnou schopnost vytvářet kód PHP a vkládat jej do spouštěcího souboru, jak je znázorněno v tomto (fiktivním) příkladu:

    $some_application | nějaký_filtr | php | sort -u > final_output.txt

Žádný z těchto tří způsobů spouštění kódu nelze kombinovat.

Jako každá jiná konzolová aplikace přijímá binární PHP argumenty, ale skript PHP může také přijímat argumenty. PHP neomezuje počet argumentů předávaných skriptu (konzolový shell nastavuje určitý práh počtu znaků, které lze předat; tento limit je obvykle dostačující). Předané argumenty jsou dostupné v globálním poli $argv . První index (nula) vždy obsahuje název skriptu volaného z příkazového řádku. Vezměte prosím na vědomí, že pokud je kód volán za běhu z příkazového řádku pomocí volby -r, hodnota $argv bude jednoduše spojovník ( - ). Totéž platí pro kód odesílaný z STDIN.

Druhá registrovaná globální proměnná je $argc, která obsahuje počet prvků v poli $argv ((a Ne počet argumentů předávaných skriptu).

Pokud předané argumenty nezačínají znakem - , pak by neměly být žádné zvláštní problémy. Argument předaný skriptu, který začíná - způsobí problémy, protože PHP se rozhodne, že by to mělo zvládnout samo. Chcete-li tomuto chování zabránit, použijte oddělovač seznamu argumentů -- . Jakmile PHP přečte tento oddělovač, všechny následující argumenty budou předány beze změny skriptu.

# Tento příkaz nespustí tento kód, ale zobrazí informace o použití PHP $ php -r "var_dump($argv);" -h Použití: php [-f] [...] # Tento příkaz předá skriptu argument "-h", čímž zabrání zobrazení nápovědy PHP $ php -r "var_dump($argv);" -- -h array(2) ( => string(1) "-" => string(2) "-h" )

Na unixových systémech však existuje jiný způsob, jak použít PHP pro konzolové skripty. Můžete napsat skript, jehož první řádek začíná #!/usr/bin/php(nebo jinou správnou cestu k binárnímu souboru PHP CLI). Za tento řádek můžete umístit běžný PHP kód, uzavřený v PHP otevírací a uzavírací značce. Jakmile jsou pro soubor nastaveny správné atributy spuštění (např. chmod +x test), skript lze spustit jako běžný konzolový nebo perlový skript:

Příklad č. 1 Spuštění PHP skriptu jako konzolového skriptu

#!/usr/bin/php
var_dump ($argv);
?>

Za předpokladu, že se tento soubor nazývá test a je umístěn v aktuálním adresáři, můžete provést následující:

$ chmod +x test $ ./test -h -- foo array(4) ( => string(6) "./test" => string(2) "-h" => string(2) "--" => string(3) "foo" )

Jak vidíte, v tomto případě se nemusíte starat o předávání parametrů, které začínají - .

Spustitelný soubor PHP lze použít ke spouštění skriptů PHP nezávisle na webovém serveru. V případě práce na systému podobnému Unixu je potřeba přidat speciální řádek do všech skriptů #! (také nazývané "shebang") na začátku souboru a udělejte je spustitelnými, aby indikovaly, který program by měl tyto skripty zpracovat. Na platformách Windows můžete souborům s příponami přiřadit obslužný program php.exe .php nebo vytvořte dávkový soubor (.bat) pro spouštění skriptů pomocí PHP. Řádek přidaný na začátek skriptu pro unixové systémy neovlivňuje jejich provoz na OS Windows, takže lze vytvářet skripty pro více platforem. Níže je uveden jednoduchý příklad skriptu spouštěného z příkazového řádku:

Příklad #2 Skript navržený ke spuštění z příkazového řádku (script.php)

#!/usr/bin/php

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

Toto je skript konzole PHP, který má jeden argument.

Používání:

) jinak (
echo $argv [ 1 ];
}
?>

Výše uvedený skript obsahuje speciální Unixový řádek indikující, že by měl být spuštěn pomocí PHP. Pracujeme s verzí CLI, takže se nezobrazí ani jedna HTTP hlavička.

Výše uvedený příklad také kontroluje počet předávaných argumentů. V případě, že je více nebo méně než jeden, a také v případě, že byl předaný argument --Pomoc , -Pomoc , -h nebo -? , vytiskne se nápověda pomocí $argv , která obsahuje název spouštěného skriptu. Jinak se přijatý argument jednoduše vytiskne.

Chcete-li spustit výše uvedený příklad na systému Unix, musíte jej nastavit jako spustitelný a jednoduše jej spustit v konzole script.php echothis nebo skript.php -h. V systému Windows můžete vytvořit dávkový soubor:

Příklad č. 3 Dávkový soubor pro spuštění PHP skriptu z příkazového řádku (script.bat)

@echo OFF "C:\php\php.exe" script.php %*

Za předpokladu, že se skript jmenuje script.php a úplná cesta k php.exe CLI je C:\php\php.exe , daný dávkový soubor spustí skript s předanými parametry: script.bat echothis nebo skript.bat -h.

Můžete se také podívat na rozšíření Readline, které lze použít ke zlepšení skriptu konzoly PHP.

Ve Windows lze PHP nakonfigurovat tak, aby běželo, aniž by bylo nutné zadávat C:\php\php.exe a příponu .php. Toto téma je podrobněji popsáno v části

Existují tři různé způsoby, jak spustit kód PHP v SAPI CLI:

    Určení konkrétního souboru ke spuštění.

    $ php my_script.php $ php -f my_script.php

    Oba způsoby (s uvedením možnosti -F nebo bez) spustí soubor my_script.php. Můžete si vybrat libovolný soubor ke spuštění a vaše PHP skripty nemusí mít příponu .php a může mít libovolný název a příponu, kterou chcete.

    Komentář:

    Pokud potřebujete předat argumenty svým skriptům, pak při použití volby -F první argument by měl být -- .

  1. Předejte PHP kód přímo na příkazovém řádku.

    $ php -r "print_r(get_defined_constants());"

    Při použití této metody musíte být obzvláště opatrní, protože při použití dvojitých uvozovek může dojít k nahrazení proměnné shellu.

    Komentář:

    Přečtěte si prosím pozorně příklad, nejsou v něm žádné otevírací ani zavírací značky! Volba -r prostě je nepotřebuje. Jejich použití bude mít za následek chybu analyzátoru.

  2. Předejte spuštěný PHP kód přes standardní vstup ( stdin).

    To poskytuje výkonnou schopnost dynamicky generovat PHP kód a vkládat jej do spouštěcího souboru, jak je ukázáno v tomto (falešném) příkladu:

    $some_application | nějaký_filtr | php | sort -u > final_output.txt

Žádný z těchto tří způsobů spouštění kódu nelze kombinovat.

Jako každá jiná konzolová aplikace přijímá binární soubor PHP argumenty, ale váš skript PHP může také přijímat argumenty. PHP neomezuje počet argumentů předávaných vašemu skriptu (konzolový shell nastavuje určitou hranici pro počet znaků, které lze předat; tento limit je obvykle dostatečný). Předané argumenty jsou dostupné v globálním poli $argv . První index (nula) vždy obsahuje název skriptu volaného z příkazového řádku. Vezměte prosím na vědomí, že pokud je kód volán za běhu z příkazového řádku pomocí volby -r, hodnota $argv bude jednoduše spojovník ( - ). Totéž platí pro kód odesílaný z STDIN.

Druhá registrovaná globální proměnná je $argc, která obsahuje počet prvků v poli $argv ((a Ne počet argumentů předávaných skriptu).

Pokud argumenty, které předáte, nezačínají znakem - , pak by neměly být žádné zvláštní problémy. Předáním argumentu skriptu, který začíná - způsobí problémy, protože PHP se rozhodne, že by to mělo zvládnout samo. Chcete-li tomuto chování zabránit, použijte oddělovač seznamu argumentů -- . Jakmile PHP přečte tento oddělovač, všechny následující argumenty budou předány beze změny vašemu skriptu.

# Tento příkaz nespustí tento kód, ale zobrazí informace o použití PHP $ php -r "var_dump($argv);" -h Použití: php [-f] [...] # Tento příkaz předá vašemu skriptu argument "-h", čímž zabrání zobrazení nápovědy PHP $ php -r "var_dump($argv);" -- -h array(2) ( => string(1) "-" => string(2) "-h" )

Na unixových systémech však existuje jiný způsob, jak použít PHP pro konzolové skripty. Můžete napsat skript, jehož první řádek začíná #!/usr/bin/php(v případě potřeby nahraďte správnou cestu k binárnímu souboru PHP CLI). Za tento řádek můžete umístit běžný PHP kód, uzavřený v PHP otevírací a uzavírací značce. Jakmile u souboru nastavíte správné atributy spuštění (např. chmod +x test), váš skript lze spustit jako běžný konzolový nebo perlový skript:

Příklad č. 1 Spuštění PHP skriptu jako konzolového skriptu

#!/usr/bin/php
var_dump ($argv);
?>

Za předpokladu, že se tento soubor nazývá test a je v aktuálním adresáři, můžeme provést následující:

$ chmod +x test $ ./test -h -- foo array(4) ( => string(6) "./test" => string(2) "-h" => string(2) "--" => string(3) "foo" )

Jak vidíte, v tomto případě se nemusíte starat o předávání parametrů, které začínají - .

Spustitelný soubor PHP lze použít ke spouštění skriptů PHP nezávisle na webovém serveru. V případě, že běžíte na systému podobném Unixu, musíte ke všem skriptům přidat speciální první řádek a nastavit je jako spustitelné, abyste označili, který program má tyto skripty zpracovávat. Na platformách Windows můžete souborům s příponami přiřadit obslužný program php.exe .php nebo vytvořte dávkový soubor (.bat) pro spouštění skriptů pomocí PHP. Řádek přidaný na začátku skriptu pro unixové systémy neovlivňuje jejich provoz na OS Windows, takže můžete vytvářet skripty pro různé platformy. Níže je uveden jednoduchý příklad skriptu spouštěného z příkazového řádku:

Příklad #2 Skript navržený ke spuštění z příkazového řádku (script.php)

#!/usr/bin/php

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

Toto je skript konzole PHP, který má jeden argument.

Používání:

) jinak (
echo $argv [ 1 ];
}
?>

Ve výše uvedeném příkladu používáme speciální první řádek k označení, že tento skript je třeba spustit pomocí PHP. Protože pracujeme s verzí CLI, nebudou se zobrazovat hlavičky HTTP. Při psaní konzolových aplikací v PHP máte k dispozici dvě proměnné: $argc a $argv . První je počet předaných argumentů plus jedna (název skriptu, který se provádí). Druhým je pole předávaných argumentů počínaje názvem skriptu s indexem nula ($argv).

Také ve výše uvedeném příkladu zkontrolujeme počet předaných argumentů. V případě, že jich je více či méně, a také v případě, že byl předaný argument --Pomoc , -Pomoc , -h nebo -? , zobrazíme nápovědu nahrazením názvu skriptu, který je dynamicky prováděn. Jinak přijatý argument jednoduše vytiskneme.

Pokud chcete výše uvedený příklad spustit na unixovém systému, budete jej muset nastavit jako spustitelný a jednoduše jej spustit z konzole script.php echothis nebo skript.php -h. V systému Windows k tomu můžete vytvořit dávkový soubor:

Příklad č. 3 Dávkový soubor pro spuštění PHP skriptu z příkazového řádku (script.bat)

@echo OFF "C:\php\php.exe" script.php %*

Za předpokladu, že se skript nazývá script.php a úplná cesta k php.exe CLI je C:\php\php.exe , daný dávkový soubor spustí skript s parametry, které jste předali: script.bat echothis nebo skript.bat -h.

Můžete se také podívat na rozšíření Readline, které lze použít k vylepšení skriptu konzoly PHP.

Existují tři různé způsoby, jak dodat CLI SAPI kód ​​PHP, který se má spustit:

    Řekněte PHP, aby provedlo určitý soubor.

    $ php my_script.php $ php -f my_script.php

    Oba způsoby (ať už pomocí -F přepnout nebo ne) spustit soubor my_script.php . Všimněte si, že neexistuje žádné omezení, které soubory mohou být spouštěny; zejména se nevyžaduje, aby název souboru měl a .php rozšíření.

    Pokud je třeba skriptu předat argumenty při použití -F, první argument musí být -- .

  1. Předejte PHP kód ke spuštění přímo na příkazovém řádku.

    $ php -r "print_r(get_defined_constants());"

    Zvláštní pozornost je třeba věnovat náhradě proměnných shellu a používání uvozovek.

    Přečtěte si pozorně příklad: neexistují žádné počáteční ani koncové značky! The -r switch je prostě nepotřebuje a jejich použití povede k chybě analýzy.

  2. Poskytněte kód PHP ke spuštění prostřednictvím standardního vstupu ( stdin).

    To dává výkonnou schopnost dynamicky vytvářet PHP kód a přivádět jej do binárního kódu, jak ukazuje tento (fiktivní) příklad:

    $some_application | nějaký_filtr | php | sort -u > final_output.txt

Nemůžete kombinovat žádný ze tří způsobů spuštění kódu.

Jako u každé shellové aplikace přijímá binární PHP řadu argumentů; PHP skript však může přijímat i další argumenty. Počet argumentů, které mohou být předány vašemu skriptu, není omezen PHP (a přestože má shell limit na počet znaků, které lze předat, není obecně pravděpodobné, že bude zasažen). Argumenty předané skriptu jsou dostupné v globálním poli $argv . První index (nula) vždy obsahuje jméno skriptu volaného z příkazového řádku. Všimněte si, že pokud je kód spuštěn in-line pomocí přepínače příkazového řádku -r, hodnota $argv bude jen pomlčka ( - ). Totéž platí, pokud je kód spuštěn přes rouru z STDIN.

před 5 lety

V Linuxu je řádek shebang (#!) analyzován jádrem na maximálně dvě části.
Například:

1: #!/usr/bin/php
2: #!/usr/bin/env php
3: #!/usr/bin/php -n
4: #!/usr/bin/php -ddisplay_errors=E_ALL
5: #!/usr/bin/php -n -ddisplay_errors=E_ALL

1. je standardní způsob spuštění skriptu. (srovnej "#!/bin/bash".)

2. používá "env" k nalezení, kde je PHP nainstalováno: může to být jinde v $PATH, jako je /usr/local/bin.

3. Pokud nepotřebujete použít env, můžete zde předat JEDEN parametr. Chcete-li například ignorovat systémový PHP.ini a jít s výchozími hodnotami, použijte "-n". (Viz "man php".)

4. nebo můžete nastavit právě jednu konfigurační proměnnou. Doporučuji tento, protože display_errors se skutečně projeví, pokud je zde nastaven. Jinak jediné místo, kde to můžete povolit, je celý systém v php.ini. Pokud se pokusíte použít ini_set() v samotném skriptu, je příliš pozdě: pokud má váš skript chybu analýzy, tiše zemře.

5. Toto nebude (od roku 2013) fungovat na Linuxu. Chová se, jako by celý řetězec "-n -ddisplay_errors=E_ALL" byl jediným argumentem. Ale v BSD může řádka shebang trvat více než 2 argumenty, a tak může fungovat tak, jak bylo zamýšleno.

Shrnutí: použijte (2) pro maximální přenositelnost a (4) pro maximální ladění.

Před 2 roky

Chyba při použití #!/usr/bin/php na začátku souboru, jak je uvedeno výše:

pokud jste soubor původně upravili ve Windows a pak se jej pokusili použít v Unixu, nebude to fungovat, protože řádek #! vyžaduje zakončení řádku Unix. Bash vám zobrazí následující chybovou zprávu, pokud má konce řádků DOS:
"bash: /usr/local/bin/wpreplace.php: /usr/bin/php^M: špatný interpret: Žádný takový soubor nebo adresář"

(V Emacsu jsem použil "CTRL-X ENTER f" a poté zadejte "unix" a ENTER pro převod)

Tento článek jsem se rozhodla věnovat všem, kteří začínají studovat PHP protože každý dostane stejnou chybu. Nevím, proč to dovolují, ale dělají to pořád. Bez nadsázky řeknu, že už jsem dostal asi stovku otázek, na které odpoví tento článek. Tato chyba souvisí s nesprávné spuštění v PHP.

Jako téměř všichni začátečníci:

  1. Vytvořit soubor PHP(Někdy HTML soubor, ale to jsou nejvíce začátečníci).
  2. Napište to tam PHP kód.
  3. A poklepáním jej otevřou v prohlížeči.

Výsledkem je, že prohlížeč otevře kód, ale nespěchá s jeho spuštěním. Jednoduše zobrazí některé části kódu v prostém textu nebo nezobrazí vůbec nic.

Chybou tohoto přístupu je, že tomu žák nerozumí PHP je jazyk na straně serveru, nikoli klient. Tento HTML nebo JavaScript klientské jazyky, jsou samozřejmě zpracovávány prohlížečem. Ale pro PHP potřebuje překladač. A tento interpret je spuštěn serverem.

Závěr: musíte spustit PHP kód přes server. Pokud máte Denwer, tedy jeho prostřednictvím.

Nyní, jak spustit PHP kód přes Denwer. Většina začátečníků dělá stejnou chybu znovu. Zdá se, že vše dělají správně, vytvářejí potřebné složky, restartují se Denwer a zdá se, že zbývá jen správně zavolat soubor. Zde je ale opět chyba: opět otevřou soubor jednoduše v prohlížeči (buď přetažením souboru do prohlížeče nebo dvojitým kliknutím). To lze snadno zjistit pomocí adresy v adresním řádku. Bude tam něco jako: file:///Z:\home\mysite.local\www\script.php.

A musíte to spustit správně, zadání adresy virtuálního hostitele. To znamená, že přímo do adresního řádku prohlížeče zadejte: http://mysite.local/script.php- to je vše, nyní se skript spustí a zobrazí výsledek.

Doufám, že tento článek pomůže mnoha začátečníkům, kteří se teprve začínají učit PHP.




Horní