ホームページ  >  記事  >  バックエンド開発  >  PHP でのコマンドラインの実行

PHP でのコマンドラインの実行

不言
不言オリジナル
2018-05-09 11:56:331940ブラウズ

この記事では、主に PHP でのコマンド ラインの実行について説明します。これは、必要な友人に参照していただけるように共有します。

バイナリ ファイル (つまり、php.exe) です。 プログラム) は、コマンド ライン モード オプション パラメーターを提供します。これらのパラメーターは、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

CLI SAPI

モジュールには、実行する PHP コードを取得するための次の 3 つの異なるメソッドがあります:

Windows 環境では二重引用符を使用してください。Linux 環境では二重引用符を使用してください。環境では二重引用符を使用してください。完了するには一重引用符を使用してください。

    指定されたファイルを
  1. PHP

    で実行させます。

    php my_script.php 
    php -f  "my_script.php"
    上記の両方のメソッド (
    -f

    パラメーターの有無にかかわらず) で、指定された my_script.php ファイルを実行できます。実行するファイルを選択できます。指定する PHP スクリプトには、拡張子 .php を付ける必要はありません。

  2. コマンドラインから
  3. PHP

    コードを直接実行します。

    php -r "print_r(get_defined_constants());"
    この方法を使用する場合は、シェル変数の置換と引用符の使用に注意してください。


  1. 注:

    上記の例をよく読んでください。コードを実行するときに開始マーカーと終了マーカーはありません。 -r パラメーターを使用すると、これらのマーカーは不要になり、構文エラーが発生します。

  2. 標準入力 (
  3. stdin

    ) 経由で実行する必要がある PHP コードを提供します。 上記の使用法により、非常に強力な関数が提供され、次の例に示すように、

    PHP

    コードを動的に生成し、コマンド ラインからこれらのコードを実行できるようになります。

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

和所有的外壳应用程序一样,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"
}

ご覧のとおり、- で始まるパラメータをスクリプトに渡すと、スクリプトは引き続き正常に実行されます。

---------------------------------------------- --- ----------------------------------- コマンドオプション ----------- ---------- ------------------------------------

表 23-3。コマンドラインオプション

-m-iこのコマンドラインパラメータは-r
オプション名 説明
-s

構文を強調表示してソースファイルを表示します。

このパラメーターは、組み込みメカニズムを使用してファイルを解析し、HTML で強調表示されたバージョンを生成し、結果を標準出力に書き込みます。このプロセスでは、ffbe95d20f3893062224282accb13e8f [...] 1cd55414ff5abdfea5dd958e7e547fddHTML タグ ブロックが生成されるだけであり、HTML ヘッダーは含まれないことに注意してください。


注: このオプションは -r パラメーターと一緒に使用することはできません。


-w

は、コメントとスペースを削除したソースコードを示しています。


注: このオプションは -r パラメーターと一緒に使用することはできません。


-f

指定されたファイル名を解析して実行します。このパラメータはオプションであり、実行する必要があるファイル名を指定するだけで追加する必要はありません。

-v

PHP、PHP SAPI、Zendのバージョン情報を標準出力に書き込みます。例:

$ php -v PHP 4.3.0-dev (cli)、著作権 (c) 1997-2002 The PHP Group Zend Engine v1.3.0、著作権 (c) 1998-2002 Zend Technologies
-c

このパラメータを使用すると、php.ini ファイルが配置されるディレクトリを指定するか、カスタム を直接指定できます。 INI ファイルの場合、ファイル名は php.ini である必要はありません。例:

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

PHPを対話的に実行します。

-d

このパラメータを使用して、php.iniファイル内の変数の値を設定します。構文は次のとおりです:

-dconfiguration_directive[=value]

例:

# 値の部分を省略すると、指定された設定ディレクティブが「1」に設定されます $ php -d 最大実行時間 -r '$foo = ini_get("max_execution_time");' 文字列(1) "1" # 空の値部分を渡すと、設定ディレクティブが "" に設定されます php -d 最大実行時間= -r '$foo = ini_get("max_execution_time");' 文字列(0) "" # 構成ディレクティブは、「=」文字の後に渡されたものに設定されます $ php -d 最大実行時間=20 -r '$foo = ini_get("max_execution_time");' 文字列(2) "20" $php -d max_execution_time=doesntmakesense -r '$foo = ini_get("max_execution_time");' string(15) "doesntmakesense"
-e

デバッガなどの拡張情報を生成します。

-z

Zend 拡張ライブラリをロードします。ファイル名のみが指定されている場合、PHP はシステムの拡張ライブラリのデフォルト パスから拡張ライブラリをロードしようとします (Linux システムでは、このパスは通常 /etc/ld.so.conf によって指定されます)。ファイル名を絶対パスで指定した場合、拡張ライブラリへのシステムのデフォルトのパスは使用されません。ファイル名が相対パスで指定されている場合、PHP は現在のディレクトリを基準とした相対的な拡張子のロードのみを試みます。

-l

このパラメータは、指定された PHP コードの構文チェックを行う便利な方法を提供します。成功すると、2334ac29606bf8a170583e4f7533b1f4 文字列で構文エラーは検出されませんでしたというメッセージが標準出力に書き込まれ、シェルは 0 を返します。失敗した場合、2334ac29606bf8a170583e4f7533b1f4 の解析エラー が内部パーサー エラー メッセージとともに標準出力に書き込まれ、シェルの戻り値は 255 に設定されます。

このパラメータでは致命的なエラー(未定義関数など)をチェックすることはできません。致命的なエラーを検出したい場合は、

-fパラメータを使用してください。


注: このパラメータは -r と一緒に使用することはできません。


このパラメータを使用すると、PHP は組み込みおよびロードされた PHP モジュールと Zend モジュールを出力します:

$ php -m [PHPモジュール] XML トークナイザー 標準 セッション ポジックス ピークレ 過負荷 mysql mbstring ctype [Zend モジュール]

phpinfo()関数を呼び出し、結果を出力します。 PHPが正しく動作しない場合は、php -iコマンドを実行して、情報フォームの前または対応する場所にエラーメッセージが出力されているかどうかを確認することをお勧めします。出力コンテンツは HTML 形式であるため、出力情報が大きくなることに注意してください。
このパラメータを使用して、コマンドラインで

PHPコードを実行します。 PHP の開始識別子と終了識別子 (a2d53d0b8d155c7d4d6f91e6e01a3d40) を追加するために を追加する必要はありません。追加しないと、構文解析エラーが発生します。


注: この形式のPHPを使用する場合、シェル環境によって実行されるコマンドラインパラメータ置換との競合を避けるために特別な注意を払う必要があります。

構文解析エラーを示す例

$ php -r "$foo = get_define_constants();" コマンドラインコード(1): 解析エラー - 解析エラー、予期せぬ '='

ここでの問題は、二重引用符 " が使用されているにもかかわらず、sh/bash は依然としてパラメータ置換を実装していることです。 $foo が定義されていないため、置換後、その位置は null 文字になるため、実行時に PHP によって実際に読み取られるコードは次のようになります:

$ php -r " = get_dependent_constants();"

正しい方法は一重引用符を使用することです ' 一重引用符で囲まれた文字列内の変数は、sh/bash によって元の値に復元されません

$ php -r '$foo = get_ded_constants($foo);' 配列(370) { ["E_ERROR"]=> int(1) ["E_WARNING"]=> int(2) ["E_PARSE"]=> int(4) ["E_NOTICE"]=> int(8) ["E_CORE_ERROR"]=> [...]

sh/bash 以外のシェルを使用している場合は、他の問題が発生する可能性があります。遭遇したバグを報告するか、phpdoc@lists.php.net に電子メールを送信してください。

また、シェルの環境変数を horse に導入しようとしたり、バックスラッシュを使用して文字をエスケープしようとしたりすると、さまざまな問題が発生する可能性があります。使用するときは注意してください。



注: -rCLISAPIでは有効ですが、CGISAPIでは無効です。


-h このパラメータを使用すると、コマンド ライン パラメータの完全なリストと、これらのパラメータの機能の簡単な説明を取得できます。


PHP のコマンドライン モードを使用すると、PHP スクリプトを WEB サーバーから完全に独立して実行できます。 Unix システムを使用している場合は、スクリプトの実行に使用するプログラムをシステムが認識できるように、PHP スクリプトの先頭に特別なコード行を追加して実行できるようにする必要があります。 Windows プラットフォームでは、php.exe および .php ファイルのダブルクリック属性を関連付けたり、PHP を使用してスクリプトを実行するバッチ ファイルを作成したりできます。 Unix システム用に追加されたコードの最初の行は、Windows でのスクリプトの実行には影響しないため、この方法を使用してクロスプラットフォーム スクリプトを作成することもできます。以下は、単純な PHP コマンド ライン プログラムの例です。


例 23-1. コマンドラインから PHP スクリプト (script.php) を実行しようとしています

#!/usr/bin/phpe159d9e0592f3f2c28e1979a7d751056これは 1 つのオプションを備えたコマンド ライン PHP スクリプトです。 : 0e8116fbeca0753b81d15e8da712a426 5a07473c87748fb1bf73f23d45547ab8 --help、-h、または -? オプションを使用して出力します。 1368379bf0e06ed88222aa51004d0324

上記のスクリプトでは、コードの最初の特別な行を使用して、ファイルが PHP によって実行される必要があることを示しています。ここでは CLI バージョンを使用しているため、HTTP ヘッダーは出力されません。 PHP でコマンド ライン アプリケーションを作成する場合、$argc$argv の 2 つのパラメーターを使用できます。前の値は、パラメータの数より 1 大きい整数です (実行中のスクリプトの名前もパラメータとみなされます)。 2 番目にはパラメーターの配列が含まれており、その最初の要素はスクリプトの名前で、下付き文字は数値 0 ($argv[0]) です。

上記のプログラムでは、パラメーターの数が 1 より大きいか 1 より小さいかをチェックしました。インスタント パラメータは --help-help-h または -? ですが、それでもヘルプ情報を出力し、同時にスクリプトの名前を動的に出力します。他のパラメータを受信した場合は、それらも表示します。

上記のスクリプトを Unix で実行したい場合は、それを実行可能にしてから、script.php echothis または script.php -h を実行するだけです。 Windows では、このバッチ ファイルを作成できます:



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


以上がPHP でのコマンドラインの実行の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。