php cli 参数?cli是守护进程的吗

bmyFD67bmjhk3周前 (04-24)众测1

一、Php***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程序

利用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命令在可以这个执行:

复制代码代码如下:D:\xamppphpphp.exe D:\xampphtdocstest.php

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

linux下php_cli使用

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

php安装在路径/usr/local/php/bin/php下

复制代码代码如下:/usr/local/php/bin/php/usr/local/apache/htdocs/a.php

就可以执行a。php文件

PHP_CLI编程需知

如何检测环境支持php_cli模式?

复制代码代码如下:

<?php

//方法1

if(PHP_SAPI==='cli')

{

//...

}

//方法2

if(php_sapi_name()==='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,0,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,0,1)=='-'){

if(substr($arg,2,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还有很多参数可以加入:具体可以参考:

关于定时执行

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据打开/etc/crontab,添加:

复制代码代码如下:

/usr/bin/php-f/data/htdocs/test.php

二、php是什么意思

php通常指超文本预处理器,用于面向对象、命令式编程,是一种通用开源脚本语言。

主要特点:

为开源性和免费性、快捷性、数据库连接的广泛性、面向过程和面向对象并用。优点是利于学习,使用广泛。此外,php还可以指菲律宾比索的标准货币代码符号,MPLS网络中的倒数第二跳弹出功能。是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP是一种HTML内嵌式的语言,是一种在服务器端执行嵌入HTML文档的脚本语言,语言风格有些类似于C语言,被广泛的运用。

简介:

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

特性包括:

1、PHP独特的语法混合了 C、Java、Perl以及 PHP自创新的语法

2、PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;PHP具有非常强大的功能,所有的CGI的功能PHP都能实现

3、 PHP支持几乎所有流行的数据库以及操作系统。

4、最重要的是PHP可以用C、C++进行程序的扩展!

语言特点:

开源免费

PHP是一个受众大并且拥有众多开发者的开源软件项目,Linux+ Nginx+ Mysql+ PHP是它的经典安装部署方式,相关的软件全部都是开源免费的,所以使用PHP可以节约大量的正版授权费用。不过PHP作为一个开源软件,它缺乏大型科技公司的支持背景,网络上对它的唱衰也是经久不衰,不过它的持续迭代和性能持续增强的现实却是鼓舞人心的,PHP社区用实际行动给予各种质疑强有力的回击。

快捷高效

PHP的内核是C语言编写的基础好效率高,可以用C语言开发高性能的扩展组件;PHP的核心包含了数量超过1000的内置函数,功能应有尽有很全面,开箱即用程序代码简洁; PHP数组支持动态扩容,支持以数字、字符串或者混合键名的关联数组,能大幅提高开发效率; PHP是一门弱类型语言,程序编译通过率高,相对其他强类型语言开发效率快;PHP天然热部署,在php-fpm运行模式下代码文件覆盖即完成热部署;PHP经过20多年的发展,在互联网上可以搜到海量的参考资料供参考学习。

性能提升

PHP版本越高它的整体性能越高,根据官方介绍,PHP7.0.0对比PHP5.6性能就提升了2倍,PHP7.4已经比PHP7.0快了约30%,PHP8.0在性能上又相对PHP7.4大约改进了10%。PHP 8.0引入了 JIT编译器特性,同时加入多种新的语言功能,例如命名参数、联合类型、注解、Constructor Property Promotion、match表达式、nullsafe运算符以及对类型系统、错误处理和一致性的改进。PHP拥有自己的核心开发团队,保持5年发布一个大版本、1个月发布2个小版本的频率,最新的版本是PHP8.08。

跨平台

每个平台都有对应的php解释器版本,指针对不同平台均编译出目标平台的二进制码(PHP解释器),php开发的程序可以不经修改运行在windows、linux、unix等多个操作系统上。

常驻内存

php-cli模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存实现资源复用,比较常用的做法是结合swoole组件编写cli框架。

页面生命周期

在php-fpm模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空,对程序员水平要求低,占用内存非常少,特别适合中小型系统的开发。

运行机制:

PHP常见的运行模式有2种,分别是php-fpm和php-cli。当PHP选择运行在php-fpm模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空。运行在php-cli模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存实现资源复用,性能可以得到很大的提升,php-cli开发比较复杂能但是能够获取更高的性能,对开发者的要求比较高需要比较高的开发水平,比较常用的模式是结合swoole组件编写cli框架,各种变量能保存在跨进程的高性能共享内存 Table,可以开发出支持热启动的php-cli可靠各类应用系统。

php-fpm在PHP 5.3.3版本成为了官方正式组件(2010-07-22),它提供了稳定可靠的进程管理服务,进程不足时候可以智能扩充数量,闲置时候可以自动回收销毁多余的进程,同时它对程序的容错能力很强大运行非常稳定,可以应付企业级的开发需求。php-fpm友好的完成了使用HTTP/HTTPS等TCP/IP互联网协议下进行的用户的输入输出,页面级生命周期各种资源用完即释放,不存在内存泄漏的问题。php-fpm也提供有一些常驻内存的技术支持,例如PHP 7.4引入的opcache.preload也能实现局部的PHP类和函数的常驻内存,不过这个方法不够灵活,和服务器配置捆绑的太死了。

php-cli因为能实现各类资源的常驻内存,所以可以资源复用,更高效完成多进程编程和异步编程,可以开发出负载能力更高的应用系统。但是相对php-fpm的简单编程开发,开发者要注意很多的事项和需要做很多附加的控制器开发,否则就无法实现期待中的高性能。

首先开发者需要去实现可靠的进程管理服务,保证系统进程遇到各类错误退出运行后能够自动创建新的进程,只有这样才能保证后续的服务请求有足够空闲进程可分配。每个业务代码段都要做异常处理,让进程遇到非致命错误时候不会退出,因为进程重启意味程序和各类资源需要再次加载,这个过程性能消耗不小,所以只有进程稳定运行了常驻内存才有意义。

其次因为常驻内存,编写的新的程序必须重启服务才能生效,这一点习惯了fpm模式的开发者会感到比较陌生。另外开发者需要手工释放内存,否则系统长时间运行后会出现内存泄露。同时在cli模式下,我们不能像fpm里直接用$_SERVER、$_POST、$_GET、$_COOKI和$_FILES进行编程工作,需要自己去解析各种互联网通讯协议完成用户的输入输出。要实现多进程编程利用多核CPU计算,还有学习使用pcntl和posix编程,这里涉及到了异步编程逻辑,这块难度还是比较大的。比较常用的模式是结合swoole组件编写cli框架。

PHP是一个活跃的社区开发语言,有专业的核心开发团队在持续不断的迭代,最近一个版本就是PHP 8.0.8引入了很多的新特性。

语言参考:

内置函数

PHP有很多标准的函数和结构。还有一些函数需要和特定的扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。例如,要使用 image函数中的 imagecreatetrue,需要在编译 PHP的时候加上 GD的支持。或者要使用 mysqli_connect函数,就需要在编译 PHP的时候加上 MySQLi支持。有很多核心函数已包含在每个版本的 PHP中如字符串和变量函数。调用 phpinfo或者 get_loaded_extensions可以得知 PHP加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。

静态网站与动态网站的区别

静态网站:web1.0时代

动态网站:web2.0时代

静态网站特点:

1、网页内容一经发布到网站服务器,无论是否有用户访问,每个静态页面的内容都是保存在网站服务器上的。也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件。

2、静态网页的内容相对稳定,因此容易被搜索引擎检索。

3、静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难。

4、静态网页的交互性较差,在功能方面有较大的限制。

动态网站特点:

1、交互性:网页会根据用户的要求和选择而动态地改变和响应,浏览器作为客户端,成为一个动态交流的桥梁,动态网页的交互性也是今后web发展的潮流。

2、自动更新:即无须手动更新HTML文档,便会自动生成新页面,可以大大节省工作量

3、因时因人而异:即当不同时间、不同用户访问同一网址时会出现不同页面。

动态网页是与静态网页相对应的,静态网页的后缀是以.htm,.html,.shtml,.xml,动态网页的后缀是以.asp,.jsp,.php,.perl, cgi等形式。在动态网页网址中有一个标志性的符号"?"

三、php swoole 只能运行在php-cli 环境吗

一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪Swoole是一个php的扩展,它的核心目的就是解决php在实现server服务中可能遇到的一系列问题,这些问题用源生的php往往并不能很高效(执行效率)的解决,一般也不会使用php来解决,所以会有说swolle重新定义的php的说法。

其实swoole也提供了一个框架,swoole framework是基于swoole extension设计的一个框架,要用好这个框架,还是要先了解swoole extension。

扩展的英文名称是Extension,php扩展是用C语言作为开发语言,基于Zend引擎提供的API,编译成的一个动态库。

如果曾经做过类似动态库调用开发的童鞋可能会更好理解一些,例如Android中的NDK开发在php的配置文件中配置好extension的属性后,就可以引用这个动态库了。

也就是说,swoole本身是用C语言编写的,它可以让php获得一些额外的function。

然后是运行方式,swoole的许多功能都只能运行在cli模式下,而cli模式往往是很多刚接触swoole的phper遇到的第一个问题。

有时候其实只是需要转变一下思路

我们现在整理一下最常见的php代码执行方式:

安装apache、php

配置apache对那个目录进行php解析

用浏览器访问那个目录的php文件

更多的细节这里就不提了,毕竟我相信每个phper对这个都是很熟悉的。

但这里就开始出现了第一个问题,我们知道,php是一个脚本语言,脚本语言的核心特点在于不用编译,随时执行,而执行脚本的工具就是解析器,而php的解析器就是zend引擎。

严格来说,zend并不是唯一的选择,不过,zend是最官方的。另外,Zend Studio和Zend Engine不是同一个东西,本文中的Zend全部指Zend Engine。

换个角度讲,只要有解析器,写好的php脚本就是可以执行的,而zend引擎与apache之间并没有绝对的关系实际上,apahce是调用了zend对php脚本进行执行,然后将执行结果输出给了浏览器所以所谓cli模式(CommandLine,命令行模式),其实就是在命令行下直接调用zend引擎对php脚本进行解析并执行,并获得程序输出结果的php脚本执行方式。

其实php也可以作为shell脚本来使用哦,就像bash shell一样既然问题讲清楚了,在一个系统中具体怎么操作呢?

本文以CentOS 7.5作为系统环境,swoole是针对linux系统开发的,windows下并不适用。学习swoole的一个前题是懂得基本的linux系统使用。

当安装好php的时候,找到php的安装目录,如果是默认安装的话,可以试试whereis命令#某种简单的方法

whereis php

>/usr/local/bin/php;

locate whereis find这些命令都可以试试,目的是找到php然后我们来写一个最经典的php脚本:

<?php

//vi hello_cli.php

echo'Hello PHP Cli';

编写纯php脚本时,php标签不要封口

然后我们在shell里执行它:

/usr/local/bin/php hello_cli.php

> Hello PHP Cli

这段代码中的第一个php,是一个可执行文件,它接受一个php脚本文件作为输入参数,并解析执行这个php脚本文件(通过zend)。

没有错,第一个cli模式下的php程序就被你执行成功了!

默认情况下,php都会被安装在了$PATH的目录下,那就可以直接省略路径前缀了,下文中调用php的时候,全都省略了路径前缀。

因为swoole是pecl的项目,所以使用pecl安装是最简单的方法,强烈推荐第一次接触的童鞋先使用pecl安装,在熟悉了swoole之后,再考虑使用编译安装的方式以获取更多进阶功能。

pecl这个工具基本都会被安装在与php相同的目录下(往往也都是$PATH目录)pecl install swoole

执行以下命令查看是否安装成功:

php-m| grep swoole

> swoole

如果正确的输出了swoole,那么恭喜你,这次安装很成功另一个常见的比较麻烦的问题是,有些童鞋的电脑里安装了多个php,而安装的时候没有正确的安装到预期的php的扩展目录中,就会导致无法正常工作,解决方案就是弄清楚各个php安装目录及配置关系,选择正确的目录进行安装。

其实本文还没正式开始介绍swoole,都是在学习swoole之前的准备工作,swoole的上手门槛比一般的php应用要高的多,如果没有网络开发和操作系统方面的一些知识,学习它并不是一件容易的事情,学习曲线很陡峭。

这句话我在群里说了无数次

很多新手会诟病swoole的手册写的太模糊,其实是前置知识不足,而手册也给出了需要的前置知识列表,以下引用至官网的手册-学习swoole需要哪些知识?

多进程/多线程

了解Linux操作系统进程和线程的概念

了解Linux进程/线程切换调度的基本知识

了解进程间通信的基本知识,如管道、UnixSocket、消息队列、共享内存socket

了解SOCKET的基本操作如accept/connect、send/recv、close、listen、bind了解SOCKET的接收缓存区、发送缓存区、阻塞/非阻塞、超时等概念IO复用

了解select/poll/epoll

了解基于select/epoll实现的事件循环,Reactor模型了解可读事件、可写事件

TCP/IP网络协议

了解TCP/IP协议

了解TCP、UDP传输协议

调试工具

使用gdb调试Linux程序

使用strace跟踪进程的系统调用

使用tcpdump跟踪网络通信过程

其他Linux系统工具,如ps、lsof、top、vmstat、netstat、sar、ss等学习并理解一个新事务并不是一个容易的事情,特别对于swoole这种具备一定颠覆性的工具,要有耐心和实践。

淡定的把手册看完,遇到不理解的名词学会使用搜索引擎学习,swoole的手册其实是个大宝库,网络开发常见的问题其实里边都涉及到了。

相关文章

做出防水11,100米的它,有哪些抢眼的新款

做出防水11,100米的它,有哪些抢眼的新款,一起来阅读精彩内容。有些表外观酷炫,辨识度很高。当然,喜不喜欢看个人。但起码这样的表能给你带来冲击力,看过以后难忘记。比如柏莱士(Bell & Ross)...

最喜欢的舞台永远在未来

最喜欢的舞台永远在未来,一起来阅读精彩内容。中新网北京8月23日电《Talkin’bout》发布的那天,力丸的最大感想是:现在可以安心睡觉了。在此之前,他紧张失眠了好几天,还专门去看了中医,医生告诉他...

最轻巧的真无线蓝牙耳机JEET AIR2听见

最轻巧的真无线蓝牙耳机JEET AIR2听见,一起来阅读精彩内容。JEET AIR2真无线蓝牙耳机,是我见过的最轻巧的TWS耳机。真无线TWS耳机新品JEET Air 2,看外观就很独特,重量3.4g...

最近火了一种鞋叫“勃肯鞋”,搭裙子也好、裤子也罢,洋气又保暖

最近火了一种鞋叫“勃肯鞋”,搭裙子也好、裤子也罢,洋气又保暖,一起来阅读精彩内容。时尚的快速发展,也意味着服装单品会层出不穷,当很多人认为鞋子不起眼的时候,它却在潜移默化的影响着你的风格走向。所以大家...

最近成都周边哪个小城最火那必须是郫都!

最近成都周边哪个小城最火那必须是郫都!,一起来阅读精彩内容。图源小红书:胖虎的小虎牙儿场馆外的萤火秘境内,还有一个名为三体宇宙的科幻装置,直接再现了《三体》中的名场面!图源小红书:是燃燃_在这里你还可...

总投资521亿元!东莞新增一批重大项目!

总投资521亿元!东莞新增一批重大项目!,一起来阅读精彩内容。·10月7日东莞市发展和改革局发布2023年第四批市重大项目增补计划的通知总投资高达521亿元!东莞市重大项目增加89项!按照《东莞市重大...