Maison  >  Article  >  développement back-end  >  Exécution en ligne de commande sous PHP

Exécution en ligne de commande sous PHP

不言
不言original
2018-05-09 11:56:331940parcourir

Cet article présente principalement l'exécution en ligne de commande sous PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Ce qui suit est PHP. Les paramètres d'option du mode ligne de commande fournis par le fichier binaire (c'est-à-dire le programme php.exe ) peuvent être interrogés à tout moment via la commande PHP -h . Le module

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

CLI SAPI propose trois manières différentes d'obtenir le PHP que vous souhaitez exécuter Code :

Dans l'environnement Windows, essayez d'utiliser des guillemets doubles, et dans l'environnement Linux, essayez d'utiliser des guillemets simples.

  1. Laissez PHP exécuter le fichier spécifié.

    php my_script.php 
    php -f  "my_script.php"

    Les deux méthodes ci-dessus (avec ou sans le paramètre -f) peuvent être Exécutez le fichier my_script.php donné. Vous pouvez choisir n'importe quel fichier à exécuter. Le script PHP que vous spécifiez n'a pas besoin d'avoir l'extension .php. Il peut avoir n'importe quel nom de fichier et n'importe quelle extension.

  2. Exécutez le code PHP directement sur la ligne de commande.

    php -r "print_r(get_defined_constants());"

    Lorsque vous utilisez cette méthode, veuillez faire attention à la substitution des variables shell et à l'utilisation de guillemets.


  1. Remarque : Veuillez lire attentivement l'exemple ci-dessus, il n'y a pas de démarrage lorsque exécuter le code et le marqueur de fin ! Avec les paramètres -r, ces balises ne sont pas nécessaires et leur ajout entraînera une erreur de syntaxe.

  2. Fournissez le code PHP qui doit être exécuté via l'entrée standard (stdin).

    L'utilisation ci-dessus nous fournit des fonctions très puissantes, nous permettant de générer dynamiquement du code PHP et d'exécuter ces codes via la ligne de commande comme le montre l'exemple suivant :

    $ some_application | some_filter | php | sort -u >final_output.txt

以上三种运行代码的方法不能同时使用。

和所有的外壳应用程序一样,PHP 的二进制文件(php.exe 文件)及其运行的 PHP 脚本能够接受一系列的参数。PHP 没有限制传送给脚本程序的参数的个数(外壳程序对命令行的字符数有限制,但您通常都不会超过该限制)。传递给您脚本的参数可在全局变量 $argv 中获取。该数组中下标为零的成员为脚本的名称(当 PHP 代码来自标准输入获直接用 -r 参数以命令行方式运行时,该名称为“-”)。另外,全局变量 $argc 存有 $argv 数组中成员变量的个数(而非传送给脚本程序的参数的个数)。

只要您传送给您脚本的参数不是以 - 符号开头,您就无需过多的注意什么。向您的脚本传送以 - 开头的参数会导致错误,因为 PHP 会认为应该由它自身来处理这些参数。您可以用参数列表分隔符 -- 来解决这个问题。在 PHP 解析完参数后,该符号后所有的参数将会被原样传送给您的脚本程序。

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

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

#!/usr/bin/php
<?php
    var_dump
($argv);
?>
<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span>

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

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

Comme vous pouvez le voir, lorsque vous transmettez des paramètres commençant par - au script, le script s'exécute toujours normalement.

--------------------------------------------- --------------------------------Options de commande--------------- ------ ------------------------------------

Tableau 23-3. Options de ligne de commande

Nom de l'option Description
-s

Afficher les fichiers sources avec coloration syntaxique.

Ce paramètre utilise le mécanisme intégré pour analyser le fichier et générer une version HTML en surbrillance et écrire le résultat sur la sortie standard. Veuillez noter que ce processus ne fait que générer un bloc ffbe95d20f3893062224282accb13e8f [...] 1cd55414ff5abdfea5dd958e7e547fdd de balises HTML, et ne contient aucun HTML en-tête.


Remarque : Cette option ne peut pas être utilisée avec le paramètre -r.


-w

affiche le code source avec les commentaires et les espaces supprimés.


Remarque : Cette option ne peut pas être utilisée avec le paramètre -r.


-f

Analyser et exécuter le nom de fichier donné. Ce paramètre est facultatif et n'a pas besoin d'être ajouté. Il suffit de spécifier le nom du fichier à exécuter.

-v

Écrivez les informations de version de PHP, PHP SAPI et Zend sur la sortie standard. Par exemple :

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

En utilisant ce paramètre, vous pouvez spécifier un emplacement Le répertoire du fichier php.ini, ou spécifiez directement un fichier INI personnalisé, dont le nom de fichier ne peut pas être php.ini. Par exemple :

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

Exécutez PHP de manière interactive.

-d

Utilisez ce paramètre pour définir vous-même la valeur de la variable dans le fichier php.ini , sa syntaxe Pour :

-d configuration_directive[=value]

Exemple :

# Omettre la partie valeur définira la directive de configuration donnée sur "1" $ php -d max_execution_time -r '$foo = ini_get("max_execution_time"); var_dump($foo);' chaîne(1) "1" # Passer une partie de valeur vide définira la directive de configuration sur "" php -d max_execution_time= -r '$foo = ini_get("max_execution_time"); var_dump($foo);' chaîne(0) "" # La directive de configuration sera définie sur tout ce qui est passé après le caractère '=' $ php -d max_execution_time=20 -r '$foo = ini_get("max_execution_time"); var_dump($foo);' chaîne(2) "20" $php -d max_execution_time=doesntmakesense -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(15) "doesntmakesense"
-e

Générer des informations étendues pour les débogueurs, etc.

-z

Charger la bibliothèque d'extensions Zend. Si seul un nom de fichier est donné, PHP essaiera de charger la bibliothèque d'extensions à partir du chemin par défaut de la bibliothèque d'extensions de votre système (sur les systèmes Linux, ce chemin est généralement spécifié par /etc/ld.so.conf ) . Si vous spécifiez un nom de fichier avec un chemin absolu, le chemin par défaut du système vers la bibliothèque d'extensions ne sera pas utilisé. Si vous spécifiez un nom de fichier avec un chemin relatif, PHP essaiera uniquement de charger l'extension relative au répertoire courant.

-l

Ce paramètre fournit un moyen pratique de vérifier la syntaxe du code PHP spécifié. En cas de succès, la chaîne Aucune erreur de syntaxe détectée dans 2334ac29606bf8a170583e4f7533b1f4 est écrite sur la sortie standard et la valeur de retour du shell est 0. En cas d'échec, Erreurs d'analyse 2334ac29606bf8a170583e4f7533b1f4 sera écrit sur la sortie standard avec le message d'erreur de l'analyseur interne, et la valeur de retour du shell sera définie sur 255.

Ce paramètre ne pourra pas vérifier les erreurs fatales (telles que les fonctions non définies). Si vous souhaitez détecter les erreurs fatales, veuillez utiliser le paramètre -f.


Remarque : Ce paramètre ne peut pas être utilisé avec -r.


-m

En utilisant ce paramètre, PHP affichera le fichier intégré et chargé les modules PHP et Zend :

$ php -m [Modules PHP] XML tokeniseur standard session posix PCRE surcharge mysql chaînemb typec [Modules Zend]
-i Ce paramètre de ligne de commande appellera la fonction phpinfo() et imprimera le résultat. Si PHP ne fonctionne pas correctement, nous vous recommandons d'exécuter la commande php -i pour voir s'il y a des messages d'erreur affichés avant le tableau d'informations ou à l'endroit correspondant. Veuillez noter que le contenu de sortie est au format HTML, les informations de sortie sont donc plus volumineuses.
-r

Utilisez ce paramètre pour exécuter le code PHP sur la ligne de commande. Vous n'avez pas besoin de plus les identifiants de début et de fin de PHP (ee04bbb39754204cd533973e7ad834b4 >), sinon cela provoquera des erreurs d'analyse syntaxique.


Remarque : Lors de l'utilisation de cette forme de PHP, des précautions particulières doivent être prises pour éviter tout conflit avec la substitution de paramètre de ligne de commande effectuée par l'environnement shell.

Exemple illustrant les erreurs d'analyse syntaxique

$ php -r "$foo = get_defined_constants();" Code de ligne de commande (1) : Erreur d'analyse - erreur d'analyse, inattendue '='

Le problème ici est que même si les guillemets " sont utilisés, sh/bash implémente toujours la substitution de paramètres. Parce que $foo n'est pas défini. Après avoir été remplacé, sa position devient un caractère nul Par conséquent, au moment de l'exécution, le code réellement lu par PHP est :

$ php -r " = get_defined_constants. ();"

La méthode correcte est d'utiliser des guillemets simples '. Dans une chaîne entre guillemets simples, les variables ne seront pas restaurées à leurs valeurs d'origine par sh/bash.

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

Si vous utilisez un shell autre que sh/bash, vous risquez de rencontrer d'autres problèmes. Veuillez signaler les bugs que vous rencontrez ou envoyer un e-mail à phpdoc@lists.php.net.

Vous pouvez également rencontrer divers problèmes lorsque vous essayez d'introduire les variables d'environnement du shell dans le cheval ou d'utiliser des barres obliques inverses pour échapper des caractères. Veuillez faire attention lorsque vous les utilisez !



Remarque : -r dans Valable en CLI SAPI, invalide en CGI SAPI.


-h En utilisant ce paramètre, vous pouvez obtenir la liste complète des paramètres de ligne de commande et Une brève description de ce que font ces paramètres.


Le mode ligne de commande de PHP permet aux scripts PHP de s'exécuter de manière totalement indépendante du serveur WEB. Si vous utilisez un système Unix, vous devez ajouter une ligne de code spéciale au début de votre script PHP pour permettre son exécution, afin que le système sache quel programme utiliser pour exécuter le script. Sous la plateforme Windows, vous pouvez associer les attributs de double-clic des fichiers php.exe et .php, ou vous pouvez écrire un fichier batch pour exécuter le script en utilisant PHP. La première ligne de code ajoutée pour les systèmes Unix n'affectera pas l'exécution du script sous Windows, vous pouvez donc également utiliser cette méthode pour écrire des scripts multiplateformes. Ce qui suit est un exemple de programme simple en ligne de commande PHP.


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

#!/usr/bin/php9af8541c2854448f4292f22f564ba262This is a command line PHP script with one option.  Usage:  6925e5facaaf6ccc7a8ba2dfb2f25106 5a07473c87748fb1bf73f23d45547ab8  5a07473c87748fb1bf73f23d45547ab8 can be some word you would like  to print out. With the --help, -help, -h,  or -? options, you can get this help.6d411e2bbda1d098e47f09cda7e0e03e
Exemple 23-1. Script PHP essayant de s'exécuter en mode ligne de commande ( script.php)#!/usr/bin/php8deb48bca3d1183fcb518f448274ad98 Ceci est un script PHP en ligne de commande avec une option : Dans le script ci-dessus, nous utilisons la première ligne de code spéciale pour indiquer que le fichier doit être exécuté par PHP. Nous utilisons ici la version CLI, donc aucun en-tête HTTP ne sera généré. Lorsque vous écrivez des applications en ligne de commande en PHP, vous pouvez utiliser deux paramètres : $argc et $argv. La valeur de la précédente est un nombre entier supérieur au nombre de paramètres (le nom du script en cours d'exécution est également considéré comme un paramètre). Le second contient un tableau de paramètres dont le premier élément est le nom du script et l'indice est le chiffre 0 ($argv[0]).

Dans le programme ci-dessus, nous avons vérifié si le nombre de paramètres est supérieur à 1 ou inférieur à 1. Les paramètres immédiats sont --help, -help, -h ou -?, nous imprimons toujours les informations d'aide et dynamiquement Le nom du script de sortie. Si d'autres paramètres sont reçus, nous les affichons également.

Si vous souhaitez exécuter le script ci-dessus sous Unix, vous devez en faire un script exécutable, puis exécutez simplement script.php echothis ou script.php -h. Sous Windows vous pouvez écrire un fichier batch pour cela :



@c:phpcliphp.exe script.php %1 %2 %3 %4

@c:phpcliphp.exe script.php %1 %2 %3 %4


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn