Maison  >  Article  >  développement back-end  >  Explication détaillée de l'exécution de la ligne de commande PHP

Explication détaillée de l'exécution de la ligne de commande PHP

小云云
小云云original
2018-03-10 11:55:254576parcourir

Voici les paramètres d'option du mode ligne de commande fournis par le fichier binaire PHP (c'est-à-dire le programme php.exe). Vous pouvez interroger ces paramètres à tout moment via la commande PHP -h.

<span style="font-size: 14px;">Usage: php [options] [-f] 28897b20adb25fbae118a3f80f538dec [args...]<br>       php [options] -r ffbe95d20f3893062224282accb13e8f [args...]<br>       php [options] [-- args...]<br>  -s               Display colour syntax highlighted source.<br>  -w               Display source with stripped comments and whitespace.<br>  -f 28897b20adb25fbae118a3f80f538dec        Parse 28897b20adb25fbae118a3f80f538dec.<br>  -v               Version number<br>  -c 98953a78f52873edae60a617ec082494|28897b20adb25fbae118a3f80f538dec 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 28897b20adb25fbae118a3f80f538dec        Load Zend extension 28897b20adb25fbae118a3f80f538dec.<br>  -l               Syntax check only (lint)<br>  -m               Show compiled in modules<br>  -i               PHP information<br>  -r ffbe95d20f3893062224282accb13e8f        Run PHP ffbe95d20f3893062224282accb13e8f without using script tags e1cdf277302c20b8d8f1b523c1353fef<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>

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

Dans une fenêtre environnement , essayez d'utiliser des guillemets doubles et dans l'environnement Linux, essayez d'utiliser des guillemets simples pour terminer.

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

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

    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.

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

    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 des erreurs 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 (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, le nom est "-"). 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 de prêter trop attention à quoi que ce soit. 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.

<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>

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

#!/usr/bin/php
efed5127f36b981c4500e1430988f65b

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

<span style="font-size: 14px;">$ 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/></span>

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

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, générer une version HTML mise en évidence de celui-ci 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 ne contient 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

Analyser et exécuter 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

Écrire les informations de version de PHP, PHP SAPI et Zend standard sortir. 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

Avec ce paramètre, vous pouvez spécifier un répertoire dans lequel le fichier php.ini est placé, ou spécifier directement un fichier INI personnalisé dont le nom de fichier ne doit pas nécessairement être php.ini. Par exemple :

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

Exécutez PHP de manière interactive.

-d

Utilisez ce paramètre pour le définir vous-même dans le php.ini file La valeur de la variable, sa 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 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 une vérification de la syntaxe pour le code PHP spécifié Méthode pratique . 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 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 intégré Et les modules PHP et Zend chargés :

$ 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 résultat. Si PHP ne fonctionne pas correctement, nous vous recommandons d'exécuter php -i commande pour voir s'il y a un message d'erreur affiché 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 du code PHP sur la ligne de commande. Vous n'avez pas besoin d'ajouter les identifiants de début et de fin PHP (33e7b5b1c6ca500302faf09088e15bf3), sinon cela provoquerait des erreurs d'analyse de syntaxe.

注: 使用这种形式的 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/>
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/php82c68971946bf05db3b94f3b927e3c17This 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

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 nombre 0 ($argv[0]).

Dans le programme ci-dessus, nous vérifions si le nombre de paramètres est supérieur à 1 ou inférieur à 1. Même si le paramètre est --help, -help, -h ou -?, nous imprimons toujours les informations d'aide et affichons dynamiquement le nom du script en même temps. 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 le rendre exécutable puis exécuter simplement script.php echothis ou script.php -h. Sous Windows, vous pouvez écrire un fichier batch pour cela :

Recommandations associées :

Exécuter en fonction de la ligne de commande avec les paramètres A méthode pour exécuter un script php avec des paramètres et obtenir des paramètres basés sur la ligne de commande, tutoriel php script_PHP

Exécution en ligne de commande sur 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