Veuillez indiquer la source de la réimpression : PHP Basics : le développement en mode CLI ne nécessite aucun type de serveur Web
Le développement en mode PHP CLI ne nécessite aucun type de serveur Web (y compris Apache ou MS IIS, etc.), donc CLI peut s'exécuter dans diverses situations.
Il existe deux façons d’exécuter des scripts PHP CLI.
La première méthode consiste à utiliser php -f /path/to/yourfile.php. Appelez l'interpréteur PHP CLI et transmettez les paramètres au script. Cette méthode nécessite d'abord de définir le chemin de l'interpréteur php. Avant d'exécuter la CLI sur la plateforme Windows, une commande similaire au chemin c:php doit être définie. Cela perd également le sens de la première ligne du script CLI, donc ceci. la méthode n’est pas recommandée.
La deuxième méthode consiste à exécuter d'abord chmod #! /usr/bin/php ou l'interpréteur PHP CLI), puis à l'exécuter directement sur la ligne de commande. Il s’agit de la méthode préférée de la CLI et elle est recommandée.
Voyons comment écrire des scripts PHP CLI.
1. Écrire le premier script CLI
Créez d'abord un script PHP nommé myfile.php pour exécuter la CLI PHP. Le script est simple et affiche simplement « Bonjour PHP CLI ! » Le code du script est le suivant :
#!/usr/local/bin/php –q pour donner les autorisations Définir le fichier en exécutable : $ chmod 755 monfichier.php Entrez ensuite directement la commande suivante et appuyez sur Entrée pour exécuter : $ ./monfichier.php Si vous souhaitez exécuter le script sous le système Windows, vous n'avez pas besoin de définir le fichier Propriétés, vous pouvez exécuter le script directement. Microsoft Windows [Version 6.0.6000] Copyright (C) 2006 Microsoft Corporation. Tous droits réservés. C: >monfichier.php Bonjour PHP CLI !
Permettez-moi de répéter : si vous êtes sur la plate-forme Windows, la première ligne du script CLI doit écrire l'emplacement correct de php.exe, comme ceci (de plus, si vous souhaitez ajouter une instruction de commentaire au script CLI, vous devez écrire le commentaire dans la balise PHP, car l'interprétation CLI ne reconnaît que la première ligne, et elle est considérée comme une erreur de syntaxe si elle n'est pas dans la balise PHP) :
#!C:phpphp.exe -q
De cette façon, vous pouvez voir que les informations ont été imprimées sur la ligne de commande, prouvant que le script CLI a été exécuté avec succès.
2. Lire les paramètres depuis la ligne de commande
Si vous souhaitez obtenir des paramètres à partir de la ligne de commande, la CLI peut obtenir le nombre et la valeur des paramètres à partir de $_SERVER['argc'] et $_SERVER['argv'']. Créons un autre fichier nommé testargs.php. Le code du script est le suivant :
. #!C:phpphp.exe –q Entrez le code suivant sur la ligne de commande : C:UsersJohn>testargs Paramètres d'acquisition du test .php Always To Be Best : 4AlwaysToBeBest
Comme nous avons saisi une chaîne de mots « Always To Be Best », les paramètres du script sont séparés par des espaces. Par conséquent, PHP le compte comme 4 paramètres, ce qui est expliqué ci-dessous.
Le tableau $_SERVER["argc"] renvoie un nombre entier, représentant le nombre total de paramètres saisis après avoir appuyé sur Entrée sur la ligne de commande.
Comme le montrent les résultats de l'exemple ci-dessus, pour accéder à la valeur du paramètre qui a été transmise, vous devez partir de l'index 1. Parce que le fichier du script lui-même occupe déjà l'index 0, qui est $_SERVER["argv"][0].
3. Gérer les canaux d'E/S
PHP n'a pas été conçu à l'origine pour être utilisé avec une saisie directe au clavier ou une sortie de texte de l'utilisateur. Comprendre cette conception est crucial car si vous devez effectuer une action sur la ligne de commande, vous devez être capable de communiquer avec l'utilisateur.
L'idée des canaux d'entrée et de sortie (E/S) vient du système UNIX, qui fournit trois descripteurs de fichiers pour envoyer et recevoir des données depuis une application et un terminal utilisateur.
On peut rediriger la sortie d'un script vers un fichier :
php world.php > outputfile
Si vous êtes sous un système UNIX, vous pouvez également utiliser un canal pour le diriger vers une autre commande ou application. Par exemple :
php world.php | trier.
Dans PHP 5 CLI, il existe un handle de flux de fichiers qui peut utiliser 3 constantes système, à savoir STDIN, STDOUT et STDERR. Ci-dessous, nous les présentons séparément.
(1) STDIN
STDIN signifie entrée standard ou entrée standard. L'entrée standard peut obtenir toutes les données du terminal.
Format : stdin (’php://stdin’)
L'exemple suivant affiche la saisie de l'utilisateur :
#!/usr/local/bin/php -q<?php $file = file_get_contents("php://stdin", "r");echo $file;?>
Ce code fonctionne un peu comme la commande cat, en faisant pivoter toutes les entrées qui lui sont fournies. Cependant, il ne peut pas recevoir de paramètres pour le moment.
STDIN est le périphérique d'entrée standard de PHP. En l'utilisant, les scripts CLI PHP peuvent faire plus. Par exemple :
#!/usr/local/bin/php -q Une fois le script exécuté, il affichera : Bonjour ! Vous Quel est votre nom (veuillez saisir) : Par exemple, après avoir saisi Raymond, il s'affichera : Bienvenue Raymond
(2) STDOUT
STDOUT est appelé sortie standard ou sortie standard. La sortie standard peut être affichée directement à l'écran (elle peut également être envoyée à d'autres programmes et obtenue à l'aide de STDIN si vous utilisez des instructions d'impression ou d'écho). en mode PHP CLI, les données seront envoyées à STDOUT.
Format : sortie standard ('php://stdout')
Nous pouvons également utiliser des fonctions PHP pour la sortie des flux de données. Comme dans l'exemple suivant :
#!/usr/local/bin/php –q<?php $STDOUT = fopen('php://stdout', 'w');fwrite($STDOUT,"Hello World"); fclose($STDOUT);?>
Le résultat de sortie est le suivant : Hello World Par exemple, les commandes echo et print s'impriment sur la sortie standard.
#!/usr/local/bin/php –qOutput #1.<?phpecho "Output #2.";print "Output #3." ?>这将得到:Output #1.Output #2.Output #3.
Explication : De nouvelles lignes en dehors de la balise PHP ont été affichées, mais aucun saut de ligne n'est indiqué dans la commande echo ou la commande print. En fait, l'invite de commande réapparaît sur la même ligne que la sortie n°2. Sortie n°3. Toute autre fonction d'impression de PHP fonctionnera exactement comme cette fonction, tout comme toute fonction qui réécrit dans un fichier.
#!/usr/local/bin/php -q <?php$STDOUT = fopen("php://stdout", "w"); fwrite($STDOUT, "Output #1."); fclose($STDOUT);?>
Le code ci-dessus ouvrira explicitement php://stdout comme canal de sortie, et php://output fonctionne généralement de la même manière que 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)!