PHP Conference Japan 2024

Kommandozeilenoptionen

Die Liste der Kommandozeilenoptionen, die das PHP-Binary bereitstellt, kann jederzeit abgerufen werden, indem PHP mit der Option -h gestartet wird:

Usage: php [options] [-f] <file> [--] [args...]
   php [options] -r <code> [--] [args...]
   php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
   php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
   php [options] -- [args...]
   php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse and execute <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -S <addr>:<port> Run with built-in web server.
  -t <docroot>     Specify document root <docroot> for built-in web server.
  -s               Output HTML syntax highlighted source.
  -v               Version number
  -w               Output source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.
  --rz <name>      Show information about Zend extension <name>.
  --ri <name>      Show configuration for extension <name>.

Kommandozeilenoptionen
Option Langform Beschreibung
-a --interactive

Startet PHP im interaktiven Modus. Für weitere Informationen siehe die Dokumentation für den Interaktiven Modus.

-b --bindpath

Der Bind-Pfad für den externen FASTCGI-Servermodus (nur CGI).

-C --no-chdir

Nicht in das Verzeichnis des Skripts wechseln (nur CGI).

-q --no-header

Der Quiet-Modus. Unterdrücke die Ausgabe von HTTP-Headern (nur CGI).

-T --timing

Misst die Ausführungszeit des Skripts. Dies wird count mal durchgeführt (nur CGI).

-c --php-ini

Mit dieser Option kann man entweder ein Verzichnis angeben, in welchem nach der php.ini gesucht werden soll, oder man kann eine eigene INI-Datei angeben (diese muss nicht php.ini heissen). Zum Beispiel:

$ php -c /custom/directory/ my_script.php

$ php -c /custom/directory/custom-file.ini my_script.php

Wenn diese Option nicht angegeben wird, wird die php.ini-Datei an den vorgegebenen Orten gesucht.

-n --no-php-ini

php.ini komplett ignorieren.

-d --define

Diese Option erlaubt es Ihnen, einen eigenen Wert für eine beliebige in php.ini erlaubte Direktive zu setzen. Die Syntax ist:

-d configuration_directive[=value]

Beispiel #1 Beispiel für die Verwendung von -d zum Setzen einer INI-Direktive

# Auslassen des Wertes setzt die Direktive auf "1"
$ php -d max_execution_time
      -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Übergeben eines leeren Wertes setzt die Direktive auf ""
php -d max_execution_time=
    -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# Die Direktive wird auf das gesetzt, was nach '=' kommt
$  php -d max_execution_time=20
       -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php
       -d max_execution_time=doesntmakesense
       -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "doesntmakesense"

-e --profile-info

Erweiterte Informationen für Debugger/Profiler erstellen.

-f --file

Parst die angegebene Datei und führt sie aus. Das -f ist optional und kann weggelassen werden. Es genügt, nur den Dateinamen anzugeben.

-h und -? --help und --usage Gibt eine Liste von Kommandozeilenoptionen mit kurzen Beschreibungen ihrer Funktion aus.
-i --info Diese Kommandozeilenoption ruft phpinfo() auf und gibt das Ergebnis aus. Wenn PHP nicht korrekt funktioniert, ist es empfehlenswert, php -i zu verwenden und nachzusehen, ob etwa Fehlermeldungen vor oder statt der Informationstabellen ausgegeben werden. Beachten Sie, dass die Ausgabe bei Verwendung des CGI-Modus in HTML erfolgt und deswegen ziemlich umfangreich ist.
-l --syntax-check

Überprüft die Syntax, führt aber den angegebenen PHP-Code nicht aus. Wenn kein Dateiname angegeben ist, wird die Eingabe von der Standardeingabe verarbeitet, andernfalls wird jede angegebene Datei überprüft. Bei Erfolg wird der Text No syntax errors detected in <filename> auf der Standardausgabe ausgegeben. Bei einem Fehler wird zusätzlich zum internen Parser-Fehler der Text Errors parsing <filename> auf der Standardausgabe ausgegeben. Wenn in den angegebenen Dateien (oder der Standardeingabe) irgendwelche Fehler gefunden werden, wird der Shell-Rückgabecode auf -1 gesetzt, andernfalls wird er auf 0 gesetzt.

Diese Option findet keine fatalen Fehler (z. B. undefinierte Funktionen), die die Ausführung des Codes erfordern.

Hinweis:

Vor PHP 8.3.0 war es nur möglich, den Namen einer Datei anzugeben, die überprüft werden sollte.

Hinweis:

Diese Option funktioniert nicht zusammen mit der Option -r.

-m --modules

Beispiel #2 Ausgabe der geladenen PHP- und Zend-Module

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

-r --run

Diese Option erlaubt die Ausführung von PHP Code direkt von der Kommandozeile. Die PHP-Tags <?php und ?> werden nicht benötigt und verursachen einen Parsefehler, wenn sie dennoch vorhanden sind.

Hinweis:

Bei der Verwendung dieser Option in PHP ist besondere Vorsicht geboten, dass es nicht zu Kollisionen mit dem Ersetzen von Kommandozeilenvariablen durch die Shell kommt.

Beispiel #3 Syntaxfehler beim Verwenden von doppelten Anführungszeichen

$ php -r "$foo = get_defined_constants();"
PHP Parse error:  syntax error, unexpected '=' in Command line code on line 1

Parse error: syntax error, unexpected '=' in Command line code on line 1

Das Problem hier ist, dass auch sh/bash Variablen ersetzt, wenn doppelte Anführungszeichen (") verwendet werden. Weil die Variable $foo wahrscheinlich nicht definiert ist, wird die Variable zu nichts aufgelöst. Der entstehende Code, welcher PHP übergeben wird, sieht so aus:

$ php -r " = get_defined_constants();"

Der richtige Weg wäre, einfache Anführungszeichen (') zu verwenden. Variablen in einfachen Anführungszeichen werden von sh/bash nicht ersetzt.

Beispiel #4 Verwendung einfacher Anführungszeichen, um ein Ersetzen der Variablen durch die Shell zu verhindern

$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_CORE_ERROR"]=>
  [...]

Wenn eine andere Kommandozeilenumgebung als sh/bash verwendet wird, könnten weitere Probleme auftreten. Gegebenenfalls kann unter » https://github.com/php/php-src/issues ein Bugreport erstellt werden. Man kann dennoch leicht in Schwierigkeiten geraten, wenn man versucht PHP- oder Shell-Variablen zu verwenden, oder Backslashes zum Maskieren verwendet. Sie wurden gewarnt!

Hinweis:

-r ist in der CLI SAPI verfügbar, nicht jedoch in der CGI-SAPI.

Hinweis:

Diese Option ist für sehr einfachen Code gedacht, weshalb einige Direktiven wie etwa auto_prepend_file und auto_append_file in diesem Modus ignoriert werden.

-B --process-begin

PHP-Code, der ausgeführt werden soll, bevor stdin ausgewertet wird.

-R --process-code

PHP-Code, der für jede Eingabezeile ausgeführt werden soll.

Es gibt zwei spezielle Variablen in diesem Modus: $argn und $argi. $argn enthält die Zeile, die PHP gerade verarbeitet und $argi enthält die Zeilennummer.

-F --process-file

PHP-Datei, die für jede Eingabezeile ausgeführt werden soll.

-E --process-end

PHP-Code, der nach der Verarbeitung der Eingabe ausgeführt werden soll.

Beispiel #5 Nutzung der Optionen -B, -R und -E, um die Anzahl der Zeilen in einem Projekt zu zählen.

$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Zeilen insgesamt: $l\n";'
Zeilen insgesamt: 37328

-S --server

Startet den eingebauten Webserver.

-t --docroot Gibt den Document-Root (Wurzelverzeichnis der Dokumente) für den eingebauten Webserver an.
-s --syntax-highlight und --syntax-highlighting

Den Quelltext mit farblich hervorgehobener Syntax anzeigen.

Diese Option verwendet den internen Mechanismus zum Parsen von Dateien, um eine HTML-Version mit Syntax-Highlighting auf die Standardausgabe zu schreiben. Beachten Sie, dass sie nur einen Block mit den HTML-Tags <code> [...] </code> erzeugt, jedoch keine HTML-Header.

Hinweis:

Diese Option funktioniert nicht zusammen mit -r.

-v --version

Beispiel #6 Nutzung von -v, um den SAPI-Namen, sowie die PHP- und Zend-Version zu ermitteln

$ php -v
PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

-w --strip

Den Quelltext ohne Kommentare und Leerzeichen anzeigen.

Hinweis:

Diese Option funktioniert nicht zusammen mit -r.

-z --zend-extension

Eine Zend-Erweiterung laden. Wenn nur ein Dateiname angegeben wird, versucht PHP, die Erweiterung aus dem momentanen Standard-Bibliotheken-Pfad auf Ihrem System zu laden (auf Linux-Systemen normalerweise in /etc/ld.so.conf angegeben). Wenn ein Dateiname mit absoluter Pfadinformation übergeben wird, wird der Bibliotheken-Pfad des Systems nicht verwendet. Ein relativer Dateiname mit Pfadinformationen wird PHP veranlassen, zu versuchen, die Erweiterung in einem Pfad relativ zum aktuellen Verzeichnis zu laden.

  --ini

Zeigt die Namen der Konfigurationsdateien und die durchsuchten Verzeichnisse.

Beispiel #7 --ini-Beispiel

$ php --ini
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

--rf --rfunction

Zeigt Informationen über die angegebene Funktion oder Klassenmethode (z. B. Anzahl und Namen der Parameter).

Diese Option ist nur verfügbar, wenn PHP mit Reflection-Unterstützung kompiliert wurde.

Beispiel #8 Einfache --rf-Nutzung

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

  - Parameters [2] {
    Parameter #0 [ <required> $var ]
    Parameter #1 [ <optional> $... ]
  }
}

--rc --rclass

Zeigt Inforationen über die angegebene Klasse (Liste der Konstanten, Eigenschaften und Methoden).

Diese Option ist nur verfügbar, wenn PHP mit Reflection-Unterstützung kompiliert wurde.

Beispiel #9 --rc-Beispiel

$ php --rc Directory
Class [ <internal:standard> class Directory ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [3] {
    Method [ <internal> public method close ] {
    }

    Method [ <internal> public method rewind ] {
    }

    Method [ <internal> public method read ] {
    }
  }
}

--re --rextension

Zeigt Informationen über die angegebene Erweiterung (Liste der php.ini-Optionen, definierte Funktionen, Konstanten und Klassen).

Diese Option ist nur verfügbar, wenn PHP mit Reflection-Unterstützung kompiliert wurde.

Beispiel #10 --re-Beispiel

$ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {

  - Functions {
    Function [ <internal> function json_encode ] {
    }
    Function [ <internal> function json_decode ] {
    }
  }
}

--rz --rzendextension

Zeigt Konfiguration der angegebenen Zend-Erweiterung an (entspricht der von phpinfo() zurückgegebenen Information).

--ri --rextinfo

Zeigt die Konfiguration der angegebenen Erweiterung an (entspricht der von phpinfo() zurückgegebenen Information). Die Konfiguration des Sprachkerns kann über den speziellen Erweiterungsnamen "main" ermittelt werden.

Beispiel #11 --ri-Beispiel

$ php --ri date

date

date/time support => enabled
"Olson" Timezone Database Version => 2009.20
Timezone Database => internal
Default timezone => Europe/Oslo

Directive => Local Value => Master Value
date.timezone => Europe/Oslo => Europe/Oslo
date.default_latitude => 59.930972 => 59.930972
date.default_longitude => 10.776699 => 10.776699
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333

Hinweis:

Die Optionen -rBRFEH, --ini und --r[fcezi] sind nur für CLI verfügbar.

add a note

User Contributed Notes 2 notes

up
1
dch
1 year ago
If you would like to see the PHP's current configuration using the -i switch from the shell command line with php.ini specified, then the order of arguments is important. Putting -i after -c gives the intended result.

Info is printed out for the default php.ini (cli)
$ php -i --php-ini /etc/php/7.4/fpm/php.ini | grep -i "loaded conf"
Loaded Configuration File => /etc/php/7.4/cli/php.ini

Info is printed out for the desired php.ini (fpm)
$ php --php-ini /etc/php/7.4/fpm/php.ini -i | grep -i "loaded conf"
Loaded Configuration File => /etc/php/7.4/fpm/php.ini
up
-2
Ap.Muthu
10 years ago
If we start the php's built in webserver (PHP v5.4 onwards) with:
php -S localhost:8000 -t htdocs
and have an image file picture.jpg in it
and reference it in a html page with:
<img src="picture.jpg">
the rendered page will not show the image and the html code behind the image is:
http://localhost:8000/index.php/picture.jpg

If however, the html code in the page is:
<img src="/picture.jpg">
the picture displays correctly.

Hence relative addressing is broken in PHP 5.4.33 Win32 VC9 build.
To Top