Detaillierte Erklärung der PHP-Befehlszeilenausführung

小云云
Freigeben: 2023-03-21 07:44:01
Original
4631 Leute haben es durchsucht

Im Folgenden sind die Parameter der Befehlszeilenmodusoptionen aufgeführt, die von der PHP-Binärdatei (d. h. dem Programm php.exe) bereitgestellt werden. Sie können diese Parameter jederzeit über den Befehl PHP -h abfragen.

<span style="font-size: 14px;">Usage: php [options] [-f] <file> [args...]<br>       php [options] -r <code> [args...]<br>       php [options] [-- args...]<br>  -s               Display colour syntax highlighted source.<br>  -w               Display source with stripped comments and whitespace.<br>  -f <file>        Parse <file>.<br>  -v               Version number<br>  -c <path>|<file> Look for php.ini file in this directory<br>  -a               Run interactively<br>  -d foo[=bar]     Define INI entry foo with value 'bar'<br>  -e               Generate extended information for debugger/profiler<br>  -z <file>        Load Zend extension <file>.<br>  -l               Syntax check only (lint)<br>  -m               Show compiled in modules<br>  -i               PHP information<br>  -r <code>        Run PHP <code> without using script tags <?..?><br>  -h               This help<br> <br>  args...          Arguments passed to script. Use -- args when first argument <br>                   starts with - or script is read from stdin<br></span>
Nach dem Login kopieren

Das CLI-SAPI-Modul bietet die folgenden drei verschiedenen Möglichkeiten, den PHP-Code abzurufen, den Sie ausführen möchten:

In einem Windows Versuchen Sie in der Umgebung, doppelte Anführungszeichen zu verwenden, und versuchen Sie in der Linux-Umgebung, einfache Anführungszeichen zum Vervollständigen zu verwenden.

  1. Lassen Sie PHP die angegebene Datei ausführen.

    <span style="font-size: 14px;">php my_script.php <br/>php -f  "my_script.php"<br/></span>
    Nach dem Login kopieren

    Beide der oben genannten Methoden (mit oder ohne den Parameter -f) können die angegebene Datei my_script.php ausführen. Sie können eine beliebige Datei zum Ausführen auswählen. Die von Ihnen angegebenen PHP-Skripte müssen keine .php-Erweiterung haben. Sie können einen beliebigen Dateinamen und eine beliebige Erweiterung haben.

  2. Führen Sie PHP-Code direkt über die Befehlszeile aus.

    <span style="font-size: 14px;">php -r "print_r(get_defined_constants());"<br/></span>
    Nach dem Login kopieren

    Achten Sie bei der Verwendung dieser Methode bitte auf die Ersetzung von Shell-Variablen und die Verwendung von Anführungszeichen.

    Hinweis: Bitte lesen Sie das obige Beispiel sorgfältig durch. Beim Ausführen des Codes gibt es keine Start- und Endmarkierungen! Mit dem Parameter -r sind diese Markierungen unnötig und führen zu Syntaxfehlern.

  3. Stellt den PHP-Code bereit, der über die Standardeingabe (stdin) ausgeführt werden muss.

    Die obige Verwendung stellt uns sehr leistungsstarke Funktionen zur Verfügung, die es uns ermöglichen, PHP-Code dynamisch zu generieren und diese Codes über die Befehlszeile auszuführen, wie im folgenden Beispiel gezeigt:

    $ some_application | some_filter | php | sort -u >final_output.txt
    Nach dem Login kopieren

Die oben genannten drei Methoden zum Ausführen von Code können nicht gleichzeitig verwendet werden.

Wie alle Shell-Anwendungen können die PHP-Binärdatei (php.exe-Datei) und das von ihr ausgeführte PHP-Skript eine Reihe von Parametern akzeptieren. PHP hat keine Begrenzung hinsichtlich der Anzahl der Argumente, die an ein Skript übergeben werden (die Shell hat eine Begrenzung hinsichtlich der Anzahl der Zeichen in der Befehlszeile, aber normalerweise werden Sie diese Begrenzung nicht überschreiten). Die an Ihr Skript übergebenen Argumente sind in der globalen Variablen $argv verfügbar. Das nullindizierte Mitglied dieses Arrays ist der Name des Skripts (wenn der PHP-Code von der Standardeingabe stammt und direkt über die Befehlszeile mit dem Parameter -r ausgeführt wird, lautet der Name „-“). Darüber hinaus speichert die globale Variable $argc die Anzahl der Mitgliedsvariablen im $argv-Array (nicht die Anzahl der an das Skriptprogramm übergebenen Parameter).

Solange die Parameter, die Sie an Ihr Skript übergeben, nicht mit einem --Symbol beginnen, müssen Sie auf nichts allzu viel achten. Die Übergabe von Parametern, die mit - beginnen, an Ihr Skript führt zu einem Fehler, da PHP davon ausgeht, dass es diese Parameter selbst verarbeiten sollte. Sie können das Parameterlistentrennzeichen verwenden, um dieses Problem zu lösen. Nachdem PHP die Parameter analysiert hat, werden alle Parameter nach diesem Symbol unverändert an Ihr Skript übergeben.

<span style="font-size: 14px;"># 以下命令将不会运行 PHP 代码,而只显示 PHP 命令行模式的使用说明:<br/>$ php -r &#39;var_dump($argv);&#39; -h<br/>Usage: php [options] [-f] <file> [args...]<br/>[...]<br/> <br/># 以下命令将会把“-h”参数传送给脚本程序,PHP 不会显示命令行模式的使用说明:<br/>$ php -r "var_dump($argv);" -- -h<br/>array(2) {<br/>  [0]=><br/>  string(1) "-"<br/>  [1]=><br/>  string(2) "-h"<br/>}<br/></span>
Nach dem Login kopieren

除此之外,我们还有另一个方法将 PHP 用于外壳脚本。您可以在写一个脚本,并在第一行以 #!/usr/bin/php 开头,在其后加上以 PHP 开始和结尾标记符包含的正常的 PHP 代码,然后为该文件设置正确的运行属性。该方法可以使得该文件能够像外壳脚本或 PERL 脚本一样被直接执行。

#!/usr/bin/php<br/>
<br/>
Nach dem Login kopieren
Nach dem Login kopieren
rgv);<br/>?>

假设改文件名为 test 并被放置在当前目录下,我们可以做如下操作:

$ chmod 755 test<br/>$ ./test -h -- foo<br/>array(4) {<br/>  [0]=><br/>  string(6) "./test"<br/>  [1]=><br/>  string(2) "-h"<br/>  [2]=><br/>  string(2) "--"<br/>  [3]=><br/>  string(3) "foo"<br/>}<br/>
Nach dem Login kopieren

Wie Sie sehen, wird das Skript weiterhin normal ausgeführt, wenn Sie Parameter, die mit - beginnen, an das Skript übergeben.

Tabelle 23-3. Befehlszeilenoptionen

OptionsnameBeschreibung
-s

Quelldateien mit Syntaxhervorhebung anzeigen.

Dieser Parameter verwendet den integrierten Mechanismus, um die Datei zu analysieren, eine HTML-hervorgehobene Version davon zu generieren und das Ergebnis in die Standardausgabe zu schreiben. Bitte beachten Sie, dass dieser Vorgang lediglich einen HTML-Tag-Block von generiert und keine HTML-Header enthält.

Hinweis: Diese Option kann nicht zusammen mit dem Parameter -r verwendet werden.

-w

zeigt den Quellcode mit entfernten Kommentaren und Leerzeichen an.

Hinweis: Diese Option kann nicht zusammen mit dem Parameter -r verwendet werden.

-f

Parse den angegebenen Dateinamen und führe ihn aus. Dieser Parameter ist optional und kann weggelassen werden. Es muss lediglich der Name der Datei angegeben werden, die ausgeführt werden soll.

-v

Schreiben Sie die Versionsinformationen von PHP, PHP SAPI und Zend Standard Ausgabe. Zum Beispiel:

$ php -v PHP 4.3.0-dev (cli), Copyright (c) 1997-2002 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
-c

Mit diesem Parameter können Sie ein Verzeichnis angeben, in dem die php.ini-Datei abgelegt wird, oder direkt eine benutzerdefinierte INI-Datei angeben, deren Dateiname nicht php.ini sein muss. Zum Beispiel:

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

PHP interaktiv ausführen.

-d

Verwenden Sie diesen Parameter, um ihn selbst in der php.ini festzulegen Datei Der Wert der Variablen, ihre Syntax lautet:

-d Konfigurationsrichtlinie[=Wert]

Beispiel:

# Durch Weglassen des Wertteils wird die angegebene Konfigurationsanweisung auf „1“ gesetzt. $ php -d max_execution_time -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(1) „1“ # Durch die Übergabe eines leeren Wertteils wird die Konfigurationsanweisung auf „“ gesetzt. php -d max_execution_time= -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(0) „“ # Die Konfigurationsanweisung wird auf alles gesetzt, was nach dem Zeichen „=“ übergeben wird $ php -d max_execution_time=20 -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(2) „20“ $ php -d max_execution_time=macht keinen Sinn -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(15) „doesntmakesense“
-e

Generieren Sie erweiterte Informationen für Debugger usw.

-z

Zend-Erweiterungsbibliothek laden. Wenn nur ein Dateiname angegeben wird, versucht PHP, die Erweiterungsbibliothek aus dem Standardpfad der Erweiterungsbibliothek Ihres Systems zu laden (auf Linux-Systemen wird dieser Pfad normalerweise durch /etc/ld.so.conf angegeben). Wenn Sie einen Dateinamen mit einem absoluten Pfad angeben, wird der Standardpfad des Systems zur Erweiterungsbibliothek nicht verwendet. Wenn Sie einen Dateinamen mit einem relativen Pfad angeben, versucht PHP nur, die Erweiterung relativ zum aktuellen Verzeichnis zu laden.

-l

Dieser Parameter bietet eine praktische Syntaxprüfung für den angegebenen PHP-Code . Bei Erfolg wird die Zeichenfolge „Keine Syntaxfehler in erkannt“ in die Standardausgabe geschrieben und die Shell gibt den Wert 0 zurück. Wenn dies fehlschlägt, werden Fehler beim Parsen von zusammen mit internen Parser-Fehlermeldungen in die Standardausgabe geschrieben und der Shell-Rückgabewert wird auf 255 gesetzt.

Dieser Parameter kann nicht auf schwerwiegende Fehler prüfen (z. B. undefinierte Funktionen). Wenn Sie schwerwiegende Fehler erkennen möchten, verwenden Sie bitte den Parameter -f.

Hinweis: Dieser Parameter kann nicht zusammen mit -r verwendet werden.

-m

Mit diesem Parameter druckt PHP die aus Eingebaut Und die geladenen PHP- und Zend-Module:

$ php -m [PHP-Module] xml Tokenizer Standard Sitzung Posix pcre Überlast MySQL mbstring ctype [Zend Modules]
-iDieser Befehlszeilenparameter ruft die Funktion phpinfo() auf und druckt sie aus Ergebnis. Wenn PHP nicht ordnungsgemäß funktioniert, empfehlen wir Ihnen, PHP auszuführen -i Befehl, um zu sehen, ob vor der Informationstabelle oder an der entsprechenden Stelle eine Fehlermeldung ausgegeben wird. Bitte beachten Sie, dass der Ausgabeinhalt im HTML-Format vorliegt und daher die Ausgabeinformationen größer sind.
-r

Verwenden Sie diesen Parameter, um PHP-Code in der Befehlszeile auszuführen. Sie müssen die PHP-Start- und Endkennungen () nicht hinzufügen, da es sonst zu Fehlern bei der Syntaxanalyse kommt.

注: 使用这种形式的 PHP 时,应个别注意避免和外壳环境进行的命令行参数替换相冲突。

显示语法解析错误的范例

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

这里的问题在于即时使用了双引号 ",sh/bash 仍然实行了参数替换。由于 $foo 没有被定义,被替换后它所在的位置变成了空字符,因此在运行时,实际被 PHP 读取的代码为:

$ php -r " = get_defined_constants();"

正确的方法是使用单引号 '。在用单引号引用的字符串中,变量不会被 sh/bash 还原成其原值。

$ php -r '$foo = get_defi
<br/>
Nach dem Login kopieren
Nach dem Login kopieren
ned_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"]=>  [...]

如果您使用的外壳不是 sh/bash,您可能会碰到其它的问题。请报告您碰到的 bug,或者发邮件到 phpdoc@lists.php.net。

当您试图将外壳的环境变量引入到马或者用反斜线来转义字符时也可能碰到各种各样的问题,请您在使用时注意!

注: -r 在 CLI SAPI 中有效,在 CGI SAPI 中无效。

-h 使用该参数,您可以得到完整的命令行参数的列表及这些参数作用的简单描述。


PHP 的命令行模式能使得 PHP 脚本能完全独立于 WEB 服务器单独运行。如果您使用 Unix 系统,您需要在您的 PHP 脚本的最前面加上一行特殊的代码,使得它能够被执行,这样系统就能知道用什么样的程序要运行该脚本。在 Windows 平台下您可以将 php.exe 和 .php 文件的双击属性相关联,您也可以编写一个批处理文件来用 PHP 执行脚本。为 Unix 系统增加的第一行代码不会影响该脚本在 Windows 下的运行,因此您也可以用该方法编写跨平台的脚本程序。以下是一个简单的PHP 命令行程序的范例。

例子 23-1. 试图以命令行方式运行的 PHP 脚本(script.php)

#!/usr/bin/phpThis is a command line PHP script with one option.  Usage:   

Im obigen Skript verwenden wir die erste spezielle Codezeile, um anzugeben, dass die Datei von PHP ausgeführt werden soll. Wir verwenden hier die CLI-Version, daher werden keine HTTP-Header ausgegeben. Wenn Sie Befehlszeilenanwendungen in PHP schreiben, können Sie zwei Parameter verwenden: $argc und $argv. Der Wert des vorherigen ist eine ganze Zahl, die um eins größer ist als die Anzahl der Parameter (der Name des ausgeführten Skripts wird ebenfalls als Parameter betrachtet). Das zweite enthält ein Array von Parametern, dessen erstes Element der Name des Skripts ist und dessen Index die Zahl 0 ($argv[0]) ist.

Im obigen Programm prüfen wir, ob die Anzahl der Parameter größer als 1 oder kleiner als 1 ist. Selbst wenn der Parameter --help, -help, -h oder -? ist, drucken wir dennoch die Hilfeinformationen aus und geben gleichzeitig dynamisch den Namen des Skripts aus. Wenn weitere Parameter empfangen werden, zeigen wir diese ebenfalls an.

Wenn Sie das obige Skript unter Unix ausführen möchten, müssen Sie es ausführbar machen und dann einfach script.php echothis oder script.php -h ausführen. Unter Windows können Sie hierfür eine Batchdatei schreiben:

Verwandte Empfehlungen:

Auf Befehlszeile mit Parametern A ausführen Methode zum Ausführen eines PHP-Skripts mit Parametern und zum Abrufen von Parametern basierend auf der Befehlszeile, PHP-Skript_PHP-Tutorial

Befehlszeilenausführung in PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der PHP-Befehlszeilenausführung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage