目次
CLI的普通应用
什么是PHP-CLI
为什么要使用PHP-CLI
判断PHP运行模式
PHP-CLI 内置参数
获取自定义参数
PHP-CLI在框架中的应用
PHP-CLI来写shell脚本
PHP与Linux命令交互的几个函数
ホームページ バックエンド開発 PHPチュートリアル CURL と PHP-CLI のアプリケーション [CLI]

CURL と PHP-CLI のアプリケーション [CLI]

Aug 08, 2016 am 09:24 AM
array gt php quot

CLI的普通应用

什么是PHP-CLI

php-cli是php Command Line Interface的简称,即PHP命令行接口,在windows和linux下都是支持PHP-CLI模式的;

为什么要使用PHP-CLI
  • 多线程应用
  • 定时执行php程序
  • 开发桌面程序 (使用PHP-CLI和GTK包即可开发桌面,但没人会用PHP来编写桌面程序的)
  • 编写PHP的shell脚本
判断PHP运行模式

PHP的运行模式远远不止apache和cli,还包括:olserver, apache, apache2filter, apache2handler, caudium, cgi (until PHP 5.3), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux, and webjames.

<code>echo php_sapi_name(); //如果是CLI模式下访问就输出CLI,如果是Apache就是apache2handler... </code>
ログイン後にコピー
PHP-CLI 内置参数
<code>D:\wamp\bin\php\php5.3.8>php -help
Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse and execute <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Output HTML syntax highlighted source.
  -v               Version number
  -w               Output source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.
  --ri <name>      Show configuration for extension <name>.</code>
ログイン後にコピー
  • 运行指定的php文件:
<code><?php 
  echo &#39;this is php-cli&#39;
?></code>
ログイン後にコピー
<code># php /var/www/html/test.php
this is a php-cli 

[root@semple html]# php -f 'test.php'
this is a php-cli</code>
ログイン後にコピー
  • 在命令行直接运行 PHP 代码
<code>D:\wamp\bin\php\php5.3.8>php -r "echo 'hello world';"
hello world</code>
ログイン後にコピー

注意: 在运行这些php代码时没有开始和结束的标记符!加上 -r 参数后,这些标记符是不需要的,加上它们会导致语法错误。

  • 通过标准输入(stdin)提供需要运行的 PHP 代码
<code>// ask for input
fwrite(STDOUT, "Enter your name: ");

// get input
$name = trim(fgets(STDIN));

// write input back
fwrite(STDOUT, "Hello, $name!");</code>
ログイン後にコピー
<code>D:\wamp\www>php test.php
Enter your name:

D:\wamp\www>php test.php
Enter your name: zhouzhou
Hello, zhouzhou!</code>
ログイン後にコピー
获取自定义参数
<code>print_r($argv); //获取具体的参数;

print_r($argc); //获取参数的数目;</code>
ログイン後にコピー
<code>D:\wamp\www>php test.php #本身执行的php文件就作为一个参数;
Array
(
    [0] => test.php
)
1

D:\wamp\www>php test.php arg1 arg2 arg3 arg4
Array
(
    [0] => test.php
    [1] => arg1
    [2] => arg2
    [3] => arg3
    [4] => arg4
)

5</code>
ログイン後にコピー

argvargc也分别可以在$_SERVER数组中得到

<code><?php
$args = getopt(&#39;g:m:a:&#39;); //只能是单个单词,如果不是单个单词就会出错;
print_r($args);
?></code>
ログイン後にコピー
<code>D:\wamp\www>php test.php -g group -m module -a age
Array
(
    [g] => group
    [m] => module
    [a] => age
)</code>
ログイン後にコピー

PHP-CLI在框架中的应用

首先要清楚,大多数PHP-CLI都是在crontab中应用,俗称'跑脚本'。既然是'跑',那肯定是一个庞大的IO开销,这个时候放在框架环境中来跑这个脚本的话,至少我的使用过程中遇见过'内存泄漏',php这种语言基本上不会遇见的情况就是在这种情况下遇见的;

  • 在CI框架中应用
<code># php /var/www/html/web2/index.php welcome test 这个是在ci里面执行的welcome控制器里面的test方法,后面的以此类推;</code>
ログイン後にコピー

还可以代入变量

<code><?php
class Tools extends CI_Controller {

  public function message($to = &#39;World&#39;)
  {
    echo "Hello {$to}!".PHP_EOL;
  }
}
?></code>
ログイン後にコピー
<code>$ cd /path/to/project;
$ php index.php tools message
# Hello John Smith!。</code>
ログイン後にコピー
  • 在TP框架中的应用
    在thinkphp中对CLI的支持并非很好,但我们可以通过$argv在框架运行之初就自动组成相应的g,m,a等get变量;甚至另开其一个只能是cli模式访问文件
<code>//如果是CLI模式
if(php_sapi_name() === 'cli'){
  //检测CLI访问时没有带自定义参数;
  $path = isset($argv[1]) ? $argv[1] : '';
  $depr = '/';  
  if (!empty($path)) {
    $params = explode($depr , trim($path , $depr));
  }
  !empty($params) ? $_GET['g'] = array_shift($params) : "";
  !empty($params) ? $_GET['m'] = array_shift($params) : "";
  !empty($params) ? $_GET['a'] = array_shift($params) : "";
  if ($params and count($params) > 1) {
    // 解析剩余参数 并采用GET方式获取
    preg_replace('@(\w+),([^,\/]+)@e' , '$_GET[\'\\1\']="\\2";' , implode(',' , $params));
  }
 /*
   D:\wamp\www\sx>D:\wamp\bin\php\php5.3.8/php cli.php  group/module/action/a1/v1/a2/v2  
   Array
   (
       [g] => group
       [m] => module
       [a] => action
       [a1] => v1
       [a2] => v2
   )
  */
 
 // print_r($_GET);
 // die;
}</code>
ログイン後にコピー

PHP-CLI来写shell脚本

PHP与Linux命令交互的几个函数

exec

<code>string exec ( string $command [, array &$output [, int &$return_var ]] )

echo exec('mkdir -p zhouzhou/1/2/3/') ."\n"; //创建目录树

echo exec('ls -l',$fileList) ; //本句只能输出最后一条,但如果有第二个参数的话,就可以把输出的结果作为数组元素扔进去;

echo "<pre />";
print_r($fileList); //把所有ls -l的结果都给了$fileList;
echo "<pre />";
die;</code>
ログイン後にコピー

shell_exec

<code>string shell_exec ( string $cmd ) 

$fileList = shell_exec('ls -l'); //$fileList是一个string格式,就等于linux命令在终端输出的格式,保留了\s\n等换行符</code>
ログイン後にコピー

system

<code>string system ( string $command [, int &$return_var ] )

$fileList = system('ls -l') ; //本句只能输出最后一条,但如果有第二个参数的话,就可以把输出的结果作为数组元素扔进去;</code>
ログイン後にコピー

passthru

<code>void passthru ( string $command [, int &$return_var ] )

passthru('ls -l'); //直接执行并输出</code>
ログイン後にコピー

popen

<code>resource popen ( string $command , string $mode )
/*
返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgets() 和 fwrite()。 当模式为 'r',返回的文件指针等于命里的 STDOUT,当模式为 'w',返回的文件指针等于命令的 STDIN。

如果出错返回 FALSE。
 */

 $fp = popen('ls -l',"r");  //popen打一个进程通道  
 while (!feof($fp)) {  
   $out = fgets($fp, 4096);  
   echo  $out;   //输出的结果和passthru是一样的;不过要循环的取出来;
 }
 pclose($fp); </code>
ログイン後にコピー

proc_open

<code>resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )

$test = "ls";  
$array =   array(  
 array("pipe","r"),   //标准输入  
 array("pipe","w"),   //标准输出内容  
 array("pipe","w")    //标准输出错误  
 );  
  
$fp = proc_open($test,$array,$pipes);   //打开一个进程通道  
echo stream_get_contents($pipes[1]);    //为什么是$pipes[1],因为1是输出内容  
proc_close($fp); 

//类似 popen() 函数, 但是 proc_open() 提供了更加强大的控制程序执行的能力。</code>
ログイン後にコピー

以上就介绍了CURL与PHP-CLI的应用【CLI篇】,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles