Användning

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Köra PHP-filer

Det finns tre olika sätt att tillhandahålla PHP-kod till CLI SAPI för att exekveras:

Berätta för PHP att köra en viss fil

$ php my_script.php

$ php -f my_script.php

Båda sätten (med eller utan flaggan `-f`) kör filen my_script.php. Notera att det inte finns någon begränsning för vilka filer som kan köras; särskilt behöver filnamnet inte ha en .php-ändelse.

Skicka PHP-koden direkt på kommandoraden

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

Särskild försiktighet måste iakttas med avseende på ersättning av shell-variabler och användning av citationstecken.

Notera:

Läs exemplet noggrant: det finns inga start- eller sluttaggar! Flaggan `-r` behöver dem helt enkelt inte, och att använda dem kommer att leda till ett tolkningsfel.

Tillhandahåll PHP-koden via standard inmatning (stdin)

Detta ger den kraftfulla möjligheten att skapa PHP-kod dynamiskt och mata den till binären, som visas i detta (fiktiva) exempel:

$ some_application | some_filter | php | sort -u > final_output.txt

Du kan inte kombinera någon av de tre sätten att köra kod.

Som med varje shell-applikation accepterar PHP-binären ett antal argument; dock kan PHP-skriptet också ta emot ytterligare argument. Antalet argument som kan skickas till ditt skript är inte begränsat av PHP (och även om shell har en gräns för antalet tecken som kan skickas, är det i allmänhet inte sannolikt att den nås). Argumenten som skickas till skriptet är tillgängliga i den globala arrayen `$argv`. Det första indexet (noll) innehåller alltid namnet på skriptet som anropats från kommandoraden. Notera att om koden exekveras inline med hjälp av kommandoradsflaggan `-r`, kommer värdet av `$argv[0]` att vara "Standard input code"; före PHP 7.2.0 var det istället ett bindestreck ("-"). Detsamma gäller om koden exekveras via en pipe från `STDIN`.

En andra global variabel, `$argc`, innehåller antalet element i `$argv`-arrayen (inte antalet argument som skickats till skriptet).

Så länge argumenten som ska skickas till skriptet inte börjar med tecknet `-`, finns det inget särskilt att vara uppmärksam på. Att skicka ett argument till skriptet som börjar med `-` kommer att orsaka problem eftersom PHP-tolken tror att den måste hantera det själv, redan innan skriptet exekveras. För att förhindra detta, använd argumentlistseparatorn `--`. Efter att denna separator har tolkats av PHP, skickas varje följande argument oförändrat till skriptet.

# Detta kommer inte att exekvera den givna koden utan kommer att visa PHP-användningen

$ php -r 'var_dump($argv);' -h

Usage: php [options] [-f] <file> [args...]

[...]

# Detta kommer att skicka '-h'-argumentet till skriptet och förhindra att PHP visar sin användning

$ php -r 'var_dump($argv);' -- -h

array(2) {

  [0]=>

  string(1) "-"

  [1]=>

  string(2) "-h"

}

Men på Unix-system finns det ett annat sätt att använda PHP för shell-skriptning: gör så att första raden i skriptet börjar med `#!/usr/bin/php` (eller vilken sökväg din PHP CLI-binär har om den är annorlunda). Resten av filen bör innehålla vanlig PHP-kod inom de vanliga PHP start- och sluttaggarna. När exekveringsattributen för filen har ställts in på lämpligt sätt (t.ex. `chmod +x test`), kan skriptet köras som vilket annat shell- eller perl-skript som helst:

Exempel #1 Exekvera PHP-skript som shell-skript

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

Förutsatt att denna fil heter `test` i den aktuella katalogen, är det nu möjligt att göra följande:

$ chmod +x test

$ ./test -h -- foo

array(4) {

  [0]=>

  string(6) "./test"

  [1]=>

  string(2) "-h"

  [2]=>

  string(2) "--"

  [3]=>

  string(3) "foo"

}

Som kan ses, i detta fall behöver ingen särskild försiktighet iakttas när man skickar parametrar som börjar med `-`.

PHP-exekverbara filen kan användas för att köra PHP-skript helt oberoende av webbservern. På Unix-system bör den speciella `#!` (eller "shebang") första raden läggas till PHP-skript så att systemet automatiskt kan avgöra vilket program som ska köra skriptet. På Windows-plattformar är det möjligt att associera `php.exe` med dubbelklicksalternativet för `.php`-filer, eller så kan en batchfil skapas för att köra skript genom PHP. Den speciella shebang-första raden för Unix gör ingen skada på Windows (eftersom den formateras som en PHP-kommentar), så plattformsoberoende program kan skrivas genom att inkludera den. Ett enkelt exempel på att skriva ett kommandorads-PHP-program visas nedan.

Exempel #2 Skript avsett att köras från kommandoraden (script.php)

#!/usr/bin/php
<?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];

}

?>

Skriptet ovan inkluderar Unix shebang-första raden för att indikera att denna fil ska köras av PHP. Vi arbetar med en CLI-version här, så inga HTTP-headers kommer att skickas.

Programmet kontrollerar först att det finns det nödvändiga argumentet (utöver skriptnamnet, som också räknas). Om inte, eller om argumentet var `--help`, `-help`, `-h` eller `-?`, skrivs hjälpmeddelandet ut, genom att använda `$argv[0]` för att dynamiskt skriva ut skriptnamnet som skrivet på kommandoraden. Annars ekas argumentet ut exakt som mottaget.

För att köra skriptet ovan på Unix måste det göras exekverbart och kallas helt enkelt som `script.php echothis` eller `script.php -h`. På Windows kan en batchfil liknande följande skapas för denna uppgift:

Exempel #3 Batchfil för att köra ett kommandorads-PHP-skript (script.bat)

@echo OFF

"C:\php\php.exe" script.php %*

Förutsatt att programmet ovan heter `script.php` och att CLI `php.exe` finns i `C:\php\php.exe`, kommer denna batchfil att köra det, och skicka vidare alla bifogade alternativ: `script.bat echothis` eller `script.bat -h`.

Se även dokumentationen för Readline-tillägget för fler funktioner som kan användas för att förbättra kommandoradsapplikationer i PHP.

På Windows kan PHP konfigureras för att köras utan behovet av att ange `C:\php\php.exe` eller `.php`-ändelsen, som beskrivs i Kommandorads-PHP på Microsoft Windows.

Notera:

På Windows rekommenderas det att köra PHP under ett faktiskt användarkonto. När man kör under en nätverkstjänst kommer vissa operationer att misslyckas, eftersom "Ingen mappning mellan kontonamn och säkerhets-ID gjordes".

Köra PHP-filer

Det finns tre olika sätt att tillhandahålla PHP-kod till CLI SAPI för att exekveras:

Berätta för PHP att köra en viss fil

$ php my_script.php

$ php -f my_script.php

Båda sätten (med eller utan flaggan `-f`) kör filen my_script.php. Notera att det inte finns någon begränsning för vilka filer som kan köras; särskilt behöver filnamnet inte ha en .php-ändelse.

Skicka PHP-koden direkt på kommandoraden

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

Särskild försiktighet måste iakttas med avseende på ersättning av shell-variabler och användning av citationstecken.

Notera:

Läs exemplet noggrant: det finns inga start- eller sluttaggar! Flaggan `-r` behöver dem helt enkelt inte, och att använda dem kommer att leda till ett tolkningsfel.

Tillhandahåll PHP-koden via standard inmatning (stdin)

Detta ger den kraftfulla möjligheten att skapa PHP-kod dynamiskt och mata den till binären, som visas i detta (fiktiva) exempel:

$ some_application | some_filter | php | sort -u > final_output.txt

Du kan inte kombinera någon av de tre sätten att köra kod.

Som med varje shell-applikation accepterar PHP-binären ett antal argument; dock kan PHP-skriptet också ta emot ytterligare argument. Antalet argument som kan skickas till ditt skript är inte begränsat av PHP (och även om shell har en gräns för antalet tecken som kan skickas, är det i allmänhet inte sannolikt att den nås). Argumenten som skickas till skriptet är tillgängliga i den globala arrayen `$argv`. Det första indexet (noll) innehåller alltid namnet på skriptet som anropats från kommandoraden. Notera att om koden exekveras inline med hjälp av kommandoradsflaggan `-r`, kommer värdet av `$argv[0]` att vara "Standard input code"; före PHP 7.2.0 var det istället ett bindestreck ("-"). Detsamma gäller om koden exekveras via en pipe från `STDIN`.

En andra global variabel, `$argc`, innehåller antalet element i `$argv`-arrayen (inte antalet argument som skickats till skriptet).

Så länge argumenten som ska skickas till skriptet inte börjar med tecknet `-`, finns det inget särskilt att vara uppmärksam på. Att skicka ett argument till skriptet som börjar med `-` kommer att orsaka problem eftersom PHP-tolken tror att den måste hantera det själv, redan innan skriptet exekveras. För att förhindra detta, använd argumentlistseparatorn `--`. Efter att denna separator har tolkats av PHP, skickas varje följande argument oförändrat till skriptet.

# Detta kommer inte att exekvera den givna koden utan kommer att visa PHP-användningen

$ php -r 'var_dump($argv);' -h

Usage: php [options] [-f] <file> [args...]

[...]

# Detta kommer att skicka '-h'-argumentet till skriptet och förhindra att PHP visar sin användning

$ php -r 'var_dump($argv);' -- -h

array(2) {

  [0]=>

  string(1) "-"

  [1]=>

  string(2) "-h"

}

Men på Unix-system finns det ett annat sätt att använda PHP för shell-skriptning: gör så att första raden i skriptet börjar med `#!/usr/bin/php` (eller vilken sökväg din PHP CLI-binär har om den är annorlunda). Resten av filen bör innehålla vanlig PHP-kod inom de vanliga PHP start- och sluttaggarna. När exekveringsattributen för filen har ställts in på lämpligt sätt (t.ex. `chmod +x test`), kan skriptet köras som vilket annat shell- eller perl-skript som helst:

Exempel #1 Exekvera PHP-skript som shell-skript

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

Förutsatt att denna fil heter `test` i den aktuella katalogen, är det nu möjligt att göra följande:

$ chmod +x test

$ ./test -h -- foo

array(4) {

  [0]=>

  string(6) "./test"

  [1]=>

  string(2) "-h"

  [2]=>

  string(2) "--"

  [3]=>

  string(3) "foo"

}

Som kan ses, i detta fall behöver ingen särskild försiktighet iakttas när man skickar parametrar som börjar med `-`.

PHP-exekverbara filen kan användas för att köra PHP-skript helt oberoende av webbservern. På Unix-system bör den speciella `#!` (eller "shebang") första raden läggas till PHP-skript så att systemet automatiskt kan avgöra vilket program som ska köra skriptet. På Windows-plattformar är det möjligt att associera `php.exe` med dubbelklicksalternativet för `.php`-filer, eller så kan en batchfil skapas för att köra skript genom PHP. Den speciella shebang-första raden för Unix gör ingen skada på Windows (eftersom den formateras som en PHP-kommentar), så plattformsoberoende program kan skrivas genom att inkludera den. Ett enkelt exempel på att skriva ett kommandorads-PHP-program visas nedan.

Exempel #2 Skript avsett att köras från kommandoraden (script.php)

#!/usr/bin/php
<?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];

}

?>

Skriptet ovan inkluderar Unix shebang-första raden för att indikera att denna fil ska köras av PHP. Vi arbetar med en CLI-version här, så inga HTTP-headers kommer att skickas.

Programmet kontrollerar först att det finns det nödvändiga argumentet (utöver skriptnamnet, som också räknas). Om inte, eller om argumentet var `--help`, `-help`, `-h` eller `-?`, skrivs hjälpmeddelandet ut, genom att använda `$argv[0]` för att dynamiskt skriva ut skriptnamnet som skrivet på kommandoraden. Annars ekas argumentet ut exakt som mottaget.

För att köra skriptet ovan på Unix måste det göras exekverbart och kallas helt enkelt som `script.php echothis` eller `script.php -h`. På Windows kan en batchfil liknande följande skapas för denna uppgift:

Exempel #3 Batchfil för att köra ett kommandorads-PHP-skript (script.bat)

@echo OFF

"C:\php\php.exe" script.php %*

Förutsatt att programmet ovan heter `script.php` och att CLI `php.exe` finns i `C:\php\php.exe`, kommer denna batchfil att köra det, och skicka vidare alla bifogade alternativ: `script.bat echothis` eller `script.bat -h`.

Se även dokumentationen för Readline-tillägget för fler funktioner som kan användas för att förbättra kommandoradsapplikationer i PHP.

På Windows kan PHP konfigureras för att köras utan behovet av att ange `C:\php\php.exe` eller `.php`-ändelsen, som beskrivs i Kommandorads-PHP på Microsoft Windows.

Notera:

På Windows rekommenderas det att köra PHP under ett faktiskt användarkonto. När man kör under en nätverkstjänst kommer vissa operationer att misslyckas, eftersom "Ingen mappning mellan kontonamn och säkerhets-ID gjordes".

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/features.commandline.usage.php

PHP Funktioner


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp.se som har sponsrat Linux.se med webserver.