您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

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

2024/4/25 7:45:44发布4次查看
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    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    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服务
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录