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

PHPコマンドライン実行の詳しい説明

小云云
小云云オリジナル
2018-03-10 11:55:254608ブラウズ

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

CLI SAPI モジュールには、実行したい PHP コードを取得するための次の 3 つの異なる方法があります:

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

  1. PHP に指定されたファイルを実行させます。

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

    上記のどちらの方法でも (-f パラメーターの有無にかかわらず)、指定された my_script.php ファイルを実行できます。実行するファイルを選択できます。指定する PHP スクリプトには、.php 拡張子を付ける必要はありません。任意のファイル名と拡張子を付けることができます。

  2. コマンドラインから PHP コードを直接実行します。

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

    この方法を使用する場合は、シェル変数の置換と引用符の使用に注意してください。

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

  3. 標準入力 (stdin) 経由で実行する必要がある PHP コードを提供します。

    上記の使用法により、非常に強力な機能が提供され、次の例に示すように、PHP コードを動的に生成し、コマンド ラインからこれらのコードを実行できるようになります。 上記の 3 つのコード実行方法を同時に使用することはできません。

    すべてのシェル アプリケーションと同様、PHP バイナリ (php.exe ファイル) とそれが実行する PHP スクリプトは一連のパラメータを受け入れることができます。 PHP には、スクリプトに渡される引数の数に制限がありません (シェルにはコマンド ラインの文字数に制限がありますが、通常はその制限を超えることはありません)。スクリプトに渡される引数は、グローバル変数 $argv で使用できます。この配列のインデックスが 0 のメンバーはスクリプトの名前です (PHP コードが標準入力から取得され、-r パラメーターを使用してコマンド ラインから直接実行される場合、名前は「-」になります)。さらに、グローバル変数 $argc には、$argv 配列内のメンバー変数の数が格納されます (スクリプト プログラムに渡されるパラメーターの数ではありません)。 スクリプトに送信するパラメーターが - 記号で始まらない限り、何も注意を払う必要はありません。 - で始まるパラメータをスクリプトに渡すと、PHP がこれらのパラメータを自分で処理する必要があると判断するため、エラーが発生します。この問題は、パラメーター リストの区切り文字 -- を使用することで解決できます。 PHP がパラメータを解析した後、この記号の後のすべてのパラメータがそのままスクリプトに渡されます。

りー

除此之外,我们还有另一个方法将 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>

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

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

オプション名 説明
-s

カラーソースを強調表示する構文とともに表示ファイル。

このパラメーターは、組み込みメカニズムを使用してファイルを解析し、HTML で強調表示されたバージョンを生成し、結果を標準出力に書き込みます。このプロセスでは、ffbe95d20f3893062224282accb13e8f [...] 1cd55414ff5abdfea5dd958e7e547fdd の HTML タグ ブロックが生成されるだけであり、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 ファイルが配置されるディレクトリを指定することも、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 コードの構文チェックを行う便利な方法を提供します。成功すると、「 で構文エラーが検出されませんでした」という文字列が標準出力に書き込まれ、シェルは値 0 を返します。失敗すると、2334ac29606bf8a170583e4f7533b1f4 の解析エラーが内部パーサー エラー メッセージとともに標準出力に書き込まれ、シェルの戻り値が 255 に設定されます。

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

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

-m

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

$ php -m [PHPモジュール] XML トークナイザー 標準 セッション ポジックス ピークレ 過負荷 mysql mbstring ctype [Zend モジュール]
-i このコマンドラインパラメータは phpinfo() 関数を呼び出し、結果を出力します。 PHP が正常に動作しない場合は、php を実行することをお勧めします。 -i コマンドを使用して、情報テーブルの前または対応する場所にエラー メッセージが出力されているかどうかを確認します。出力コンテンツは HTML 形式であるため、出力される情報が大きくなることに注意してください。
-r

このパラメーターを使用して、コマンドラインで PHP コードを実行します。 PHP の開始識別子と終了識別子 (f59d0df90952efbb3ace09d6f17169df) を追加する必要はありません。追加しないと、構文解析エラーが発生します。

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

上記のスクリプトでは、コードの最初の特別な行を使用して、ファイルが 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 では、このためのバッチ ファイルを作成できます:

関連する推奨事項:

コマンドラインに基づいてパラメータを指定して php スクリプトを実行し、パラメータを取得する方法

php スクリプトを実行するコマンドラインに基づくパラメータを使用してパラメータ化されたphpスクリプトとパラメータを取得する方法、php script_PHPチュートリアル

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

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

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