Heim > Artikel > Backend-Entwicklung > Die Entwicklung des PHP-Grundlagen-CLI-Modus erfordert keine detaillierte Einführung in irgendeine Art von Webserver
Bitte geben Sie die Quelle für den Nachdruck an: PHP-Grundlagen: Für die Entwicklung im CLI-Modus ist kein Webserver erforderlich
Für die Entwicklung des PHP-CLI-Modus ist kein Webserver (einschließlich Apache oder MS IIS usw.) erforderlich, sodass die CLI in verschiedenen Situationen ausgeführt werden kann.
Es gibt zwei Möglichkeiten, PHP-CLI-Skripte auszuführen.
Die erste Methode besteht darin, php -f /path/to/yourfile.php zu verwenden. Rufen Sie den PHP-CLI-Interpreter auf und übergeben Sie Parameter an das Skript. Bei dieser Methode muss zunächst der Pfad des PHP-Interpreters festgelegt werden. Bevor die CLI auf der Windows-Plattform ausgeführt wird, muss ein Befehl ähnlich dem Pfad c:php festgelegt werden. Dadurch geht auch die Bedeutung der ersten Zeile des CLI-Skripts verloren Methode wird nicht empfohlen.
Die zweite Methode besteht darin, zuerst chmod+x 178712d6db15c740f07e5d6548f3427e auszuführen (UNIX/Linux-Umgebung), die PHP-Datei auf ausführbare Berechtigungen festzulegen und dann eine Anweisung in der ersten Zeile des CLI-Skripts hinzuzufügen Header (ähnlich wie in #!/usr/bin/php oder dem PHP-CLI-Interpreter-Speicherort) und führen Sie ihn dann direkt in der Befehlszeile aus. Dies ist die von der CLI bevorzugte Methode und wird empfohlen.
Werfen wir einen Blick darauf, wie man PHP-CLI-Skripte schreibt.
1. Schreiben des ersten CLI-Skripts
Erstellen Sie zunächst ein PHP-Skript mit dem Namen myfile.php zum Ausführen der PHP-CLI. Das Skript ist einfach und zeigt nur „Hallo PHP CLI!“ an. Der Skriptcode lautet wie folgt:
#!/usr/local/bin/php –q 7d53d9326c3db17e17ddd740dd15e3de Um die Datei auf ausführbare Berechtigungen zu setzen: $ chmod 755 myfile.php Geben Sie dann den folgenden Befehl direkt ein und drücken Sie die Eingabetaste, um ihn auszuführen: $ ./myfile.php Wenn Sie das Skript unter einem Windows-System ausführen möchten, müssen Sie es nicht festlegen In den Dateieigenschaften können Sie das Skript direkt ausführen. Microsoft Windows [Version 6.0.6000] Copyright (C) 2006 Microsoft Corporation. Alle Rechte vorbehalten. C: >myfile.php Hallo PHP CLI!
Lassen Sie mich noch einmal wiederholen: Wenn Sie eine Windows-Plattform verwenden, muss die erste Zeile des CLI-Skripts den korrekten Speicherort von php.exe schreiben, etwa so (außerdem müssen Sie schreiben, wenn Sie dem CLI-Skript eine Kommentaranweisung hinzufügen möchten der Kommentar im PHP-Tag, da die CLI-Interpretation nur die erste Zeile erkennt und es als Syntaxfehler gilt, wenn er nicht im PHP-Tag steht):
#!C:phpphp.exe -q
Auf diese Weise können Sie sehen, dass die Informationen in der Befehlszeile ausgegeben wurden, was beweist, dass das CLI-Skript erfolgreich ausgeführt wurde.
2. Parameter aus der Befehlszeile lesen
Wenn Sie Parameter über die Befehlszeile abrufen möchten, kann die CLI die Anzahl und den Wert der Parameter von $_SERVER['argc'] und $_SERVER['argv''] abrufen. Erstellen wir eine weitere Datei mit dem Namen testargs.php. Der Skriptcode lautet wie folgt:
#!C:phpphp.exe –q 775f00926c9f5e357816dd6707123c1fGeben Sie den folgenden Code in die Befehlszeile ein: C:UsersJohn>testargs .php Always To Be Best-Testerfassungsparameter: 4AlwaysToBeBest
Da wir die Wortfolge „Always To Be Best“ eingegeben haben, sind die Skriptparameter durch Leerzeichen getrennt. Daher zählt PHP ihn als 4 Parameter, was im Folgenden erläutert wird.
Das Array $_SERVER["argc"] gibt eine Ganzzahl zurück, die die Gesamtzahl der Parameter darstellt, die nach dem Drücken der Eingabetaste in der Befehlszeile eingegeben wurden.
Wie aus den Ergebnissen des obigen Beispiels hervorgeht, müssen Sie für den Zugriff auf den übergebenen Parameterwert bei Index 1 beginnen. Denn die Datei des Skripts selbst belegt bereits Index 0, also $_SERVER["argv"][0].
3. Behandeln Sie I/O-Kanäle
PHP wurde ursprünglich nicht für die Verwendung mit direkter Tastatureingabe oder Textausgabe durch den Benutzer entwickelt. Das Verständnis dieses Designs ist von entscheidender Bedeutung, denn wenn Sie eine Aktion über die Befehlszeile ausführen müssen, müssen Sie in der Lage sein, mit dem Benutzer hin und her zu kommunizieren.
Die Idee der Eingabe- und Ausgabekanäle (I/O) stammt aus dem UNIX-System, das drei Dateihandles zum Senden und Empfangen von Daten von einer Anwendung und einem Benutzerterminal bereitstellt.
Wir können die Ausgabe eines Skripts in eine Datei umleiten:
php world.php > outputfile
Wenn Sie unter einem UNIX-System arbeiten, können Sie es auch über einen Kanal an einen anderen Befehl oder eine andere Anwendung weiterleiten. Zum Beispiel:
php world.php |. sort.
In PHP 5 CLI gibt es ein Dateistream-Handle, das drei Systemkonstanten verwenden kann, nämlich STDIN, STDOUT und STDERR. Im Folgenden stellen wir sie separat vor.
(1) STDIN
STDIN steht für Standardeingang oder Standardeingabe, mit der beliebige Daten vom Terminal abgerufen werden können.
Format: stdin (’php://stdin’)
Im folgenden Beispiel wird die Benutzereingabe angezeigt:
#!/usr/local/bin/php -q<?php $file = file_get_contents("php://stdin", "r");echo $file;?>
Dieser Code funktioniert ähnlich wie der Befehl cat und rotiert alle ihm bereitgestellten Eingaben. Derzeit können jedoch keine Parameter empfangen werden.
STDIN ist das Standardeingabegerät von PHP. Mit ihm können CLI-PHP-Skripte mehr. Zum Beispiel:
#!/usr/local/bin/php -q a8a3a77c20e1bd650b613328339f4e47Nachdem das Skript ausgeführt wurde, wird Folgendes angezeigt: Hallo! Du Wie lautet Ihr Name (bitte eingeben): Nach der Eingabe von Raymond wird beispielsweise angezeigt: Willkommen Raymond
(2) STDOUT
STDOUT wird als Standardausgabe oder Standardausgabe bezeichnet und kann direkt auf dem Bildschirm ausgegeben werden (sie kann auch an andere Programme ausgegeben und über STDIN abgerufen werden). Im PHP-CLI-Modus werden die Daten an STDOUT gesendet.
Format: stdout (’php://stdout’)
Wir können auch PHP-Funktionen für die Datenflussausgabe verwenden. Wie im folgenden Beispiel:
#!/usr/local/bin/php –q<?php $STDOUT = fopen('php://stdout', 'w');fwrite($STDOUT,"Hello World"); fclose($STDOUT);?>
Das Ausgabeergebnis lautet wie folgt: Hello World Die Befehle echo und print drucken beispielsweise auf der Standardausgabe.
#!/usr/local/bin/php –qOutput #1.<?phpecho "Output #2.";print "Output #3." ?>这将得到:Output #1.Output #2.Output #3.
Erklärung: Neue Zeilen außerhalb des PHP-Tags wurden ausgegeben, aber im Echo-Befehl oder Print-Befehl wird kein Zeilenumbruch angezeigt. Tatsächlich erscheint die Eingabeaufforderung wieder in derselben Zeile wie Ausgabe Nr. 2. Ausgabe Nr. 3. Jede andere Druckfunktion von PHP funktioniert genauso wie diese Funktion, ebenso wie jede Funktion, die in eine Datei zurückschreibt.
#!/usr/local/bin/php -q <?php$STDOUT = fopen("php://stdout", "w"); fwrite($STDOUT, "Output #1."); fclose($STDOUT);?>
Der obige Code öffnet explizit php://stdout als Ausgabekanal, und php://output funktioniert normalerweise auf die gleiche Weise wie php://stdout.
(3)STDERR
STDERR全称为standard error,在默认情况下会直接发送至用户终端,当使用STDIN文件句柄从其他应用程序没有读取到数据时会生成一个“stdin.stderr”。
格式:stderr (’php://stderr’)
下面的脚本表示如何把一行文本输出到错误流中。
#!/usr/local/bin/php –q<?php $STDERR = fopen('php://stderr', 'w'); fwrite($STDERR,"There was an Error"); fclose($STDERR);?>
PHP 5.2可以直接使用STDOUT作为常量,而不是定义上面使用的变量$STDOUT,为了兼容之前版本,我们仍使用了自定义变量,如果您使用的是PHP 5.2,则可以参考STDIN的第二个例子。
4.后台运行CLI
如果正在运行一个进程,而且在退出账户时该进程还不会结束,即在系统后台或背景下运行,那么就可以使用nohup命令。该命令可以在退出账户之后继续运行相应的进程。
nohup在英文中就是不挂起的意思(no hang up)。该命令的一般形式为:
nohup –f scriptname.php &
使用nohup命令提交作业,在默认情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。
nohup scriptname.php > log.txt &
这样,PHP CLI脚本执行后的结果将输出到log.txt中,我们可以使用tail命令查看该内容:
tail -n50 -f log.txt
现在再来实现两个例子,第一个是每隔10分钟自动生成一个静态HTML文件,并一直执行下去。脚本代码如下:
#! /usr/local/bin/php <?phpset_time_limit(0); while(true){@fopen("/usr/local/www/data-dist/content/ article_".time().".html","w"); sleep(600);}?>
保存并且退出vi编辑器,然后赋予genHTML.php文件可执行权限:
#>chmod 755 genHTML.php 然后让脚本在后台执行,执行如下命令:$nohup genHTML.php –f &执行上述命令后出现如下提示:[1] 16623
按回车键后将出现shell提示符。上面的提示就是说,所有命令执行的输出信息都会放到nohup.out文件中。
执行上面命令后,每隔10分钟就会在指定的目录生成指定的HTML文件,如article_111990120.html等文件。
如何终止CLI程序的后台运行呢?
可以使用kill命令来终止这个进程,终止进程之前要知道进程的PID号,即进程ID,我们使用ps命令:
www# ps PID TT STAT TIME COMMAND 561 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0 562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1 563 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2 564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3 565 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4 566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5 567 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6 568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7 16180 p0 I 0:00.01 su 16181 p0 S 0:00.06 _su (csh) 16695 p0 R+ 0:00.00 ps 16623 p0 S 0:00.06 /usr/local/bin/php /usr/local/www/data/genHTML.php 已经看到PHP的进程ID是:16623, 于是再执行kill命令:$ kill -9 16623 [1]+ Killed nohup /usr/local/www/data/genHTML.php
这时该命令的进程就已经被终止了,再使用ps命令:$ ps PID TT STAT TIME COMMAND 82374 p3 Ss 0:00.17 -bash (bash) 82535 p3 R+ 0:00.00 ps
刚才的PHP CLI脚本已经没有了,如果直接运行ps命令无法看到进程,那么就结合使用ps & apos两个命令来查看。
注意:上面例子必须运行在UNIX或者Linux系统中,如FreeBSD、Redhat Linux等,在Windows环境不支持nohup命令。
以上就是PHP基础 CLI模式开发不需要任何一种Web服务器的详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!