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:xamppPHP在dos命令在可以这个执行:
代码如下:
就可以执行test.PHP这个文件了 。这里推荐win平台下xampp集成环境,真正比wamp强大N倍,这个集成包可以直接进入dos模式。 linux下PHP_cli使用 首先找到你安装PHP的路径,以我为例:
PHP安装在路径/usr/local/PHP/bin/PHP下
代码如下:
就可以执行a。PHP文件 PHP_CLI编程需知 如何检测环境支持PHP_cli模式?
代码如下:
PHP_ClI如何接收参数? 默认情况下/usr/local/PHP/bin/PHP接收参数是$argv,这个变量是固定的!在PHP文件中var_dump($argv); 得到下面结果:
函数把这个方式转化为大家常用的GET/post的参数模式。 简单代码:
代码如下:
PHP
function parseArgs($argv){
array_shift($argv);
$out = array();
foreach ($argv as $arg){
if (substr($arg,2) == '--'){
$eqPos = strpos($arg,'=');
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,1) == '-'){
if (substr($arg,1) == '='){
$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;
执行结果: function parseArgs($argv){
array_shift($argv);
$out = array();
foreach ($argv as $arg){
if (substr($arg,2) == '--'){
$eqPos = strpos($arg,'=');
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,1) == '-'){
if (substr($arg,1) == '='){
$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还有很多参数可以加入:具体可以参考:http://PHP.net/manual/en/features.commandline.PHP 关于定时执行
代码如下:
关于corntab的详细使用参考51cto专题:Linux计划任务——cron服务 本文参考资料 //www.jb51.cc/article/1716.htm
//www.jb51.cc/article/37804.htm
//www.jb51.cc/article/37796.htm 附注:2012-06-16 增加PHP_cli编程需知等 原文链接:https://www.f2er.com/php/26497.html