mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 07:12:15 +01:00
2016 lines
64 KiB
XML
2016 lines
64 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 74ba8fee2972b6ba4f955392d760dea54e757a95 Maintainer: nikic Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
<!-- Rev-Revision: a2fc23851f710d7f0de3dceb23dc68ee34d17b32 Reviewer: samesch -->
|
|
<!-- Credits: hholzgra, fa -->
|
|
<chapter xml:id="features.commandline" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Nutzung von PHP auf der Kommandozeile</title>
|
|
<titleabbrev>Nutzung der Kommandzeile</titleabbrev>
|
|
|
|
<!--Introduction: {{{-->
|
|
<section xml:id="features.commandline.introduction" annotations="chunk:false">
|
|
<title>Introduction</title>
|
|
<para>
|
|
Das Hauptaugenmerk der &cli.sapi; liegt auf der Entwicklung von
|
|
Kommandozeilenanwendungen. Es gibt einige Unterschiede zwischen der
|
|
&cli.sapi; und anderen <acronym>SAPI</acronym>s, welche in diesem Kapitel
|
|
beschrieben werden. Es ist erwähnenswert, dass &cli; und
|
|
<acronym>CGI</acronym> verschiedene <acronym>SAPI</acronym>s sind, auch
|
|
wenn sie viele Verhaltensweisen teilen.
|
|
</para>
|
|
<para>
|
|
Die &cli.sapi; ist standardmäßig durch die Option
|
|
<option role="configure">--enable-cli</option> aktiviert, kann jedoch durch
|
|
Angabe der Option <option role="configure">--disable-cli</option> im
|
|
<command>./configure</command>-Skript deaktiviert werden.
|
|
</para>
|
|
<para>
|
|
Der Name, der Pfad und das Vorhandensein der
|
|
&cli;/<acronym>CGI</acronym>-Binaries hängt davon ab, wie PHP auf dem
|
|
System installiert wurde. Standarmäßig werden nach dem Aufruf von
|
|
<command>make</command> sowohl <acronym>CGI</acronym> als auch &cli;
|
|
kompiliert und als <filename>sapi/cgi/php-cgi</filename> beziehungsweise
|
|
<filename>sapi/cli/php</filename> in Ihrem PHP-Quellcodeverzeichnis
|
|
gespeichert. Sie werden bemerken, dass beide <filename>php</filename>
|
|
heißen. Was während <command>make install</command> passiert, hängt davon
|
|
ab, wie PHP konfiguriert wurde. Wenn bei der Konfiguration eine
|
|
Modul-<acronym>SAPI</acronym> wie &zb; apxs gewählt wurde oder die Option
|
|
<option role="configure">--disable-cgi</option> genutzt wurde, wird die
|
|
&cli; während <command>make install</command> nach
|
|
<filename>{PREFIX}/bin/php</filename> kopiert. Andernfalls wird das
|
|
<acronym>CGI</acronym>-Binary dorthin kopiert. Also wird, wenn
|
|
beispielsweise <option role="configure">--with-apxs</option> in Ihrem
|
|
configure-Kommando angegeben ist, die &cli; während <command>make
|
|
install</command> nach <filename>{PREFIX}/bin/php</filename> kopiert. Wenn
|
|
Sie die Installation des <acronym>CGI</acronym>-Binaries überschreiben
|
|
wollen, verwenden Sie <command>make install-cli</command> nach
|
|
<command>make install</command>. Alternativ können Sie
|
|
<option role="configure">--disable-cgi</option> in Ihrem configure-Kommando
|
|
angeben.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Weil sowohl <option role="configure">--enable-cli</option> als auch
|
|
<option role="configure">--enable-cgi</option> standardmäßig eingeschaltet
|
|
sind, muss <option role="configure">--enable-cli</option> in Ihrem
|
|
configure-Kommando nicht zwingend bedeuten, dass die &cli; während
|
|
<command>make install</command> nach <filename>{PREFIX}/bin/php</filename>
|
|
kopiert wird.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Auf Windows wird das &cli;-Binary im Hauptordner als
|
|
<filename>php.exe</filename> ausgeliefert. Die
|
|
<acronym>CGI</acronym>-Version wird als <filename>php-cgi.exe</filename>
|
|
bereitgestellt. Zusätzlich wird <filename>php-win.exe</filename>
|
|
ausgeliefert, wenn PHP mit
|
|
<option role="configure">--enable-cli-win32</option> konfiguriert wurde.
|
|
Dieses Binary verhält sich genauso wie die &cli;-Version, bis auf die
|
|
Tatsache, dass sie nichts ausgibt und somit keine Konsole zur Verfügung
|
|
stellt.
|
|
</para>
|
|
<note>
|
|
<title>Welche SAPI habe ich?</title>
|
|
<para>
|
|
Auf der Kommandozeile wird Ihnen die Eingabe von <command>php -v</command>
|
|
verraten, ob Sie <filename>php</filename> als <acronym>CGI</acronym> oder
|
|
&cli; einsetzen. Sehen Sie sich auch die Funktion
|
|
<function>php_sapi_name</function> und die Konstante
|
|
<constant>PHP_SAPI</constant> an.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Eine UNIX-<literal>man</literal>page ist durch Eingabe von
|
|
<command>man php</command> auf der Kommandozeile verfügbar.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<!--Differences: {{{-->
|
|
<section xml:id="features.commandline.differences">
|
|
<title>Unterschiede zu anderen <acronym>SAPI</acronym>s</title>
|
|
<para>
|
|
Wesentliche Unterschiede der &cli;-<acronym>SAPI</acronym> zu anderen
|
|
<acronym>SAPI</acronym>s:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Anders als bei der <acronym>CGI</acronym>-<acronym>SAPI</acronym> werden
|
|
keine Header ausgegeben.
|
|
</para>
|
|
<para>
|
|
Obwohl die <acronym>CGI</acronym>-<acronym>SAPI</acronym> eine Option
|
|
bietet, HTTP-Header zu unterdrücken, gibt es keine gleichwertige Option,
|
|
sie in der &cli.sapi; anzuzeigen.
|
|
</para>
|
|
<para>
|
|
&cli; wird standardmäßig im stillen Modus gestartet, dennoch gibt es die
|
|
Optionen <option>-q</option> und <option>--no-header</option> aus
|
|
Kompatibilitätsgründen noch, sodass auch ältere
|
|
<acronym>CGI</acronym>-Skripte noch verwendet werden können.
|
|
</para>
|
|
<para>
|
|
Es wechselt das Arbeitsverzeichnis nicht in das des Skriptes. (Die
|
|
Optionen <option>-C</option> und <option>--no-chdir</option> wurden aus
|
|
Kompatibilitätsgründen beibehalten.)
|
|
</para>
|
|
<para>
|
|
Fehlermeldungen im Klartext (keine <acronym>HTML</acronym>-Formatierung).
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Es gibt bestimmte &php.ini;-Direktiven, die von der &cli.sapi; außer
|
|
Kraft gesetzt werden, weil sie in einer Kommandozeilenumgebung keinen
|
|
Sinn ergeben.
|
|
</para>
|
|
<para>
|
|
<table>
|
|
<title>Überschriebene &php.ini;-Direktiven</title>
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry>Direktive</entry>
|
|
<entry>&cli; <acronym>SAPI</acronym>-Standardwert</entry>
|
|
<entry>Kommentar</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><link linkend="ini.html-errors">html_errors</link></entry>
|
|
<entry>&false;</entry>
|
|
<entry>
|
|
Die Standardeinstellung ist &false;, weil es sehr schwierig sein
|
|
kann, Fehlermeldunge auf der Kommandozeile zu lesen, wenn sie
|
|
mit bedeutungslosen <acronym>HTML</acronym>-Tags vollgestopft ist.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.implicit-flush">implicit_flush</link></entry>
|
|
<entry>&true;</entry>
|
|
<entry>
|
|
Auf der Kommandozeile ist es normalerweise erwünscht, dass alle
|
|
Ausgaben, die von <function>print</function>,
|
|
<function>echo</function> und Konsorten kommen, sofort angezeigt
|
|
werden und nicht in einem Puffer zwischengespeichert werden. Es ist
|
|
jedoch immer noch möglich,
|
|
<link linkend="ref.outcontrol">output buffering</link> zu
|
|
verwenden, um die Standardausgabe aufzuschieben oder zu
|
|
manipulieren.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.max-execution-time">max_execution_time</link></entry>
|
|
<entry>0 (unendlich)</entry>
|
|
<entry>
|
|
Da die Anwendungsbereiche von PHP auf der Kommandozeile wesentlich
|
|
vielfältiger sind als in webbasierten Anwendungen und oft lange
|
|
Laufzeiten besitzen, wird die maximale Ausführungszeit auf
|
|
unendlich gesetzt.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.register-argc-argv">register_argc_argv</link></entry>
|
|
<entry>&true;</entry>
|
|
<entry>
|
|
<para>
|
|
Weil diese Einstellung auf &true; gesetzt ist, haben Skripte, die
|
|
über die &cli;-<acronym>SAPI</acronym> ausgeführt werden, immer
|
|
Zugriff auf <emphasis>argc</emphasis> (die Anzahl der Argumente,
|
|
die der Anwendung übergeben wurden) und <emphasis>argv</emphasis>
|
|
(das Array mit den übergebenen Argumenten).
|
|
</para>
|
|
<para>
|
|
Die PHP-Variablen <varname>$argc</varname> und
|
|
<varname>$argv</varname> werden automatisch mit den entsprechenden
|
|
Werten gefüllt, wenn die &cli;-<acronym>SAPI</acronym> verwendet
|
|
wird. Diese Werte können auch im Array <varname>$_SERVER</varname>
|
|
gefunden werden, beispielsweise:
|
|
<varname>$_SERVER['argv']</varname>.
|
|
</para>
|
|
<warning>
|
|
<para>
|
|
Wenn
|
|
<link linkend="ini.register-argc-argv">register_argc_argv</link>
|
|
aktiviert ist, ist das Vorhandensein von <varname>$argv</varname>
|
|
oder <varname>$_SERVER['argv']</varname> kein zuverlässiger
|
|
Hinweis darauf, dass ein Skript von der Kommandozeile aus
|
|
ausgeführt wird, da diese Variablen auch in anderen Kontexten
|
|
gesetzt werden können.
|
|
Stattdessen sollte der von <function>php_sapi_name</function>
|
|
zurückgegebene Wert überprüft werden.
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
if (php_sapi_name() === 'cli') {
|
|
echo "Dies wird von der Befehlszeile aus ausgeführt!\n";
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</warning>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.output-buffering">output_buffering</link></entry>
|
|
<entry>&false;</entry>
|
|
<entry>
|
|
<para>
|
|
Auch wenn diese &php.ini;-Option fest auf &false; gesetzt ist,
|
|
sind die Funktionen der
|
|
<link linkend="book.outcontrol">Ausgabepufferung</link> verfügbar.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.max-input-time">max_input_time</link></entry>
|
|
<entry>&false;</entry>
|
|
<entry>
|
|
<para>
|
|
Die PHP-&cli; unterstützt GET, POST und Dateiuploads nicht.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Diese Direktiven können nicht mit einem anderen Wert aus der
|
|
Konfigurationsdatei &php.ini; oder einer eigenen (falls angegeben)
|
|
initialisiert werden. Diese Einschränkung ergibt sich dadurch, dass
|
|
diese Standardwerte angewandt werden, nachdem alle
|
|
Konfigurationsdateien gelesen wurden. Dennoch können die Werte zur
|
|
Laufzeit verändert werden (was aber nicht für alle dieser Direktiven
|
|
einen Sinn ergibt, beispielsweise
|
|
<link linkend="ini.register-argc-argv">register_argc_argv</link>).
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Es wird empfohlen
|
|
<link linkend="ini.ignore-user-abort">ignore_user_abort</link> für
|
|
Kommandozeilenanwendungen zu setzen. Siehe
|
|
<function>ignore_user_abort</function> für weitere Informationen.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Um die Arbeit auf der Kommandozeilenumgebung zu erleichtern, wurden
|
|
einige Konstanten für
|
|
<link linkend="features.commandline.io-streams">Ein- und Ausgabestreams</link>
|
|
definiert.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Die &cli.sapi; wechselt das aktuelle Arbeitsverzeichnis <emphasis
|
|
role="strong">nicht</emphasis> ins Verzeichnis des ausgeführten Skripts.
|
|
</para>
|
|
<example>
|
|
<title>
|
|
Beispiel, welches den Unterschied zur
|
|
<acronym>CGI</acronym>-<acronym>SAPI</acronym> verdeutlicht:
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Unsere einfache Anwendung namens test.php
|
|
echo getcwd(), "\n";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Bei der <acronym>CGI</acronym>-Version ist die Ausgabe folgende:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
$ pwd
|
|
/tmp
|
|
|
|
$ php -q anderes_verzeichnis/test.php
|
|
/tmp/anderes_verzeichnis
|
|
]]>
|
|
</screen>
|
|
<para>
|
|
Dies zeigt deutlich, dass PHP vom aktuellen Verzeichnis in das des
|
|
ausgeführten Skriptes wechselt.
|
|
</para>
|
|
<para>
|
|
Nutzung der &cli.sapi; führt zu folgender Ausgabe:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
$ pwd
|
|
/tmp
|
|
|
|
$ php -f anderes_verzeichnis/test.php
|
|
/tmp
|
|
]]>
|
|
</screen>
|
|
<para>
|
|
Dies ermöglicht eine größere Flexibilität beim Erstellen von
|
|
Kommandozeilenanwendungen in PHP.
|
|
</para>
|
|
</example>
|
|
<note>
|
|
<para>
|
|
Die <acronym>CGI</acronym>-<acronym>SAPI</acronym> unterstützt das
|
|
Verhalten der &cli.sapi; durch Angabe der Option <option>-C</option>
|
|
beim Starten von der Kommandozeile.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<!--Options: {{{-->
|
|
<section xml:id="features.commandline.options">
|
|
<title>Kommandozeilenoptionen</title>
|
|
<titleabbrev>Optionen</titleabbrev>
|
|
<para>
|
|
Die Liste der Kommandozeilenoptionen, die das PHP-Binary bereitstellt, kann
|
|
jederzeit abgerufen werden, indem PHP mit der Option <option>-h</option>
|
|
gestartet wird:
|
|
<screen>
|
|
<![CDATA[
|
|
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>.
|
|
]]>
|
|
</screen>
|
|
</para>
|
|
|
|
<para>
|
|
<table>
|
|
<title>Kommandozeilenoptionen</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Option</entry>
|
|
<entry>Langform</entry>
|
|
<entry>Beschreibung</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>-a</entry>
|
|
<entry>--interactive</entry>
|
|
<entry>
|
|
<para>
|
|
Startet PHP im interaktiven Modus. Für weitere Informationen siehe
|
|
die Dokumentation für den
|
|
<link linkend="features.commandline.interactive">Interaktiven Modus</link>.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-b</entry>
|
|
<entry>--bindpath</entry>
|
|
<entry>
|
|
<para>
|
|
Der Bind-Pfad für den externen FASTCGI-Servermodus (nur
|
|
<acronym>CGI</acronym>).
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-C</entry>
|
|
<entry>--no-chdir</entry>
|
|
<entry>
|
|
<para>
|
|
Nicht in das Verzeichnis des Skripts wechseln (nur
|
|
<acronym>CGI</acronym>).
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-q</entry>
|
|
<entry>--no-header</entry>
|
|
<entry>
|
|
<para>
|
|
Der Quiet-Modus. Unterdrücke die Ausgabe von
|
|
<acronym>HTTP</acronym>-Headern (nur <acronym>CGI</acronym>).
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-T</entry>
|
|
<entry>--timing</entry>
|
|
<entry>
|
|
<para>
|
|
Misst die Ausführungszeit des Skripts. Dies wird
|
|
<varname>count</varname> mal durchgeführt (nur
|
|
<acronym>CGI</acronym>).
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-c</entry>
|
|
<entry>--php-ini</entry>
|
|
<entry>
|
|
<para>
|
|
Mit dieser Option kann man entweder ein Verzichnis angeben, in
|
|
welchem nach der &php.ini; gesucht werden soll, oder man kann eine
|
|
eigene <literal>INI</literal>-Datei angeben (diese muss nicht
|
|
&php.ini; heissen). Zum Beispiel:
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$ php -c /custom/directory/ my_script.php
|
|
|
|
$ php -c /custom/directory/custom-file.ini my_script.php
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
Wenn diese Option nicht angegeben wird, wird die &php.ini;-Datei an
|
|
den <link linkend="configuration.file">vorgegebenen Orten</link>
|
|
gesucht.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-n</entry>
|
|
<entry>--no-php-ini</entry>
|
|
<entry>
|
|
<para>
|
|
&php.ini; komplett ignorieren.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-d</entry>
|
|
<entry>--define</entry>
|
|
<entry>
|
|
<para>
|
|
Diese Option erlaubt es Ihnen, einen eigenen Wert für eine beliebige
|
|
in &php.ini; erlaubte Direktive zu setzen. Die Syntax ist:
|
|
<screen>
|
|
<![CDATA[
|
|
-d configuration_directive[=value]
|
|
]]>
|
|
</screen>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Beispiel für die Verwendung von <literal>-d</literal> zum Setzen einer INI-Direktive</title>
|
|
<screen>
|
|
<![CDATA[
|
|
# 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"
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-e</entry>
|
|
<entry>--profile-info</entry>
|
|
<entry>
|
|
<para>
|
|
Erweiterte Informationen für Debugger/Profiler erstellen.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-f</entry>
|
|
<entry>--file</entry>
|
|
<entry>
|
|
<para>
|
|
Parst die angegebene Datei und führt sie aus. Das <option>-f</option>
|
|
ist optional und kann weggelassen werden. Es genügt, nur den
|
|
Dateinamen anzugeben.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-h und -?</entry>
|
|
<entry>--help und --usage</entry>
|
|
<entry>
|
|
Gibt eine Liste von Kommandozeilenoptionen mit kurzen Beschreibungen
|
|
ihrer Funktion aus.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-i</entry>
|
|
<entry>--info</entry>
|
|
<entry>
|
|
Diese Kommandozeilenoption ruft <function>phpinfo</function> auf und
|
|
gibt das Ergebnis aus. Wenn PHP nicht korrekt funktioniert, ist es
|
|
empfehlenswert, <command>php -i</command> zu verwenden und
|
|
nachzusehen, ob etwa Fehlermeldungen vor oder statt der
|
|
Informationstabellen ausgegeben werden. Beachten Sie, dass die Ausgabe
|
|
bei Verwendung des <acronym>CGI</acronym>-Modus in
|
|
<acronym>HTML</acronym> erfolgt und deswegen ziemlich umfangreich ist.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-l</entry>
|
|
<entry>--syntax-check</entry>
|
|
<entry>
|
|
<para>
|
|
Ü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
|
|
<literal>No syntax errors detected in <filename></literal> auf
|
|
der Standardausgabe ausgegeben.
|
|
Bei einem Fehler wird zusätzlich zum internen Parser-Fehler der Text
|
|
<literal>Errors parsing <filename></literal> auf der
|
|
Standardausgabe ausgegeben.
|
|
Wenn in den angegebenen Dateien (oder der Standardeingabe)
|
|
irgendwelche Fehler gefunden werden, wird der Shell-Rückgabecode auf
|
|
<literal>-1</literal> gesetzt, andernfalls wird er auf
|
|
<literal>0</literal> gesetzt.
|
|
</para>
|
|
<para>
|
|
Diese Option findet keine fatalen Fehler (&zb; undefinierte
|
|
Funktionen), die die Ausführung des Codes erfordern.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Vor PHP 8.3.0 war es nur möglich, den Namen einer Datei anzugeben,
|
|
die überprüft werden sollte.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Diese Option funktioniert nicht zusammen mit der Option
|
|
<option>-r</option>.
|
|
</para>
|
|
</note>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-m</entry>
|
|
<entry>--modules</entry>
|
|
<entry>
|
|
<para>
|
|
<example>
|
|
<title>Ausgabe der geladenen PHP- und Zend-Module</title>
|
|
<screen>
|
|
<![CDATA[
|
|
$ php -m
|
|
[PHP Modules]
|
|
xml
|
|
tokenizer
|
|
standard
|
|
session
|
|
posix
|
|
pcre
|
|
overload
|
|
mysql
|
|
mbstring
|
|
ctype
|
|
|
|
[Zend Modules]
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-r</entry>
|
|
<entry>--run</entry>
|
|
<entry>
|
|
<para>
|
|
Diese Option erlaubt die Ausführung von PHP Code direkt von der
|
|
Kommandozeile. Die PHP-Tags <literal><?php</literal> und
|
|
<literal>?></literal> werden <emphasis role="strong">nicht
|
|
benötigt</emphasis> und verursachen einen Parsefehler, wenn sie
|
|
dennoch vorhanden sind.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<example>
|
|
<title>Syntaxfehler beim Verwenden von doppelten Anführungszeichen</title>
|
|
<screen>
|
|
<![CDATA[
|
|
$ 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
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
<para>
|
|
Das Problem hier ist, dass auch sh/bash Variablen ersetzt, wenn
|
|
doppelte Anführungszeichen (<literal>"</literal>) verwendet werden.
|
|
Weil die Variable <varname>$foo</varname> wahrscheinlich nicht
|
|
definiert ist, wird die Variable zu nichts aufgelöst. Der
|
|
entstehende Code, welcher PHP übergeben wird, sieht so aus:
|
|
</para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$ php -r " = get_defined_constants();"
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
<para>
|
|
Der richtige Weg wäre, einfache Anführungszeichen
|
|
(<literal>'</literal>) zu verwenden. Variablen in einfachen
|
|
Anführungszeichen werden von sh/bash nicht ersetzt.
|
|
</para>
|
|
<example>
|
|
<title>Verwendung einfacher Anführungszeichen, um ein Ersetzen der Variablen durch die Shell zu verhindern</title>
|
|
<screen>
|
|
<![CDATA[
|
|
$ 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"]=>
|
|
[...]
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
<para>
|
|
Wenn eine andere Kommandozeilenumgebung als sh/bash verwendet wird,
|
|
könnten weitere Probleme auftreten. Gegebenenfalls kann unter
|
|
<link xlink:href="&url.php.bugs;">&url.php.bugs;</link> 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!
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
<literal>-r</literal> ist in der &cli.sapi; verfügbar, nicht jedoch
|
|
in der <emphasis>CGI</emphasis>-<acronym>SAPI</acronym>.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Diese Option ist für sehr einfachen Code gedacht, weshalb einige
|
|
Direktiven wie etwa
|
|
<link linkend="ini.auto-prepend-file">auto_prepend_file</link> und
|
|
<link linkend="ini.auto-append-file">auto_append_file</link> in
|
|
diesem Modus ignoriert werden.
|
|
</para>
|
|
</note>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-B</entry>
|
|
<entry>--process-begin</entry>
|
|
<entry>
|
|
<para>
|
|
PHP-Code, der ausgeführt werden soll, bevor stdin ausgewertet wird.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-R</entry>
|
|
<entry>--process-code</entry>
|
|
<entry>
|
|
<para>
|
|
PHP-Code, der für jede Eingabezeile ausgeführt werden soll.
|
|
</para>
|
|
<para>
|
|
Es gibt zwei spezielle Variablen in diesem Modus:
|
|
<varname>$argn</varname> und <varname>$argi</varname>.
|
|
<varname>$argn</varname> enthält die Zeile, die PHP gerade
|
|
verarbeitet und <varname>$argi</varname> enthält die Zeilennummer.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-F</entry>
|
|
<entry>--process-file</entry>
|
|
<entry>
|
|
<para>
|
|
PHP-Datei, die für jede Eingabezeile ausgeführt werden soll.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-E</entry>
|
|
<entry>--process-end</entry>
|
|
<entry>
|
|
<para>
|
|
PHP-Code, der nach der Verarbeitung der Eingabe ausgeführt werden
|
|
soll.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>
|
|
Nutzung der Optionen <option>-B</option>, <option>-R</option> und
|
|
<option>-E</option>, um die Anzahl der Zeilen in einem Projekt zu
|
|
zählen.
|
|
</title>
|
|
<screen>
|
|
<![CDATA[
|
|
$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Zeilen insgesamt: $l\n";'
|
|
Zeilen insgesamt: 37328
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-S</entry>
|
|
<entry>--server</entry>
|
|
<entry>
|
|
<para>
|
|
Startet den
|
|
<link linkend="features.commandline.webserver">eingebauten Webserver</link>.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-t</entry>
|
|
<entry>--docroot</entry>
|
|
<entry>
|
|
Gibt den Document-Root (Wurzelverzeichnis der Dokumente) für den
|
|
<link linkend="features.commandline.webserver">eingebauten Webserver</link>
|
|
an.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-s</entry>
|
|
<entry>--syntax-highlight und --syntax-highlighting</entry>
|
|
<entry>
|
|
<para>
|
|
Den Quelltext mit farblich hervorgehobener Syntax anzeigen.
|
|
</para>
|
|
<para>
|
|
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 <literal><code> [...] </code></literal>
|
|
erzeugt, jedoch keine HTML-Header.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Diese Option funktioniert nicht zusammen mit <option>-r</option>.
|
|
</para>
|
|
</note>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-v</entry>
|
|
<entry>--version</entry>
|
|
<entry>
|
|
<para>
|
|
<example>
|
|
<title>
|
|
Nutzung von <option>-v</option>, um den
|
|
<acronym>SAPI</acronym>-Namen, sowie die PHP- und Zend-Version zu
|
|
ermitteln
|
|
</title>
|
|
<screen>
|
|
<![CDATA[
|
|
$ 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
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-w</entry>
|
|
<entry>--strip</entry>
|
|
<entry>
|
|
<para>
|
|
Den Quelltext ohne Kommentare und Leerzeichen anzeigen.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Diese Option funktioniert nicht zusammen mit <option>-r</option>.
|
|
</para>
|
|
</note>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>-z</entry>
|
|
<entry>--zend-extension</entry>
|
|
<entry>
|
|
<para>
|
|
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 <filename>/etc/ld.so.conf</filename>
|
|
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.
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry></entry>
|
|
<entry>--ini</entry>
|
|
<entry>
|
|
<para>
|
|
Zeigt die Namen der Konfigurationsdateien und die durchsuchten
|
|
Verzeichnisse.
|
|
<example>
|
|
<title><literal>--ini</literal>-Beispiel</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ 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)
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>--rf</entry>
|
|
<entry>--rfunction</entry>
|
|
<entry>
|
|
<para>
|
|
Zeigt Informationen über die angegebene Funktion oder Klassenmethode
|
|
(&zb; Anzahl und Namen der Parameter).
|
|
</para>
|
|
<para>
|
|
Diese Option ist nur verfügbar, wenn PHP mit
|
|
<link linkend="book.reflection">Reflection</link>-Unterstützung
|
|
kompiliert wurde.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Einfache <literal>--rf</literal>-Nutzung</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php --rf var_dump
|
|
Function [ <internal> public function var_dump ] {
|
|
|
|
- Parameters [2] {
|
|
Parameter #0 [ <required> $var ]
|
|
Parameter #1 [ <optional> $... ]
|
|
}
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>--rc</entry>
|
|
<entry>--rclass</entry>
|
|
<entry>
|
|
<para>
|
|
Zeigt Inforationen über die angegebene Klasse (Liste der Konstanten,
|
|
Eigenschaften und Methoden).
|
|
</para>
|
|
<para>
|
|
Diese Option ist nur verfügbar, wenn PHP mit
|
|
<link linkend="book.reflection">Reflection</link>-Unterstützung
|
|
kompiliert wurde.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title><literal>--rc</literal>-Beispiel</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ 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 ] {
|
|
}
|
|
}
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>--re</entry>
|
|
<entry>--rextension</entry>
|
|
<entry>
|
|
<para>
|
|
Zeigt Informationen über die angegebene Erweiterung (Liste der
|
|
&php.ini;-Optionen, definierte Funktionen, Konstanten und Klassen).
|
|
</para>
|
|
<para>
|
|
Diese Option ist nur verfügbar, wenn PHP mit
|
|
<link linkend="book.reflection">Reflection</link>-Unterstützung
|
|
kompiliert wurde.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title><literal>--re</literal>-Beispiel</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php --re json
|
|
Extension [ <persistent> extension #19 json version 1.2.1 ] {
|
|
|
|
- Functions {
|
|
Function [ <internal> function json_encode ] {
|
|
}
|
|
Function [ <internal> function json_decode ] {
|
|
}
|
|
}
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>--rz</entry>
|
|
<entry>--rzendextension</entry>
|
|
<entry>
|
|
<para>
|
|
Zeigt Konfiguration der angegebenen Zend-Erweiterung an (entspricht
|
|
der von <function>phpinfo</function> zurückgegebenen Information).
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>--ri</entry>
|
|
<entry>--rextinfo</entry>
|
|
<entry>
|
|
<para>
|
|
Zeigt die Konfiguration der angegebenen Erweiterung an (entspricht
|
|
der von <function>phpinfo</function> zurückgegebenen Information).
|
|
Die Konfiguration des Sprachkerns kann über den speziellen
|
|
Erweiterungsnamen "main" ermittelt werden.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title><literal>--ri</literal>-Beispiel</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ 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
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Die Optionen <literal>-rBRFEH</literal>, <literal>--ini</literal> und
|
|
<literal>--r[fcezi]</literal> sind nur für &cli; verfügbar.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<!--Usage: {{{-->
|
|
<section xml:id="features.commandline.usage">
|
|
<title>Ausführen von PHP-Dateien</title>
|
|
<titleabbrev>Verwendung</titleabbrev>
|
|
<para>
|
|
Es gibt drei verschiedene Wege, PHP-Code in der &cli.sapi; auszuführen:
|
|
<orderedlist>
|
|
<listitem>
|
|
<para>
|
|
PHP mitteilen, eine bestimmte Datei auszuführen.
|
|
</para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$ php my_script.php
|
|
|
|
$ php -f my_script.php
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
<para>
|
|
Beide Methoden (ob die Option <option>-f</option> verwendet wird oder
|
|
nicht) führen die Datei <filename>my_script.php</filename> aus. Zu
|
|
beachten ist, dass es keine Einschränkungen dafür gibt, welche Dateien
|
|
ausgeführt werden können; beispielsweise muss das PHP-Skript nicht auf
|
|
<literal>.php</literal> enden.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Den auszuführenden PHP-Code direkt auf der Kommandozeile angeben.
|
|
</para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$ php -r 'print_r(get_defined_constants());'
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
<para>
|
|
Es muss besonders Acht gegeben werden auf die Ersetzung von
|
|
Kommandozeilenvariablen und Benutzung von Anführungszeichen.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Achten Sie darauf, dass sie keine PHP-Tags übergeben. Die Option
|
|
<option>-r</option> benötigt diese nicht und löst einen Parser-Fehler
|
|
aus, falls sie dennoch verwendet werden.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Eingabe des PHP-Codes über die Standardeingabe
|
|
(<literal>stdin</literal>).
|
|
</para>
|
|
<para>
|
|
Dies eröffnet die Möglichkeit, PHP-Code dynamisch zu generieren und
|
|
anschließend an das PHP-Binary zu übergeben, wie in diesem
|
|
(ausgedachten) Beispiel dargestellt:
|
|
</para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$ some_application | some_filter | php | sort -u > final_output.txt
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</listitem>
|
|
</orderedlist>
|
|
Die drei Möglichkeiten zur Codeausführung können nicht kombiniert werden.
|
|
</para>
|
|
<para>
|
|
Wie jede Kommandozeilenanwendung nimmt das PHP-Binary etliche Argumente
|
|
entgegen, aber auch das PHP-Skript kann Argumente entgegennehmen. Die
|
|
Anzahl der Argumente, die an ein Skript übergeben werden können, ist nicht
|
|
von PHP beschränkt (und obwohl die Kommandozeilenumgebung ein Limit für die
|
|
Anzahl der Zeichen hat, die übergeben werden können, wird dieses im
|
|
Allgemeinen nicht erreicht werden). Die Argumente, die dem Skript übergeben
|
|
werden, sind in dem globalen Array <varname>$argv</varname> gespeichert.
|
|
Der erste Index (Null) enthält immer den Skriptnamen. Wenn der Code mittels
|
|
der Option <option>-r</option> ausgeführt wurde, ist der Wert von
|
|
<varname>$argv[0]</varname> <literal>"Standard input code"</literal>; vor
|
|
PHP 7.2.0 war es ein Bindestrich (<literal>-</literal>). Selbiges gilt für
|
|
Code, welcher über <constant>STDIN</constant> ausgeführt wird.
|
|
</para>
|
|
<para>
|
|
Die zweite registrierte globale Variable ist <varname>$argc</varname>,
|
|
welche die Anzahl der Elemente im Array <varname>$argv</varname> enthält,
|
|
(<emphasis role="strong">nicht</emphasis> die Anzahl Argumente, die dem
|
|
Skript übergeben wurden).
|
|
</para>
|
|
<para>
|
|
Solange die Argumente, welche dem Skript übergeben werden, nicht mit dem
|
|
Zeichen <literal>-</literal> beginnen, gibt es nichts besonderes zu
|
|
beachten. Ein Argument zu übergeben, welches mit <literal>-</literal>
|
|
beginnt, wird jedoch Probleme bereiten, da PHP denkt, dass es das Argument
|
|
selbst verarbeiten muss, noch bevor das Skript ausgeführt wird. Nutzen Sie
|
|
das Argument-Trennzeichen <literal>--</literal>, um dies zu vermeiden.
|
|
Nachdem dieses Trennzeichen von PHP geparst wurde, wird jedes folgende
|
|
Argument unangetastet an das Skript weitergereicht.
|
|
</para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
# Dies führt nicht den angegebenen Code aus, sondern zeigt die Optionen von PHP an
|
|
$ php -r 'var_dump($argv);' -h
|
|
Usage: php [options] [-f] <file> [args...]
|
|
[...]
|
|
|
|
# Dies übergibt das Argument '-h' an Ihr Skript und zeigt die Optionen von PHP nicht an
|
|
$ php -r 'var_dump($argv);' -- -h
|
|
array(2) {
|
|
[0]=>
|
|
string(1) "-"
|
|
[1]=>
|
|
string(2) "-h"
|
|
}
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
<para>
|
|
Es gibt auf Unix-Systemen jedoch einen weiteren Weg, um PHP für
|
|
Kommandozeilenskripte zu verwenden. Sie können ein Skript erstellen, in dem
|
|
die erste Zeile mit <literal>#!/usr/bin/php</literal> beginnt (oder wie
|
|
auch immer der Pfad zu Ihrer PHP-&cli;-Binärdatei ist). Nachfolgend können
|
|
Sie normalen PHP-Code innerhalb der PHP-Start- und -End-Tags verwenden.
|
|
Sobald Sie die Datei ausführbar gemacht haben (beispielsweise mittels
|
|
<command>chmod +x test</command>), kann Ihr Skript wie ein normales
|
|
Kommandozeilen- oder Perl-Skript gestartet werden.
|
|
</para>
|
|
<example>
|
|
<title>PHP als Shellskript ausführen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
#!/usr/bin/php
|
|
<?php
|
|
var_dump($argv);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Angenommen, die Datei heißt <filename>test</filename> und befindet sich im
|
|
aktuellen Verzeichnis, dann können wir nun folgendes tun:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
$ chmod +x test
|
|
$ ./test -h -- foo
|
|
array(4) {
|
|
[0]=>
|
|
string(6) "./test"
|
|
[1]=>
|
|
string(2) "-h"
|
|
[2]=>
|
|
string(2) "--"
|
|
[3]=>
|
|
string(3) "foo"
|
|
}
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
<para>
|
|
Wie zu sehen ist, muss in diesem Fall keine besondere Rücksicht auf die
|
|
Übergabe von Parametern genommen werden, die mit <literal>-</literal>
|
|
beginnen.
|
|
</para>
|
|
<para>
|
|
Die ausführbare PHP-Datei kann verwendet werden, um PHP-Skripte vollkommen
|
|
unabhängig von einem Webserver auszuführen. Auf Unix-Systemen sollte die
|
|
spezielle erste Zeile <literal>#!</literal> ("Shebang") zu PHP-Skripten
|
|
hinzugefügt werden, damit das System automatisch herausfinden kann, welches
|
|
Programm zur Ausführung der Datei genutzt werden soll. Auf Windows-Systemen
|
|
ist es möglich, <filename>php.exe</filename> mit der Doppelklick-Option der
|
|
Erweiterung <literal>.php</literal> zu verknüpfen. Es kann auch eine
|
|
Batchdatei erstellt werden, um das Skript von PHP ausführen zu lassen. Die
|
|
erste Zeile, die dem Skript hinzugefügt wird, damit es unter UNIX läuft,
|
|
stört unter Windows nicht, so dass auf diese Weise problemlos
|
|
plattformübergreifende Programme geschrieben werden können. Im Folgenden
|
|
wird anhand eines einfachen Beispiels gezeigt, wie ein
|
|
PHP-Kommandozeilenprogramm geschrieben wird.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Ein Skript, das von der Kommandozeile aus ausgeführt werden soll (script.php)</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
#!/usr/bin/php
|
|
<?php
|
|
|
|
if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
|
|
?>
|
|
|
|
Das ist ein Kommandozeilenprogramm in PHP mit einer Option.
|
|
|
|
Verwendung:
|
|
<?php echo $argv[0]; ?> <option>
|
|
|
|
<option> kann ein Wort sein, das Sie gerne
|
|
ausgeben möchten. Mit den Optionen --help,
|
|
-help, -h oder -? bekommen Sie diese Hilfe.
|
|
|
|
<?php
|
|
} else {
|
|
echo $argv[1];
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
In dem oben beschriebenen Skript haben wir die erste Zeile dazu verwendet,
|
|
anzugeben, dass die Datei von PHP ausgeführt werden soll. Wir arbeiten hier
|
|
mit einer &cli;-Version, deswegen werden keine
|
|
<acronym>HTTP</acronym>-Header ausgegeben.
|
|
</para>
|
|
<para>
|
|
In dem obigen Programm wird zuerst überprüft, ob das notwendige Argument
|
|
angeben ist (zusätzlich zum Skriptnamen, welcher auch gezählt wird). Wenn
|
|
nicht, oder wenn das Argument <option>--help</option>,
|
|
<option>-help</option>, <option>-h</option> oder <option>-?</option> war,
|
|
wird eine Hilfe-Nachricht ausgegeben, welche <varname>$argv[0]</varname>
|
|
nutzt, um den auf der Kommandozeile eingegebenen Skript-Namen auszugeben.
|
|
Andernfalls wird das Argument genauso ausgegeben, wie es übergeben wurde.
|
|
</para>
|
|
<para>
|
|
Um das obige Skript unter UNIX auszuführen, muss es zuerst ausführbar
|
|
gemacht werden, und danach einfach als <command>script.php
|
|
GebeDasHierAus</command> oder <command>script.php -h</command> aufgerufen
|
|
werden. Unter Windows kann zu diesem Zweck eine Batchdatei erstellt werden:
|
|
</para>
|
|
|
|
<para>
|
|
<example>
|
|
<title>Batchdatei zur Ausführung eines Kommandozeilen-Skripts in PHP (script.bat)</title>
|
|
<programlisting role="winbat">
|
|
<![CDATA[
|
|
@echo OFF
|
|
"C:\php\php.exe" script.php %*
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Angenommen, das obige Programm wurde <filename>script.php</filename> genannt
|
|
und die &cli; <filename>php.exe</filename> hat den Pfad
|
|
<filename>C:\php\php.exe</filename>, so wird diese Batchdatei es mit allen
|
|
übergebenen Argumenten aufrufen: <command>script.bat
|
|
GebeDasHierAus</command> oder <command>script.bat -h</command>.
|
|
</para>
|
|
<para>
|
|
Siehe auch die <link linkend="ref.readline">Readline</link>-Erweiterung für
|
|
weitere Funktionen, um PHP-Kommandozeilenanwendungen zu verbessern.
|
|
</para>
|
|
<para>
|
|
Unter Windows kann PHP so konfiguiert werden, dass es auch ausgeführt wird,
|
|
wenn weder <filename>C:\php\php.exe</filename> angegeben wird, noch die
|
|
Dateierweiterung <literal>.php</literal> genutzt wird. Siehe dazu die
|
|
Dokumentation zur
|
|
<link linkend="install.windows.commandline">PHP-Kommandozeile unter Microsoft Windows</link>.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Unter Windows wird empfohlen, PHP unter einem echten User-Account
|
|
auszuführen. Wird es unter einem Netzwerk-Account ausgeführt, werden
|
|
bestimmte Operationen fehlschlagen, weil "keine Zuordnung zwischen
|
|
Kontennamen und Sicherheits-IDs erfolgte".
|
|
</para>
|
|
</note>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<!--I/O Streams: {{{-->
|
|
<section xml:id="features.commandline.io-streams">
|
|
<title>Ein- und Ausgabestreams</title>
|
|
<titleabbrev>I/O Streams</titleabbrev>
|
|
<para>
|
|
Die &cli.sapi; definiert einige Konstanten für Ein- und Ausgabestreams, um
|
|
das Erstellen von Kommandozeilenanwendungen zu erleichtern.
|
|
</para>
|
|
<para>
|
|
<table>
|
|
<title>CLI-spezifische Konstanten</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Konstante</entry>
|
|
<entry>Beschreibung</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><constant>STDIN</constant></entry>
|
|
<entry>
|
|
<para>
|
|
Ein schon geöffneter Stream auf <literal>stdin</literal>. Dies
|
|
erspart das Öffnen mit
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$stdin = fopen('php://stdin', 'r');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
Wenn sie einzelne Zeilen von <literal>stdin</literal> lesen wollen,
|
|
können Sie folgendes Code-Fragment verwenden:
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$line = trim(fgets(STDIN)); // liest eine Zeile von STDIN
|
|
fscanf(STDIN, "%d\n", $number); // liest eine Zahl von STDIN
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>STDOUT</constant></entry>
|
|
<entry>
|
|
<para>
|
|
Ein schon geöffneter Stream auf <literal>stdout</literal>. Das
|
|
erspart das Öffnen mit
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$stdout = fopen('php://stdout', 'w');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>STDERR</constant></entry>
|
|
<entry>
|
|
<para>
|
|
Ein schon geöffneter Stream auf <literal>stderr</literal>. Das
|
|
erspart das Öffnen mit
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$stderr = fopen('php://stderr', 'w');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
<para>
|
|
Angesichts des oben Genannten, brauchen Sie beispielsweise nicht selbst
|
|
einen Stream für <literal>stderr</literal> öffnen, sondern können einfach
|
|
die Konstante anstelle der Ressource verwenden:
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php -r 'fwrite(STDERR, "stderr\n");'
|
|
]]>
|
|
</programlisting>
|
|
Sie brauchen diese Streams nicht explizit zu schließen, weil sie
|
|
automatisch von PHP geschlossen werden, wenn Ihr Skript endet.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Diese Konstanten sind nicht verfügbar, wenn ein PHP Skript von
|
|
<literal>stdin</literal> eingelesen wird.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<!--Interactive shell: {{{-->
|
|
<section xml:id="features.commandline.interactive">
|
|
<title>Interaktive Shell</title>
|
|
<para>
|
|
Wenn PHP mit der Option <option role="configure">--with-readline</option>
|
|
kompiliert wurde, bietet die &cli.sapi; mit der Option <option>-a</option>
|
|
eine interaktive Shell an. Von PHP 7.1.0 an steht die interaktive Shell
|
|
auch unter Windows zu Verfügung, wenn die
|
|
<link linkend="book.readline">readline-Erweiterung</link> aktiviert ist.
|
|
</para>
|
|
<para>
|
|
Mittels der interaktiven Shell können Sie PHP-Code eingeben und direkt
|
|
ausführen lassen.
|
|
</para>
|
|
<example>
|
|
<title>Ausführung von Code in der interaktiven Shell</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php -a
|
|
Interactive shell
|
|
|
|
php > echo 5+8;
|
|
13
|
|
php > function addTwo($n)
|
|
php > {
|
|
php { return $n + 2;
|
|
php { }
|
|
php > var_dump(addtwo(2));
|
|
int(4)
|
|
php >
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Die interaktive Shell bietet auch Tabulator-Autovervollständigung für
|
|
Funktionen, Konstanten, Klassen, Variablen, statische Methoden und
|
|
Klassenkonstanten.
|
|
</para>
|
|
<example>
|
|
<title>Tabulator-Autovervollständigung</title>
|
|
<simpara>
|
|
Wenn es mehrere mögliche Vervollständigungen gibt, wird durch zweimaliges
|
|
Drücken der Tabulator-Taste eine Liste dieser Vervollständigungen
|
|
angezeigt:
|
|
</simpara>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php > strp[TAB][TAB]
|
|
strpbrk strpos strptime
|
|
php > strp
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
Wenn es nur eine mögliche Vervollständigung gibt, führt ein einmaliges
|
|
Drücken der Tabulator-Taste zur Vervollständigung der Zeile:
|
|
</simpara>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php > strpt[TAB]ime(
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
Autovervollständigung funktioniert auch für Namen, welche bereits während
|
|
dieser interaktiven Session definiert wurden:
|
|
</simpara>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php > $fooThisIsAReallyLongVariableName = 42;
|
|
php > $foo[TAB]ThisIsAReallyLongVariableName
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<simpara>
|
|
Die interaktive Shell speichert den Verlauf von zuletzt eingegeben Zeilen,
|
|
auf die mittels der Pfeiltasten zugegriffen werden kann. Der Verlauf wird
|
|
in der Datei <filename>~/.php_history</filename> gespeichert.
|
|
Seit PHP 8.4.0 kann der Pfad zur History-Datei mit der Umgebungsvariablen
|
|
<envar>PHP_HISTFILE</envar> festgelegt werden.
|
|
</simpara>
|
|
<para>
|
|
Die &cli.sapi; bietet die &php.ini;-Optionen
|
|
<parameter>cli.pager</parameter> und <parameter>cli.prompt</parameter>. Die
|
|
Option <parameter>cli.pager</parameter> erlaubt einem externen Programm
|
|
(wie etwa <filename>less</filename>) als Pager für die Ausgabe zu agieren,
|
|
anstatt dass diese direkt ausgegeben wird. Die Option
|
|
<parameter>cli.prompt</parameter> erlaubt das Ändern der
|
|
<literal>php ></literal>-Eingabeaufforderung.
|
|
</para>
|
|
<para>
|
|
Es ist auch möglich, die &php.ini;-Optionen in der interaktiven Shell zu
|
|
setzen, indem man eine Kurzschreibweise verwendet.
|
|
</para>
|
|
<example>
|
|
<title>Setzen von &php.ini;-Optionen in der interaktiven Shell</title>
|
|
<simpara>
|
|
Die Option <parameter>cli.prompt</parameter>:
|
|
</simpara>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php > #cli.prompt=hello world :>
|
|
hello world :>
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
Mittels Backticks kann PHP-Code in der Eingabeaufforderung ausgeführt
|
|
werden:
|
|
</simpara>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php > #cli.prompt=`echo date('H:i:s');` php >
|
|
15:49:35 php > echo 'hi';
|
|
hi
|
|
15:49:43 php > sleep(2);
|
|
15:49:45 php >
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
Setzen des Pagers auf <filename>less</filename>:
|
|
</simpara>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
php > #cli.pager=less
|
|
php > phpinfo();
|
|
(output displayed in less)
|
|
php >
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Die Option <parameter>cli.prompt</parameter> unterstützt einige
|
|
Escape-Sequenzen.
|
|
<table>
|
|
<title><parameter>cli.prompt</parameter>-Escape-Sequenzen</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Sequenzen</entry>
|
|
<entry>Beschreibung</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><literal>\e</literal></entry>
|
|
<entry>
|
|
Wird verwendet, um Farben zur Eingabeaufforderung hinzuzufügen. Ein
|
|
Beispiel: <literal>\e[032m\v \e[031m\b \e[34m\> \e[0m</literal>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal>\v</literal></entry>
|
|
<entry>Die PHP-Version.</entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal>\b</literal></entry>
|
|
<entry>
|
|
Gibt an, in welchem Block sich PHP befindet. Zum Beispiel gibt
|
|
<literal>/*</literal> an, dass man sich gerade in einem mehrzeiligen
|
|
Kommentar befindet. Der äußerste Block ist <literal>php</literal>.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal>\></literal></entry>
|
|
<entry>
|
|
Gibt das Eingabeaufforderungszeichen an. Standardmäßig ist dies
|
|
<literal>></literal>, ändert sich jedoch, wenn sich die Shell
|
|
innerhalb eines nicht beendeten Blocks oder Strings befindet. Mögliche
|
|
Zeichen sind: <literal>' " { ( ></literal>
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Dateien, die mit
|
|
<link linkend="ini.auto-prepend-file">auto_prepend_file</link> und
|
|
<link linkend="ini.auto-append-file">auto_append_file</link> eingebunden
|
|
wurden, werden in diesem Modus mit einigen Einschränkungen geparst - &zb;
|
|
müssen Funktionen vor dem Aufruf definiert werden.
|
|
</para>
|
|
</note>
|
|
|
|
<section xml:id="features.commandline.interactive.mode">
|
|
<title>Interaktiver Modus</title>
|
|
<para>
|
|
Wenn die readline-Erweiterung nicht verfügbar ist, wurde vor PHP 8.1.0
|
|
durch den Aufruf von &cli.sapi; mit der Option <option>-a</option> in den
|
|
interaktiven Modus gewechselt. In diesem Modus muss ein komplettes
|
|
PHP-Skript über STDIN übergeben werden, das nach dem Beenden mit
|
|
<keycombo action='simul'>
|
|
<keycap>CTRL</keycap>
|
|
<keycap>D</keycap>
|
|
</keycombo>
|
|
(POSIX) oder
|
|
<keycombo action='simul'>
|
|
<keycap>CTRL</keycap>
|
|
<keycap>Z</keycap>
|
|
</keycombo>
|
|
gefolgt von <literal>ENTER</literal> (Windows) ausgewertet wird.
|
|
Dies ist im Grunde dasselbe wie der Aufruf von &cli.sapi; ohne die Option
|
|
<option>-a</option>.
|
|
</para>
|
|
<para>
|
|
Seit PHP 8.1.0 schlägt der Aufruf von &cli.sapi; mit der Option
|
|
<option>-a</option> fehl, wenn die readline-Erweiterung nicht verfügbar
|
|
ist.
|
|
</para>
|
|
</section>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<!--Built-in CLI Web Server: {{{-->
|
|
<section xml:id="features.commandline.webserver">
|
|
<title>Eingebauter Webserver</title>
|
|
<warning>
|
|
<para>
|
|
Dieser Webserver wurde entwickelt, um bei der Anwendungsentwicklung zu
|
|
helfen. Er kann ebenso für Testzwecke und für Anwendungsdemonstrationen
|
|
nützlich sein, die in kontrollierten Umgebungen ausgeführt werden. Er ist
|
|
nicht als voll funktioneller Webserver gedacht. Er sollte nicht in einem
|
|
öffentlichen Netzwerk verwendet werden.
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
Die &cli.sapi; bietet einen eingebauten Webserver.
|
|
</para>
|
|
<para>
|
|
Der Webserver läuft nur mit einem single-threaded Prozess, sodass
|
|
PHP-Anwendungen nicht weiter ausgeführt werden, wenn eine Anfrage blockiert
|
|
wird.
|
|
</para>
|
|
<para>
|
|
URI-Anfragen werden vom aktuellen Arbeitsverzeichnis ausgehend
|
|
ausgeliefert, sofern nicht die -t Option genutzt wurde um ein explizites
|
|
Document-Root anzugeben. Wenn eine URI-Anfrage keine Datei angibt, wird
|
|
entweder index.php oder index.html aus dem aufgerufenen Verzeichnis
|
|
zurückgegeben. Wenn beide Dateien nicht existieren, wird die Suche von
|
|
index.php und index.html im übergeordneten Verzeichnis fortgesetzt usw.,
|
|
bis eine gefunden wurde, oder das Document-Root erreicht wurde. Wurde eine
|
|
index.php oder index.html gefunden, wird sie zurückgegeben und
|
|
$_SERVER['PATH_INFO'] wird auf den abschließenden Teil des URI gesetzt.
|
|
Andernfalls wird ein 404-Antwortcode zurückgeben.
|
|
</para>
|
|
<para>
|
|
Wenn auf der Kommandozeile beim Starten des Webservers eine PHP-Datei
|
|
angegeben wird, wird diese als "Router"-Skript verwendet. Dieses Skript
|
|
wird dann zu Beginn jeder HTTP-Anfrage gestartet. Wenn dieses Skript
|
|
&false; zurückgibt, dann wird die angefragte Ressource direkt
|
|
zurückgegeben. Andernfalls wird die Ausgabe des Skripts zurückgegeben.
|
|
</para>
|
|
<para>
|
|
Standard-MIME-Typen werden für Dateien mit den folgenden Erweiterungen
|
|
zurückgegeben:
|
|
<simplelist type="inline">
|
|
<member><literal>.3gp</literal></member>
|
|
<member><literal>.apk</literal></member>
|
|
<member><literal>.avi</literal></member>
|
|
<member><literal>.bmp</literal></member>
|
|
<member><literal>.css</literal></member>
|
|
<member><literal>.csv</literal></member>
|
|
<member><literal>.doc</literal></member>
|
|
<member><literal>.docx</literal></member>
|
|
<member><literal>.flac</literal></member>
|
|
<member><literal>.gif</literal></member>
|
|
<member><literal>.gz</literal></member>
|
|
<member><literal>.gzip</literal></member>
|
|
<member><literal>.htm</literal></member>
|
|
<member><literal>.html</literal></member>
|
|
<member><literal>.ics</literal></member>
|
|
<member><literal>.jpe</literal></member>
|
|
<member><literal>.jpeg</literal></member>
|
|
<member><literal>.jpg</literal></member>
|
|
<member><literal>.js</literal></member>
|
|
<member><literal>.kml</literal></member>
|
|
<member><literal>.kmz</literal></member>
|
|
<member><literal>.m4a</literal></member>
|
|
<member><literal>.mov</literal></member>
|
|
<member><literal>.mp3</literal></member>
|
|
<member><literal>.mp4</literal></member>
|
|
<member><literal>.mpeg</literal></member>
|
|
<member><literal>.mpg</literal></member>
|
|
<member><literal>.odp</literal></member>
|
|
<member><literal>.ods</literal></member>
|
|
<member><literal>.odt</literal></member>
|
|
<member><literal>.oga</literal></member>
|
|
<member><literal>.ogg</literal></member>
|
|
<member><literal>.ogv</literal></member>
|
|
<member><literal>.pdf</literal></member>
|
|
<member><literal>.png</literal></member>
|
|
<member><literal>.pps</literal></member>
|
|
<member><literal>.pptx</literal></member>
|
|
<member><literal>.qt</literal></member>
|
|
<member><literal>.svg</literal></member>
|
|
<member><literal>.swf</literal></member>
|
|
<member><literal>.tar</literal></member>
|
|
<member><literal>.text</literal></member>
|
|
<member><literal>.tif</literal></member>
|
|
<member><literal>.txt</literal></member>
|
|
<member><literal>.wav</literal></member>
|
|
<member><literal>.webm</literal></member>
|
|
<member><literal>.wmv</literal></member>
|
|
<member><literal>.xls</literal></member>
|
|
<member><literal>.xlsx</literal></member>
|
|
<member><literal>.xml</literal></member>
|
|
<member><literal>.xsl</literal></member>
|
|
<member><literal>.xsd</literal></member>
|
|
<member><literal>.zip</literal></member>
|
|
</simplelist>
|
|
.
|
|
</para>
|
|
|
|
<simpara>
|
|
Seit PHP 7.4.0 kann der eingebaute Webserver so konfiguriert werden, dass
|
|
mehrere Worker geforkt werden können, um Code zu testen, der mehrere
|
|
gleichzeitige Anfragen erfordert. Dazu muss die Umgebungsvariable
|
|
<envar>PHP_CLI_SERVER_WORKERS</envar> auf die Zahl der gewünschten Worker
|
|
gesetzt werden, bevor der Server gestartet wird.
|
|
</simpara>
|
|
<note>
|
|
<simpara>Dieses Feature wird unter Windows nicht unterstützt.</simpara>
|
|
</note>
|
|
<warning>
|
|
<para>
|
|
Dieses <emphasis>experimentelle</emphasis> Feature ist
|
|
<emphasis>nicht</emphasis> für den Produktionseinsatz vorgesehen.
|
|
Der eingebaute Webserver ist grundsätzlich <emphasis>nicht</emphasis>
|
|
für den Produktionseinsatz vorgesehen.
|
|
</para>
|
|
</warning>
|
|
|
|
<example>
|
|
<title>Starten des Webservers</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ cd ~/public_html
|
|
$ php -S localhost:8000
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Die Kommandozeile wird ausgeben:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
|
|
Listening on localhost:8000
|
|
Document root is /home/me/public_html
|
|
Press Ctrl-C to quit
|
|
]]>
|
|
</screen>
|
|
<para>
|
|
Nach URI-Anfragen für http://localhost:8000/ und
|
|
http://localhost:8000/myscript.html wird die Kommandozeile in etwa so
|
|
aussehen:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
|
|
Listening on localhost:8000
|
|
Document root is /home/me/public_html
|
|
Press Ctrl-C to quit.
|
|
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
|
|
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
|
|
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
|
|
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
|
|
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
|
|
]]>
|
|
</screen>
|
|
<para>
|
|
Es ist zu beachten, dass bis zu PHP 7.4.0 symbolisch verknüpfte statische
|
|
Ressourcen unter Windows nicht erreichbar waren, es sei denn, das
|
|
Router-Skript würde diese verarbeiten.
|
|
</para>
|
|
</example>
|
|
<example>
|
|
<title>Starten mit einer expliziten Document-Root</title>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ cd ~/public_html
|
|
$ php -S localhost:8000 -t foo/
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Die Kommandozeile wird ausgeben:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
|
|
Listening on localhost:8000
|
|
Document root is /home/me/public_html/foo
|
|
Press Ctrl-C to quit
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
<example>
|
|
<title>Nutzung eines Router-Skripts</title>
|
|
<para>
|
|
In diesem Beispiel werden bei Anfragen nach Bildern diese direkt
|
|
angezeigt; bei Anfragen nach HTML-Dateien wird stattdessen "Willkommen in
|
|
PHP!" angezeigt.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// router.php
|
|
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
|
|
return false; // Liefere die angefragte Ressource direkt aus
|
|
} else {
|
|
echo "<p>Willkommen in PHP!</p>";
|
|
}
|
|
?>]]>
|
|
</programlisting>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php -S localhost:8000 router.php
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
<example>
|
|
<title>Prüfung auf die Verwendung des CLI-Webservers</title>
|
|
<para>
|
|
Um ein Framework-Router-Skript sowohl während der Entwicklung mit dem
|
|
CLI-Webserver als auch später mit einem Produktions-Webserver zu
|
|
verwenden:
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// router.php
|
|
if (php_sapi_name() == 'cli-server') {
|
|
/* statische Assets weiterleiten und false zurückgeben */
|
|
}
|
|
/* weiter mit den normalen index.php-Operationen */
|
|
?>]]>
|
|
</programlisting>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php -S localhost:8000 router.php
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
<example>
|
|
<title>Behandlung nicht unterstützter Dateitypen</title>
|
|
<para>
|
|
Wenn Sie statische Ressourcen ausliefern müssen, deren MIME-Typ vom
|
|
CLI-Webserver nicht unterstützt wird, verwenden Sie:
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// router.php
|
|
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
|
|
if ($path["extension"] == "el") {
|
|
header("Content-Type: text/x-script.elisp");
|
|
readfile($_SERVER["SCRIPT_FILENAME"]);
|
|
}
|
|
else {
|
|
return FALSE;
|
|
}
|
|
?>]]>
|
|
</programlisting>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php -S localhost:8000 router.php
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>Zugriff auf den CLI-Webserver von anderen Computern aus</title>
|
|
<para>
|
|
Sie können den Webserver wie folgt auf Port 8000 für jeden zugänglich
|
|
machen:
|
|
</para>
|
|
<programlisting role="shell">
|
|
<![CDATA[
|
|
$ php -S 0.0.0.0:8000
|
|
]]>
|
|
</programlisting>
|
|
<warning>
|
|
<para>
|
|
Der eingebaute Webserver sollte nicht in einem öffentlichen Netzwerk
|
|
verwendet werden.
|
|
</para>
|
|
</warning>
|
|
</example>
|
|
</section>
|
|
<!--}}}-->
|
|
|
|
<section xml:id="features.commandline.ini">
|
|
<title>INI-Einstellungen</title>
|
|
<para>
|
|
<table>
|
|
<title>CLI-SAPI-Konfigurations-Direktiven</title>
|
|
<tgroup cols="4">
|
|
<thead>
|
|
<row>
|
|
<entry>&Name;</entry>
|
|
<entry>&Default;</entry>
|
|
<entry>&Changeable;</entry>
|
|
<entry>&Changelog;</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody xml:id="features.commandline.ini.list">
|
|
<row>
|
|
<entry><link linkend="ini.cli-server.color">cli_server.color</link></entry>
|
|
<entry>"0"</entry>
|
|
<entry><constant>INI_ALL</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
|
|
&ini.descriptions.title;
|
|
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry xml:id="ini.cli-server.color">
|
|
<term>
|
|
<parameter>cli_server.color</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Gibt an, ob der eingebaute Webserver ANSI-Color-Codes für Ausgaben auf
|
|
die Kommandozeile nutzen soll.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</section>
|
|
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=marker fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|