ホームページ  >  記事  >  バックエンド開発  >  php cli モード学習-PHP コマンドラインモード

php cli モード学習-PHP コマンドラインモード

不言
不言オリジナル
2018-04-08 15:30:2412249ブラウズ

php-cli モードが PHP プログラムのシェルのようなコマンドスタイルの実行であることは以前から知っていましたが、これは逆方向の方法であり、意味がないはずだと常に思っていました。プログラミングにこの cli モードを使用している人に会ったことがないからです。 。しかし今日、cliモードを使用するアプリケーションに遭遇しました

php_cliモードの紹介

php-cliとは、php Command Line Interfaceの略で、その名のとおり、コマンドライン上でphpを実行するためのインターフェースです。 PHP 環境 (php-cgi、isapi など) の実行とは異なります。つまり、PHP はフロントエンド Web ページを作成できるだけでなく、バ​​ックグラウンド プログラムを作成することもできます。 PHP CLI シェル スクリプトは、PHP のすべての利点を適用し、サーバー側スクリプト、システム、さらには GUI を備えたアプリケーションの作成を可能にします。 ——注: Windows と Linux はどちらも php_cli モードをサポートしています

PHP-cli アプリケーションのシナリオ:

1. マルチスレッド アプリケーション
この側面の利点 (Niao 兄弟から引用):

利点:
1.プロセス、子プロセスが終了した後、カーネルはリソースをリサイクルする責任があります
2. 複数のプロセスを使用する場合、子プロセスの異常終了によってプロセス全体のスレッドが終了することはありません。プロセスを再構築する
3. タスクの配布のみを担当する常駐メインプロセス

php のマルチスレッド - はい、これは php マルチスレッド アプリケーションです。マルチスレッド (curl は実際のマルチスレッドではなく、シミュレートされたマルチスレッドです)、php_cli モードの php は完全にマルチスレッドです。このとき、phpはLinuxのデーモンプロセスに所属しています。 以前「PHPマルチスレッドによる美人画像の一括収集とダウンロード(続き)」を書いたとき、収集プログラムでマルチスレッドをシミュレートするためにcurlを使用しましたが、ブラウザが実行すると実行タイムアウトまたはメモリアボートも発生します。プログラムは中断されます (完全に成功するまでに数回の試行が必要です)。ただし、php-cli モードで実行すると、プログラムが非常に高速に実行され、PHP マルチスレッド実行の利点が十分に発揮されることがわかります。

注: このマルチスレッド方法はあまり成熟していないため、大規模な生成アプリケーションには適していません。時々使用できます

2. PHP プログラムを定期的に実行する

前に、「PHP スケジュール」の 3 つの方法をまとめました。使用方法の 1 つは、Linux の cron メソッドを使用することです。では、このメソッドはどのようにして PHP プログラムを定期的に実行するのでしょうか?以下を参照してください

3. デスクトップ アプリケーションを開発する

PHP を使用して、Windows または Linux でグラフィカル ユーザー インターフェイス (GUI) アプリケーションを作成できます。必要なのは、PHP のコマンド ライン インターフェイスと GTK のパッケージだけです。これにより、真にポータブルな GUI アプリケーションの作成が可能になります (笑、以前は php がデスクトップ プログラムとして使用できることしか知りませんでしたが、今では php_cli モードを使用していることが分かりました)。他に何も学ぶ必要はありません。

4. PHP シェル スクリプトを作成する
bash シェルや Perl の使用方法が分からないが、実行するスクリプトが必要な場合はどうすればよいでしょうか?この時点で、使い慣れた PHP を使用して完全にシェル スクリプトを作成できます。 このとき、突然 PHP が強力すぎると感じませんか。 ——本当にどこでも 1 つの言語を開発します。

PHP_CLIの使い方

次の実行方法を実行します:
php.exeがD:xamppphpにあるとします。dosコマンドは次のように実行できます:

コードをコピーします コードは次のとおりです。 :

D:xamppphpphp.exe D:xampphtdocstest.php



はtest.phpファイルを実行できます。ここでは、Win プラットフォームでの xampp 統合環境をお勧めします。これは、wamp よりも本当に N 倍強力であり、この統合パッケージは直接 dos モードに入ることができます。

Linux で php_cli を使用するには
まず、php をインストールしたパスを見つけます。例として説明します。

php cli モード学習-PHP コマンドラインモード

php はパス /usr/local/php/bin/php

Copy の下にインストールされます。コード コードは次のとおりです:

/usr/local/php/bin/php /usr/local/apache/htdocs/a.php



を実行できます。 php ファイル

PHP_CLI プログラミングで知っておくべきこと
環境が php_cli モードをサポートしていることを検出するにはどうすればよいですか?

コードをコピーしますコードは次のとおりです:

<?php
//方法1
if (PHP_SAPI === &#39;cli&#39;)
{
   // ...
}
//方法2
if (php_sapi_name() === &#39;cli&#39;)
{
   // ...
}



PHP_ClI はどのようにパラメータを受け取るのですか?
デフォルトでは / usr/local/php/bin/ php が受け取るパラメータは $argv で、この変数は固定です。 PHP ファイルでは、var_dump($argv);

により次の結果が得られます:

php cli モード学習-PHP コマンドラインモード

このメソッドを一般的に使用される GET/post パラメーター モードに変換する簡単な処理関数を作成できます。

簡単なコード:

コードをコピー コードは次のとおりです:

<?php 
function parseArgs($argv){ 
array_shift($argv); 
$out = array(); 
foreach ($argv as $arg){ 
if (substr($arg,0,2) == &#39;--&#39;){ 
$eqPos = strpos($arg,&#39;=&#39;); 
if ($eqPos === false){ 
$key = substr($arg,2); 
$out[$key] = isset($out[$key]) ? $out[$key] : true; 
} else { 
$key = substr($arg,2,$eqPos-2); 
$out[$key] = substr($arg,$eqPos+1); 
} 
} else if (substr($arg,0,1) == &#39;-&#39;){ 
if (substr($arg,2,1) == &#39;=&#39;){ 
$key = substr($arg,1,1); 
$out[$key] = substr($arg,3); 
} else { 
$chars = str_split(substr($arg,1)); 
foreach ($chars as $char){ 
$key = $char; 
$out[$key] = isset($out[$key]) ? $out[$key] : true; 
} 
} 
} else { 
$out[] = $arg; 
} 
} 
return $out; 
} 
var_dump($argv); 
var_dump(parseArgs($argv));exit;


执行结果:

php cli モード学習-PHP コマンドラインモード

当然实现的方法不止一个,大家可以尝试其他方法实现!

例外关于php的cli还有很多参数可以加入:具体可以参考:http://php.net/manual/en/features.commandline.php

关于定时执行
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据 打开/etc/crontab,添加:

复制代码 代码如下:

/usr/bin/php -f /data/htdocs/test.php



关于corntab的详细使用参考51cto专题:Linux计划任务——cron服务

本文参考资料
http://www.php.cn/php-weizijiaocheng-312213.html

http://www.php.cn/php-weizijiaocheng-307840.html

http://www.php.cn/php-weizijiaocheng-307856.html

附注:2012-06-16 增加php_cli编程需知等

相关推荐:

vue cli升级webapck4的使用方法

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

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