PHP でのコマンドライン実行
以下は、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 'bar' -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 環境では一重引用符を使用してください。
-
PHP で指定されたファイルを実行します。
php my_script.php <span style="color: #3366ff;">php -f "my_script.php"</span>
上記の両方のメソッド (-f パラメーターの有無にかかわらず) は、指定された my_script.php ファイルを実行できます。実行するファイルを選択できます。指定する PHP スクリプトには、拡張子 .php を付ける必要はありません。
-
PHP コードをコマンドラインから直接実行します。
<span style="color: #3366ff;">php -r "print_r(get_defined_constants());"</span>
このメソッドを使用する場合は、シェル変数の置換と引用符の使用に注意してください。
注: 上記の例をよく読んでください。コードの実行時に開始マーカーと終了マーカーはありません。 -r パラメーターを使用する場合、これらのタグは不要であり、構文エラーが発生します。
標準入力 (stdin) 経由で実行する必要がある PHP コードを提供します。
上記の使用法では非常に強力な関数が提供され、次の例に示すように PHP コードを動的に生成し、コマンド ラインからこれらのコードを実行できます。
$ 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 'var_dump($argv);' -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 スクリプトと同様にファイルを直接実行できます。
<span style="color: #000000;">#!/usr/bin/php<span style="color: #0000bb;"><?php <table><tr> <td><code><span style="color: #000000;">#!/usr/bin/php<br><span style="color: #0000bb;"><?php <br>????var_dump</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$argv</span><span style="color: #007700;">);<br></span><span style="color: #0000bb;">?></span> </span>
($argv);
?> ファイル名が 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. 命令行选项
选项名称 描 述 -s 显示有语法高亮色彩的源文件。
该参数使用内建机制来解析文件并为其生成一个 HTML 高亮版本并将结果写到标准输出。请注意该过程所做的只是生成了一个
[...]
的 HTML 标记符块,并不包含任何的 HTML 头。注: 该选项不能和 -r 参数同时使用。
-w 显示除去了注释和空格的源代码。
注: 该选项不能和 -r 参数同时使用。
-f 解析并运行给定的文件名。该参数为可选参数且可以不加,仅指明需要运行的文件名即可。
-v 将 PHP、PHP SAPI 及 Zend 的版本信息写入的标准输出。例如:
$ php -v PHP 4.3.0-dev (cli), Copyright (c) 1997-2002 The PHP Group Zend Engine v1.3.0, Copyright (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 文件中设置变量的值,其语法为:
-d configuration_directive[=value]
范例:
# Ommiting the value part will set the given configuration directive to "1" $ php -d max_execution_time -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(1) "1" # Passing an empty value part will set the configuration directive to "" php -d max_execution_time= -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(0) "" # The configuration directive will be set to anything passed after the '=' character $ php -d max_execution_time=20 -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(2) "20" $ php -d max_execution_time=doesntmakesense -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(15) "doesntmakesense"
-e 为调试器等生成扩展信息。
-z 加载 Zend 扩展库。如果仅给定一个文件名,PHP 将试图从您系统扩展库的默认路径(在 Linux 系统下,该路径通常由 /etc/ld.so.conf 指定)加载该扩展库。如果您用一个绝对路径指定文件名,则系统的扩展库默认路径将不会被使用。如果用相对路径指定的文件名,PHP 则仅试图加载相对于当前目录的扩展库。
-l 该参数提供了对指定 PHP 代码进行语法检查的方便的方法。如果成功,则向标准输出写入 No syntax errors detected in
字符串,并且外壳返回值为 0。如果失败,则 Errors parsing 以及内部解析器错误信息会一起被写入到标准输出,同时外壳返回值将别设置为 255。 该参数将无法检查致命错误(如未定义函数),如果您希望检测之名错误,请使用 -f 参数。
注: 该参数不能和 -r 一同使用。
-m 使用该参数,PHP 将打印出内置以及已加载的 PHP 及 Zend 模块:
$ 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 的起始和结束标识符( 和 ?>),否则将会导致语法解析错误。
注: 使用这种形式的 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)
<span style="color: #000000;">#!/usr/bin/php<br><span style="color: #0000bb;"><?php <br><br></span><span style="color: #007700;">if (</span><span style="color: #0000bb;">$argc </span><span style="color: #007700;">!= </span><span style="color: #0000bb;">2 </span><span style="color: #007700;">|| </span><span style="color: #0000bb;">in_array</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$argv</span><span style="color: #007700;">[</span><span style="color: #0000bb;">1</span><span style="color: #007700;">], array(</span><span style="color: #dd0000;">'--help'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'-help'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'-h'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'-?'</span><span style="color: #007700;">))) {<br></span><span style="color: #0000bb;">?><br></span><br>This is a command line PHP script with one option.<br><br>??Usage:<br>??<span style="color: #0000bb;"><?php </span><span style="color: #007700;">echo </span><span style="color: #0000bb;">$argv</span><span style="color: #007700;">[</span><span style="color: #0000bb;">0</span><span style="color: #007700;">]; </span><span style="color: #0000bb;">?></span> <option> <br><br>??</option> <option> can be some word you would like<br>??to print out. With the --help, -help, -h,<br>??or -? options, you can get this help.<br><br><span style="color: #0000bb;"><?php <br></span><span style="color: #007700;">} else {<br>????echo </span><span style="color: #0000bb;">$argv</span><span style="color: #007700;">[</span><span style="color: #0000bb;">1</span><span style="color: #007700;">];<br>}<br></span><span style="color: #0000bb;">?></span> </option></span></span>
在以上脚本中,我们用第一行特殊的代码来指明该文件应该由 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

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版
便利なJavaScript開発ツール
