php-cli模式学习(PHP命令行模式)

之前知道php—cli模式是一种类似shell命令式的执行php程序,不过一直以为这个是一种落后的方式,应该没有什么意义,因为从没有遇到过使用这个cli模式编程的。不过今天遇到了使用cli模式的应用。
php_cli模式简介

php- cli是php Command Line Interface的简称,如同它名字的意思,就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(php-cgi, isapi等) 也就是说,php不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端!——注:windows和linux下都支持 php_cli模式
PHP-cli应用场景:
1.多线程应用

这方面的好处,引用鸟哥的话:

优点: 1. 使用多进程, 子进程结束以后, 内核会负责回收资源

2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.

3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚.

php 的多线程—没错就是php多线程应用,虽然大家都普遍认为php没有多线程(curl属于模拟多线程而不是真实的),但是在php_cli模式下的php 彻底的是属于多线程。这个时候php属于linux的一个守护进程。 在本人之前写过的《PHP多线程批量采集下载美女图片(续)》的时候在采集程序里虽然使用curl来模拟多线程,但是在浏览器执行的时候也是会遇到执行超 时或内存abort而导致程序中断,(要尝试几次才可以彻底成功),但是如果在php-cli模式下执行,你就会发现这个程序执行的很快,php多线程执 行的优势被彻底表现出来了.

备注:这种多线程方式不是很成熟,不适合大规模的生成应用,偶尔使用还是可以的
2.定时执行php程序

之前本人总结关于《PHP定时执行计划任务》的三种方式,利用有一张就是利用linux的cron方式,那么这个方式是如何定时执行php程序?请看下文
3.开发桌面程序

你 可以做您的Windows或Linux中使用PHP的图形用户界面(GUI)应用!所有你需要的是PHP的命令行接口和一包GTK。这将允许建立真正的便 携式图形用户界面应用程序(呵呵,之前只是知道php可以做桌面程序,现在才知道是使用php_cli模式),并且不需要学习别的。
4.编写PHP的shell脚本

如果你不会bash shell或者Perl等的使用,但是你又需要一些脚本去执行的时候,怎么办?这个时候你完全可以使用你熟悉的php编写shell脚本,这个时候你是不是突然感觉PHP是不是太强大了!—–真正做到一种语言,到处开发!
PHP_CLI使用方法
win下面的执行方法:

假设php.exe 在D:\xampp\php在dos命令在可以这个执行:
1    D:\xampp\php\php.exe  D:\xampp\htdocs\test.php

就可以执行test.php这个文件了 。这里推荐win平台下xampp集成环境,真正比wamp强大N倍,这个集成包可以直接进入dos模式。
linux下php_cli使用

首先找到你安装php的路径,以我为例:

image

php安装在路径/usr/local/php/bin/php下
1    /usr/local/php/bin/php /usr/local/apache/htdocs/a.php

就可以执行a。php文件
PHP_CLI编程需知
如何检测环境支持php_cli模式?
1    <?php
2    //方法1
3    if (PHP_SAPI === 'cli')
4    {
5       // ...
6    }
7    //方法2
8    if (php_sapi_name() === 'cli')
9    {
10       // ...
11    }
 
PHP_ClI如何接收参数?

默认情况下/usr/local/php/bin/php接收参数是$argv,这个变量是固定的!在php文件中var_dump($argv);

得到下面结果:

image

可以写个简单的处理函数把这个方式转化为大家常用的GET/post的参数模式。

简单代码:
1    <?php
2    
3    function parseArgs($argv){
4        array_shift($argv);
5        $out = array();
6        foreach ($argv as $arg){
7            if (substr($arg,0,2) == '--'){
8                $eqPos = strpos($arg,'=');
9                if ($eqPos === false){
10                    $key = substr($arg,2);
11                    $out[$key] = isset($out[$key]) ? $out[$key] : true;
12                } else {
13                    $key = substr($arg,2,$eqPos-2);
14                    $out[$key] = substr($arg,$eqPos+1);
15                }
16            } else if (substr($arg,0,1) == '-'){
17                if (substr($arg,2,1) == '='){
18                    $key = substr($arg,1,1);
19                    $out[$key] = substr($arg,3);
20                } else {
21                    $chars = str_split(substr($arg,1));
22                    foreach ($chars as $char){
23                        $key = $char;
24                        $out[$key] = isset($out[$key]) ? $out[$key] : true;
25                    }
26                }
27            } else {
28                $out[] = $arg;
29            }
30        }
31        return $out;
32    }
33    var_dump($argv);
34    var_dump(parseArgs($argv));exit;

执行结果:

image

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

例外关于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服务

转载于:https://www.cnblogs.com/phpdragon/archive/2013/03/21/2972370.html

(转)php-cli模式学习(PHP命令行模式)相关推荐

  1. php mysql 命令行模式_PHP 的命令行模式

    从版本 4.3.0 开始,PHP 提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Comm ...

  2. liunx从界面模式改到命令行模式

    在工作中,我们大部分都是在黑屏情况下操作的,但有时我们也许会用到界面化操作,这时候就需要知道如何进行命令行到图形化界面的切换: 在可视化界面中打开终端,在root用户下输入init 3 可以看到修改成 ...

  3. mysql命令创建模式_mysql在命令行模式下创建数据库时要显式指定字符集

    关于log4j的讨论 1.LoggersLoggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < ...

  4. python命令行运行模式_[Python] 命令行模式阅读博客园的博文

    1 #-*- coding:UTF-8 -*- 2 importrequests3 from lxml importetree4 importsys5 importio6 importos7 8 9 ...

  5. uboot流程——命令行模式以及命令处理介绍

    [uboot] (第六章)uboot流程--命令行模式以及命令处理介绍 2016年11月14日 20:39:26 阅读数:4323 以下例子都以project X项目tiny210(s5pv210平台 ...

  6. python命令行模式和交互模式区别_对命令行模式与python交互模式介绍

    命令行模式与python交互模式 1.在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执 行 python hello.py 运行一个.py 文件. 2.在 Python ...

  7. Ubuntu18.04进入命令行模式和recovery-mode安装软件

    如果不小心删除Ubuntu的桌面程序,那么很有可能进入不了图形化界面,所以需要借助命令行模式或者recovery-mode来解决,如果这时候在外面出差,身边又没有网线,那就悲剧了....0.首先设置r ...

  8. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  9. oracle cmd导出数据库命令行,oracle 中数据库完全导入导出:cmd命令行模式(转载)...

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...

最新文章

  1. 转载非原创:修改BB 的内容,回车后修改CC 的值
  2. scss安装_安装了这9个免费PS插件后,终于能正常时间下班了……
  3. vs2010常用快捷键
  4. 对Dev的GridControl/GridView控件进行分组并展开操作
  5. Android按比例布局之layout_weight和weightSum的使用
  6. 你不知道的 Chrome DevTools 玩法
  7. 前端学习(2866):vue3数据劫持解析1
  8. elm的 java包_Elm架构
  9. c#基础传智播客学习截图
  10. 创建xhr对象实现浏览器全兼容
  11. 关于 Sensor flicker/banding现象的解释
  12. jzoj3395 Freda的传呼机
  13. java中计算三角形的角度
  14. 安装maskrcnn-banchmark时遇到的“AT_CHECK“ is undefined错误
  15. Javaweb-01.html和css
  16. 6.087 Practical Programming in C, lec10
  17. 伽利略或洛伦兹变换不适用于波动
  18. 肇庆高考成绩查询2021,2021肇庆市地区高考成绩排名查询,肇庆市高考各高中成绩喜报榜单...
  19. 为什么面试官对“我不会我可以学”不买账?
  20. mac上使用FFmpeg工具处理音视频

热门文章

  1. QT导入libcurl
  2. 仪表自定义刻度值_史上最全的仪表选型,就差你还没看了
  3. python实现udp聊天室_python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序...
  4. VC的若干实用小技巧
  5. 数学之美 系列七 -- 信息论在信息处理中的应用
  6. 数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)
  7. 文本分类入门(四)训练Part 1
  8. 一些自己关注的人工智能杂志(注意:这里所列的影响因子是08年的IF)
  9. 荒岛野人[exgcd]
  10. adsl服务器客户端配置cisco_windows下,Kiwi_Syslog日志服务器的搭建