Application of Curl and Php-cli "CLI chapter"

Source: Internet
Author: User
Tags php cli

Common Application of the CLI

What is PHP-CLI

PHP-CLI is php Command Line Interface the abbreviation, that is, the PHP command line interface, under Windows and Linux are supported PHP-CLI mode;

Why to use PHP-CLI

    • Multithreaded applications
    • Execute PHP programs regularly
    • Develop desktop programs (use PHP-CLI and GTK packages to develop desktops, but no one will use PHP to write desktop programs)
    • Writing a shell script for PHP

Determine PHP operating mode

PHP runs much more than Apache and CLI, including: 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.

Php-cli built-in parameters

d:\wamp\bin\php\php5.3.8>php-helpusage:php [Options] [-f]
  
   [--]       [args ...] PHP [Options]-R
   [--] [args ...] PHP [Options] [-B  ]-R [-E  ] [--] [args ...] php [options] [-B  ]-F  [-E  ] [--] [args ...] php [options]--[args ...] php [options]-a-a Run interactively-c  |  Look for php.ini file in this directory-n No php.ini file'll be used-d Foo[=bar] Define INI entry foo with value ' Bar ' -e Generate extended information for debugger/profiler-f  Parse and Execute  . -H This help-i PHP information-l Syntax Check Only (lint)-M Show compiled in Modules-r Run PHPWithout using script tags -B  Run PHP  Before processing input lines-r Run PHPFor every input line-f  Parse and Execute  For every input line-e   Run PHP  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  Load Zend extension  . args ... Arguments passed to script. Use – args When first argument starts With-or script was read from stdin--ini Show configuration file names--rf name> Show information about function  .--RC  Show information about class  .--re  Show information about extension  .--ri  Show configuration for extension  .                         
  
    • 运行指定的php文件:
 
# php /var/www/html/test.phpthis is a php-cli [root@semple html]# php -f 'test.php'this is a php-cli
    • 在命令行直接运行 PHP 代码
D:\wamp\bin\php\php5.3.8>php -r "echo 'hello world';"hello world

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

    • 通过标准输入(stdin)提供需要运行的 PHP 代码
// ask for inputfwrite(STDOUT, "Enter your name: ");// get input$name = trim(fgets(STDIN));// write input backfwrite(STDOUT, "Hello, $name!");
D:\wamp\www>php test.phpEnter your name:D:\wamp\www>php test.phpEnter your name: zhouzhouHello, zhouzhou!

获取自定义参数

print_r($argv); //获取具体的参数;print_r($argc); //获取参数的数目;
D:\wamp\www>php test.php #本身执行的php文件就作为一个参数;Array( [0] => test.php)1D:\wamp\www>php test.php arg1 arg2 arg3 arg4Array( [0] => test.php [1] => arg1 [2] => arg2 [3] => arg3 [4] => arg4)5

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

 
D:\wamp\www>php test.php -g group -m module -a ageArray( [g] => group [m] => module [a] => age)

PHP-CLI在框架中的应用

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

    • 在CI框架中应用
# php /var/www/html/web2/index.php welcome test 这个是在ci里面执行的welcome控制器里面的test方法,后面的以此类推;

还可以代入变量

 
$ cd /path/to/project;$ php index.php tools message# Hello John Smith!。
    • 在TP框架中的应用
      在thinkphp中对CLI的支持并非很好,但我们可以通过$argv在框架运行之初就自动组成相应的g,m,a等get变量;甚至另开其一个只能是cli模式访问文件
//如果是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;}

PHP-CLI来写shell脚本

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

exec

string exec ( string $command [, array &$output [, int &$return_var ]] )echo exec('mkdir -p zhouzhou/1/2/3/') ."\n"; //创建目录树echo exec('ls -l',$fileList) ; //本句只能输出最后一条,但如果有第二个参数的话,就可以把输出的结果作为数组元素扔进去;echo "
";print_r($fileList); //把所有ls -l的结果都给了$fileList;echo "
";die;

shell_exec

string shell_exec ( string $cmd ) $fileList = shell_exec('ls -l'); //$fileList是一个string格式,就等于linux命令在终端输出的格式,保留了\s\n等换行符

system

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

passthru

void passthru ( string $command [, int &$return_var ] )passthru('ls -l'); //直接执行并输出

popen

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); 

proc_open

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() 提供了更加强大的控制程序执行的能力。

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

  • Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.