Maison  >  Article  >  développement back-end  >  Explication détaillée du mode ligne de commande en PHP

Explication détaillée du mode ligne de commande en PHP

小云云
小云云original
2018-03-10 09:10:163757parcourir

Cet article partage principalement avec vous une explication détaillée du mode ligne de commande en PHP. Voici les paramètres d'option du mode ligne de commande fournis par le fichier binaire PHP (c'est-à-dire le programme php.exe). paramètres à tout moment via la commande PHP -h.

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

Le module CLI SAPI propose les trois méthodes différentes suivantes pour obtenir le code PHP que vous souhaitez exécuter :

Dans l'environnement Windows, essayez d'utiliser des guillemets doubles, et sous Linux environnement, essayez d'utiliser des guillemets doubles. Utilisez des guillemets simples pour terminer.

  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 exécuter le fichier my_script.php donné. Vous pouvez choisir n'importe quel fichier à exécuter. Les scripts PHP que vous spécifiez n'ont pas besoin d'avoir une extension .php ; ils peuvent avoir n'importe quel nom de fichier et n'importe quelle extension.

  2. Exécutez le code PHP directement depuis 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.

    Remarque : veuillez lire attentivement l'exemple ci-dessus, il n'y a pas de marqueurs de début et de fin lors de l'exécution du code ! Avec le paramètre -r, ces marqueurs sont inutiles et provoqueront une erreur de syntaxe.

  3. Fournit 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

Les trois méthodes ci-dessus pour exécuter du code ne peuvent pas être utilisées en même temps.

Comme toutes les applications shell, le binaire PHP (fichier php.exe) et le script PHP qu'il exécute peuvent accepter une série de paramètres. PHP n'a aucune limite sur le nombre d'arguments transmis à un script (le shell a une limite sur le nombre de caractères sur la ligne de commande, mais vous ne dépasserez généralement pas cette limite). Les arguments passés à votre script sont disponibles dans la variable globale $argv. Le membre indexé zéro de ce tableau est le nom du script (ce nom est "-" lorsque le code PHP provient d'une entrée standard et est exécuté directement depuis la ligne de commande avec le paramètre -r). De plus, la variable globale $argc stocke le nombre de variables membres dans le tableau $argv (et non le nombre de paramètres transmis au programme de script).

Tant que les paramètres que vous transmettez à votre script ne commencent pas par un symbole -, vous n'avez pas besoin d'y prêter trop d'attention. Passer des paramètres commençant par - à votre script provoquera une erreur car PHP pensera qu'il doit gérer lui-même ces paramètres. Vous pouvez utiliser le séparateur de liste de paramètres pour résoudre ce problème. Une fois que PHP a analysé les paramètres, tous les paramètres après ce symbole seront transmis tels quels à votre script.

# 以下命令将不会运行 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"
}

En plus de cela, nous avons une autre façon d'utiliser PHP pour les scripts shell. Vous pouvez écrire un script et démarrer la première ligne avec #!/usr/bin/php, suivi du code PHP normal avec des balises de début et de fin PHP, puis configurer l'exécution correcte de la propriété de fichier. Cette méthode permet au fichier d'être exécuté directement comme un script shell ou un script PERL.

#!/usr/bin/php
b064f36456ae336fdf6feef53cd4cadf

En supposant que le fichier soit renommé test et placé dans le répertoire courant, nous pouvons faire ce qui suit :

$ 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 constater, lorsque vous transmettez des paramètres commençant par - au script, celui-ci s'exécute toujours correctement.

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, en générer une version mise en surbrillance HTML et écrire le résultat sur la sortie standard. Veuillez noter que ce processus ne fait que générer un bloc de balises HTML de ffbe95d20f3893062224282accb13e8f [...] 1cd55414ff5abdfea5dd958e7e547fdd et n'inclut aucun en-tête HTML.

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

Analysez et exécutez le nom de fichier donné. Ce paramètre est facultatif et peut être omis. 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 php.ini répertoire du fichier, 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 la valeur de la variable dans le fichier php.ini. La syntaxe est :

. - d configuration_directive[=value]

Exemple :

# L'omission de 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 tentera 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 un nom de fichier est spécifié avec un chemin relatif, PHP tentera 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 le shell renvoie la valeur 0. En cas d'échec, les erreurs d'analyse 2334ac29606bf8a170583e4f7533b1f4 seront écrites sur la sortie standard avec les messages d'erreur de l'analyseur interne et la valeur de retour du shell sera définie sur 255.

Ce paramètre ne détectera pas les erreurs fatales (telles qu'une fonction non définie), 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 imprimera les modules PHP et Zend intégrés et chargés :

$ php -m [PHP Modules] xml tokenizer standard session posix pcre overload mysql mbstring ctype [Zend Modules]
-i 该命令行参数会调用 phpinfo() 函数,并打印出结果。如果 PHP 没有正常工作,我们建议您执行 php -i 命令来查看在信息表格之前或者对应的地方是否有任何错误信息输出。请注意输出的内容为 HTML 格式,因此输出的信息篇幅较大。
-r

使用该参数可以在命令行运行 PHP 代码。您无需加上 PHP 的起始和结束标识符(abcac6319805b2359d7a7018181b8607),否则将会导致语法解析错误。

注:   使用这种形式的 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_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"]=>  [...]

如果您使用的外壳不是 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/php<?phpif ($argc != 2 || in_array($argv[1], array(&#39;--help&#39;, &#39;-help&#39;, &#39;-h&#39;, &#39;-?&#39;))) 
{?>This is a command line PHP script with one option.  Usage:  <?php echo $argv[0]; ?> <option> 
 <option> can be some word you would like  to print out. With the --help, -help, -h,  or -? 
 options, you can get this help.<?php} else {    echo $argv[1];}?>

在以上脚本中,我们用第一行特殊的代码来指明该文件应该由 PHP 来执行。我们在这里使用 CLI 的版本,因此不会有 HTTP 头信息输出。在您用 PHP 编写命令行应用程序时,您可以使用两个参数:$argc 和 $argv。前面一个的值是比参数个数大 1 的整数(运行的脚本本身的名称也被当作一个参数)。第二个时包含有参数的数组,其第一个元素为脚本的名称,下标为数字 0($argv[0])。

在以上程序中我们检查了参数的个数是大于 1 个还是小于 1 个。即时参数是 --help、-help、-h 或 -?,我们仍然打印出帮助信息,并同时动态输出脚本的名称。如果还收到了其它参数,我们也把它们显示出来。

如果您希望在 Unix 下运行以上脚本,您需要使得它成为可执行脚本,然后简单的运行 script.php echothis 或 script.php -h。在 Windows 下,您可以为此编写一个批处理文件:

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

相关推荐:

关于命令行模式的详细介绍

php命令行模式

PHP 5 PHP的命令行模式解决办法

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