当前位置:首页 » 编程语言 » cli参数php

cli参数php

发布时间: 2025-03-28 01:40:50

linux服务器上运行php,除了PHP-FPM还有其他的方式吗

运行模式
关于PHP目前比较常见的五大运行模式:
1)CGI(通用网关接口/ Common Gateway Interface)
2)FastCGI(常驻型CGI / Long-Live CGI)
3)CLI(命令行运行 / Command Line Interface)
4)Web模块模式(Apache等Web服务器运行的模式)
5)ISAPI(Internet Server Application Program Interface)

备注:在PHP5.3以后,PHP不再有ISAPI模式,安装后也不再有php5isapi.dll这个文件。要在IIS6上使用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。

1.1、CGI模式
CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和Web服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。CGI已经是比较老的模式了,这几年都很少用了。
每有一个用户请求,都会先要创建CGI的子进程,然后处理请求,处理完后结束这个子进程,这就是Fork-And-Execute模式。 当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。所以用CGI方式的服务器有多少连接请求就会有多少CGI子进程,子进程反复加载是CGI性能低下的主要原因。
如果不想把 PHP 嵌入到服务器端软件(如 Apache)作为一个模块安装的话,可以选择以 CGI 的模式安装。或者把 PHP 用于不同的 CGI 封装以便为代码创建安全的 chroot 和 setuid 环境。这样每个客户机请求一个PHP文件,Web服务器就调用php.exe(win下是php.exe,linux是php)去解释这个文件,然后再把解释的结果以网页的形式返回给客户机。 这种安装方式通常会把 PHP 的可执行文件安装到 web 服务器的 cgi-bin 目录。CERT 建议书 CA-96.11 建议不要把任何的解释器放到 cgi-bin 目录。 这种方式的好处是把Web Server和具体的程序处理独立开来,结构清晰,可控性强,同时缺点就是如果在高访问需求的情况下,CGI的进程Fork就会成为很大的服务器负担,想 象一下数百个并发请求导致服务器Fork出数百个进程就明白了。这也是为什么CGI一直背负性能低下,高资源消耗的恶名的原因。

1.2、FastCGI模式
FastCGI是CGI的升级版本,FastCGI像是一个常驻 (long-live)型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 Fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

【原理】
1)Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Mole);
2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (可见多个php-cgi.exe或php-cig)并等待来自Web Server的连接;
3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi;
4)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。在正常的CGI模式中,php-cgi.exe在此便退出了。
在CGI模式中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

备注:PHP的FastCGI进程管理器是PHP-FPM(PHP-FastCGI Process Manager)
【优点】
1)从稳定性上看,FastCGI是以独立的进程池来运行CGI,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑;
2)从安全性上看,FastCGI支持分布式运算。FastCGI和宿主的Server完全独立,FastCGI怎么down也不会把Server搞垮;
3)从性能上看,FastCGI把动态逻辑的处理从Server中分离出来,大负荷的IO处理还是留给宿主Server,这样宿主Server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分,大量的是图片等静态。

【缺点】
说完了好处,也来说说缺点。从我的实际使用来看,用FastCGI模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio调试程序时,由于 FastCGI会认为 PHP进程超时,从而在页面返回 500错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI模式。对某些服务器的新版本支持不好,对分布式负载均衡没要求的模块化安装是否是更好的选择。目前的FastCGI和Server沟通还不够智能,一个FastCGI进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦,这样做也使得FastCGI无法允许联机调试。因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

1.3 CLI模式
PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。 也就是说,PHP不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI Shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的。
【优点】
1)使用多进程,子进程结束以后,内核会负责回收资源;
2)使用多进程,子进程异常退出不会导致整个进程Thread退出,父进程还有机会重建流程;
3)一个常驻主进程,只负责任务分发,逻辑更清楚。
我们在Linux下经常使用"php –m"查找PHP安装了那些扩展就是PHP命令行运行模式;有兴趣的同学可以输入"php –h"去深入研究该运行模式。

1.4 模块模式
模块模式是以mod_php5模块的形式集成,此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求,然后将处理后的结果返回给Apache。如果我们在Apache启动前在其配置文件中配置好了PHP模块
(mod_php5), PHP模块通过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。
除了这种启动时的加载方式,Apache的模块可以在运行的时候动态装载,这意味着对服务器可以进行功能扩展而不需要重新对源代码进行编译,甚至根本不需要停止服务器。我们所需要做的仅仅是给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器重新载入模块。但是在动态加载之前,我们需要将模块编译成为动态链接库。此时的动态加载就是加载动态链接库。 Apache中对动态链接库的处理是通过模块mod_so来完成的,因此mod_so模块不能被动态加载,它只能被静态编译进Apache的核心。这意味着它是随着Apache一起启动的。
Apache是如何加载模块的呢?我们以前面提到的mod_php5模块为例。首先我们需要在Apache的配置文件httpd.conf中添加一行:
LoadMole php5_mole moles/mod_php5.so

这里我们使用了LoadMole命令,该命令的第一个参数是模块的名称,名称可以在模块实现的源码中找到。第二个选项是该模块所处的路径。如果需要在服务器运行时加载模块,可以通过发送信号HUP或者AP_SIG_GRACEFUL给服务器,一旦接受到该信号,Apache将重新装载模块,而不需要重新启动服务器。
该运行模式是我们以前在windows环境下使用apache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。(它是apache在CGI的基础上进行的一种扩展,加快PHP的运行效率)。

1.5 ISAPI模式
ISAPI(Internet Server Application Program Interface)是微软提供的一套面向Internet服务的API接口,一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显着高于CGI。(由于微软的排他性,只能运行于windows环境)
PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

㈡ php配置环境变量(php的环境)

如何让PHP能够读取系统环境变量

一般情况下,都能实现显示phpinfo()的页面。就从能够显示该页面之后出现的问题说起。php的问题都会显示在phpinfo()页面上。首先查看自己的php.ini的路径是否正确。Q:我已经配置了php.ini文件,但重新启动服务器后为什么没有任何效果?A:这个问题主要有这几种情况。第一个原因是由于系统所读取的php.ini文件与你当时修改的php.ini文件不一致造成的1、可以通过phpinfo()的ConfigurationFile(php.ini)Path选项查看当前PHP服务器读取的是哪一个php.ini2、如果你要更改php.ini的文件存取位置,可参考php.ini的搜索顺序,如下所示:a)SAPI模块所指定的位置(Apache2中的PHPIniDir指令,CGI和CLI中的-c命令行选项,NSAPI中的php_ini参数,THTTPD中的PHP_INI_PATH环境变量)b)HKEY_LOCAL_MACHINESOFTWAREPHPIniFilePath(Windows注册表位置)c)PHPRC环境变量d)当前工作目录(对于CLI)e)web服务器目录(对于SAPI模块)或PHP所在目录(Windows下其它情况)f)Windows目录(C:windows或C:winnt),或--with-config-file-path编译时选项指定的位置3、一般做法:通过设置PHPRC环境变量,a)操作:右击我的电脑-属性-高级-环境变量b)在系统变量下新建一个“变量名为PHPRC,变量值为你的php.ini文件所地文件路径”的环境变量第二个原因是:PHP没有找到相应的扩展库1、查看PHP找到的扩展库位置:在phpinfo()的extension_dir选项可以看到2、在php.ini更改extension_dir文件第三个原因:没有完全重启IIS1、对php.ini的修改必须完全重启IIS才能起作用,而不能只是对当前站点进行重启。2、进入cmd,停止服务器:netstopiisadmin;启动服务器:netstartw3svcQ:我的PHP怎么没有办法激活Mysql扩展库A:在PHP5.0以上版本,MySQL默认未启用,因此需要咱们进行手工激活。1、在PHP运行MySql,必须在php.ini中激活php_mysql.dll动态连接库,另外还需要访问MySQL客户端连接库即libmysql.dll文件2、可以通过php.ini中的extension激活php_mysql.dll动态连接库;而libmysql.dll文件必须放在Windows的系统路径PATH才能访问,可以通过把libmysql.dll复制到system32目录下,也可以在PATH环境变量中新增一个路径。3、建议做法:通过设置PATH,方便以后的php升级,在系统环境变量中的PATH后增加“libmysql.dll”所在的文件夹即可。记得通过“;”号隔开4、[案例]最近,服务器总是找不到MySql扩展库,导致程序无法运行。因此,把所有文件删除后重新配置PHP服务器。但最后在安装MySql的时候,却始终无法激活MySql扩展库。在phpinfo()中找到的信息如下:PATH:c:phpPHPRC:C:phpextension_dir:c:phpext另外,我测试了将其它的库激活,如msql、gd2、xml,在phpinfo()都可以正常显示证明PHP能找到php_mysql.dll动态连接库,而MySql的运行的另一个条件是能够讯问MySQL客户端连接库即libmysql.dll文件,看来问题就在这里了。我对C盘搜索libmysql.dll文件,发现在system32和php文件夹各有一个文件,做好备份后,我尝试删除system32的libmysql.dll文件,发现被锁死,无法删除,却可以重新命名,我随便修改了名称,再重新启动IIS,服务器运行正常。补充一点:如果ConfigurationFile(php.ini)Path显示为C:Windows就说明,php.ini文件没有读取到。另外,我发现,在用IIS整合php时,有两种方式:ISAPI与CGI模式这两种方式,我们都可以看到phpinfo页面但是使用ISAPI模式,无法读取环境变量,所以通过环境变量PHPRC设置的php.ini路径无法找到。使用CGI就可以,这样就不必把好多文件拷到系统文件下。

php扩展在全局变量中不存在但是打印phpinfo却存在?

说明:我本地装的php集成环境MAMPPRO

最近遇到一个比较奇怪的问题,在本地搭建了PHP运行环境,并且安装了相应的PHP扩展并且在测试页面中通过打印phpinfo能看到所安装的扩展是正常的,但是php-m|grepswoole没有显示swoole已经配好了php环境变量

装好了php,php一些常用的扩展后就开始配置php系统环境变量,因为我用的macbookpro所以配置命令如下

查看环境变量是否OK

以为一切OK的我想试试swoole的性能是否真有官网说的那么厉害于是就准备了一段测试脚本

测试脚本

终端执行

然后奇怪的是swoole的http服务并没有起来????

然后查看php错误日志惊奇!

确定浏览器打印的phpinfo是有swoole扩展的,而且终端的php跟界面的php是同一个版本的php百思不解然后我在终端

结果很意外终端里面找不到swoole扩展!!!可是浏览器里打印有的啊而且是同一个PHP版本??奇怪了

然后在终端执行php-i这个是在终端打印phpinfo

然后对比这个

终端打印phpinfo

浏览器打印phpinfo

是同一个PHP没错了。。。

然后再对比php.ini引用路径

终端的:

浏览器的

终于找到原因了两个地方引用的php.ini不一样于是在终端引用的php.ini同样加上extension=swoole.so即可

MacM1安装php开发环境

去年年底,苹果推出了新款的M1芯片的mac,最近刚好要换电脑,考虑对比再三,还是选择了M1芯片的mac;刚拿到手以后,担心会有软件不兼容啥的,网上也推荐作为主力开发的笔记本的话,不推荐M1,但是现在已经完全配置好了开发环境,安全下车了。下面就来简单介绍下安装过程中的步骤:

注意:如果没有安装brew,需要先安装brew,使用arch-arm64brewinstall安装

首先搜索是否包含想要安装的mysql版本,如下图:

此处选择[email protected]这个版本,我本地已经安装完成了

安装完成后,需要添加环境变量,这样才能在任何目录下面直接打mysql访问

先查询有哪些php的版本,之前看网上说的M1,目前还不支持php7.3以下的版本,所有我安装了php7.4

等待安装完成后,可以开始部署项目了,由于我的项目是thinkphp框架开发的,而且用到了redis,所以,这边需要先安装redis依赖

安装phpredis依赖(此处使用pecl安装,网上有很多使用编译安装的方法,那种方法比较麻烦,而且需要配置的地方比较多,pecl安装的话,快捷方便)

这个安装完成后,就只需要去nginx目录下面配置项目文件就OK了。

其他的不多说,主要提一点,就是thinkphp框架,重定向那边的配置,location里面的配置需要修改下,如下图:

修改完成后,重启服务器,还要重启php-fpm,这个是关键

php服务器变量$_SERVER服务器环境变量$_ENV

PHP?$_SERVER变量

$_SERVER是一个包含诸如头信息(header)、路径(path)和脚本位置(scriptlocations)的数组。它是PHP中一个超级全局变量,我们可以在PHP程序的任何地方直接访问它。

$_SERVER包含着众多的信息,你可以尝试直接打印它:

print_r($_SERVER);

$_SERVER数组元素

更多情况下,我们只需要$_SERVER数组中的某些元素(数组单元)。$_SERVER数组包含的元素如下:

页面程序相关

$_SERVER[‘PHP_SELF’]:相对于网站根目录的路径及PHP程序名称,与documentroot相关。

$_SERVER[‘HTTP_REFERER’]:链接到当前页面的前一页面的URL地址。

$_SERVER[‘SCRIPT_NAME’]:相对于网站根目录的路径及PHP程序文件名称。

$_SERVER[‘REQUEST_URI’]:访问此页面所需的URI。

$_SERVER[‘SCRIPT_FILENAME’]:当前运行PHP程序的绝对路径及文件名。

$_SERVER[‘PATH_TRANSLATED’]:当前PHP程序所在文件系统(不是文档根目录)的基本路径。

$_SERVER[‘QUERY_STRING’]:查询(query)的字符串(URL中第一个问号?之后的内容但不包括#后面的内容)。

$_SERVER[‘argv’]:传递给当前PHP程序的参数。

$_SERVER[‘argc’]:命令行模式下,包含传递给程序的命令行参数的个数。

$_SERVER[‘REQUEST_TIME’]:请求开始时的时间戳,从PHP5.1.0起有效。

$_SERVER[‘REQUEST_METHOD’]:访问页面时的请求方法,例如:“GET”、“HEAD”,“POST”或“PUT”。

$_SERVER[‘HTTP_ACCEPT’]:当前请求的Accept:头信息的内容。

$_SERVER[‘HTTP_ACCEPT_CHARSET’]:当前请求的Accept-Charset:头信息的内容。例如:“iso-8859-1,*,utf-8”。

$_SERVER[‘HTTP_ACCEPT_ENCODING’]:当前请求的Accept-Encoding:头信息的内容。例如:“gzip”。

$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]:当前请求的Accept-Language:头信息的内容。例如:“zh-cn”。

$_SERVER[‘HTTP_CONNECTION’]:当前请求的Connection:头信息的内容。例如:“Keep-Alive”。

$_SERVER[‘HTTP_HOST’]:当前请求的Host:头信息的内容。

$_SERVER[‘HTTPS’]:如果PHP程序是通过HTTPS协议被访问,则被设为一个非空的值。

$_SERVER[‘PHP_AUTH_DIGEST’]:当作为Apache模块运行时,进行HTTPDigest认证的过程中,此变量被设置成客户端发送的“Authorization”HTTP头内容(以便作进一步的认证操作)。

$_SERVER[‘PHP_AUTH_USER’]:当PHP运行在Apache或IIS(PHP5是ISAPI)模块方式下,并且正在使用HTTP认证功能,这个变量便是用户输入的用户名。

$_SERVER[‘PHP_AUTH_PW’]:当PHP运行在Apache或IIS(PHP5是ISAPI)模块方式下,并且正在使用HTTP认证功能,这个变量便是用户输入的密码。

$_SERVER[‘AUTH_TYPE’]:当PHP运行在Apache模块方式下,并且正在使用HTTP认证功能,这个变量便是认证的类型。

服务器端相关

$_SERVER[‘DOCUMENT_ROOT’]:当前运行PHP程序所在的文档根目录,在服务器配置文件中定义。

$_SERVER[‘GATEWAY_INTERFACE’]:服务器使用的CGI规范的版本,例如:“CGI/1.1”。

$_SERVER[‘SERVER_ADDR’]:当前运行PHP程序所在的服务器的IP地址。

$_SERVER[‘SERVER_NAME’]:当前运行PHP程序所在的服务器的名称。

$_SERVER[‘SERVER_ADMIN’]:Apache服务器配置文件中的SERVER_ADMIN参数。

$_SERVER[‘SERVER_PORT’]:服务器所使用的端口。如果使用SSL安全连接,则这个值为用户设置的HTTP端口。

$_SERVER[‘SERVER_SIGNATURE’]:包含服务器版本和虚拟主机名的字符串。

$_SERVER[‘SERVER_SOFTWARE’]:服务器标识的字串,在响应请求时的头信息中给出。

$_SERVER[‘SERVER_PROTOCOL’]:请求页面时通信协议的名称和版本,例如:“HTTP/1.0”。

其他杂项

$_SERVER[‘HTTP_USER_AGENT’]:当前请求的User-Agent:头信息的内容,该字符串表明了访问该页面的用户代理的信息。

$_SERVER[‘REMOTE_ADDR’]:正在浏览当前页面用户的IP地址。

$_SERVER[‘REMOTE_HOST’]:正在浏览当前页面用户的主机名。

$_SERVER[‘REMOTE_PORT’]:用户连接到服务器时所使用的端口。

注意,如果以命令行方式运行PHP,上面列出的元素几乎没有有效的(或是没有任何实际意义的)。

PHP$_ENV变量

$_ENV是一个包含服务器端环境变量的数组。它是PHP中一个超级全局变量,我们可以在PHP程序的任何地方直接访问它。

$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素,你可以尝试直接打印它:

print_r($_ENV);

限于篇幅,在此不再列出打印的结果,且不同的服务器上,打印出的结果可能是完全不同的。

$_ENV数组元素

$_ENV数组中的元素(数组单元)随服务器环境不同而有较大差异,所以无法像?$_SERVER?那样列出完整的列表。以下是$_ENV数组包含的比较通用的元素:

$_SERVER[‘PATH’]:环境变量PATH路径。

$_SERVER[‘CLASSPATH’]:系统CLASSPATH路径。

$_SERVER[‘LIB’]:系统LIB库路径。

$_SERVER[‘INCLUDE’]:系统Include路径,注意与PHP的包含路径是不一样的。

$_SERVER[‘OS’]:操作系统类型。

$_SERVER[‘LANG’]:系统语言,如en_US或zh_CN。

$_SERVER[‘PWD’]:当前工作目录。

$_SERVER[‘TEMP’]:系统TEMP路径。

$_SERVER[‘AP_PARENT_PID’]:当前进程ID号。

$_SERVER[‘NUMBER_OF_PROCESSORS’]:系统CPU数目。

$_ENV为空的原因及解决办法

如果打印输出$_ENV为空,可以检查一下php.ini的配置:

variables_order="EGPCS"

上述配置表示PHP接受的外部变量来源及顺序,EGPCS是Environment、Get、Post、Cookies和Server的缩写。如果variables_order的配置中缺少E,则PHP无法接受环境变量,那么$_ENV也就为空了。

如何创建phpinfo查看php信息

1、方法一:

命令行查询,如果已经配置好环境变量,直接在命令行中输入php-v,将会显示php的版本信息。如果没有配置环境变量,直接在命令行中进入到php的安装目录后,再输入命令php-v,在安装目录下输入查询命令,可以看到输出的版本信息为PHP5.3.29。

2、方法二:

(1)使用预定义常量PHP_VERSION查询,新建一个php文件,在里面输入?php???echoPHP_VERSION;?。

(2)在浏览器中输出对应的网址,就可以查看到php的版本信息。

3、方法三:

(1)使用phpversion()函数查询,新建一个php文件,在文件中输入?php???echophpversion();?即可。

(2)在浏览器中访问,可以看到浏览器页面上返回的php版本信息,跟预定义常量PHP_VERSION显示效果一样。

4、方法四:

(1)使用phpinfo()函数查询,新建一个php文件,在文件中输入?php???echophpinfo();?即可。

(2)在浏览器中访问,可以看到不仅可以看到PHP的版本信息,还能看到其它很多关于PHP的信息。

㈢ PHP CLI模式开发详解

PHP CLI模式开发是一种无需Web服务器的运行方式,适用于各种场合。CLI模式有以下两种运行方式:

1. **使用脚本路径调用PHP CLI解释器**,通过命令行指定路径,如`# php /path/to/yourFile.php`,并传递参数。此方法需明确PHP解释器的位置。

2. **为文件设置可执行权限**,在UNIX/Linux环境执行`chmod +x`,将PHP文件设置为可执行。在脚本头部添加`#! /usr/bin/php`或类似声明,并在命令行直接执行。

在CLI模式下,可以从`$_SERVER['argv']`和`$_SERVER['argc']`获取命令行参数。例如,创建文件`cliPHP1.php`,实现读取参数功能。

在处理输入输出时,CLI遵循UNIX系统设计,使用三个文件句柄:`STDIN`、`STDOUT`和`STDERR`。通过这些句柄,可以实现与用户的交互,如输出到屏幕或重定向到文件。例如,将脚本输出重定向到文件或使用管道`|`将输出传递给另一个命令。

`nohup`命令用于在后台运行CLI脚本,即使退出当前会话也能持续运行。使用`nohup`命令并添加文件名作为输出重定向,脚本执行的结果将保存至指定文件,如`log.txt`。使用`tail`命令实时查看文件内容。

实现一个持续生成静态HTML文件的脚本(`cliPHP3.php`)。

更多关于PHP CLI模式开发的知识,包括进阶文档、架构视频、精彩文章等资源,可通过关注公众号:PHP开源社区,或访问相关链接获取。

㈣ 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的cli还有很多参数可以加入:具体可以参考:http://php.net/manual/en/features.commandline.php

关于定时执行
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据 打开/etc/crontab,添加:
复制代码 代码如下:
/usr/bin/php -f /data/htdocs/test.php

热点内容
编程猫工作太累 发布:2025-03-31 04:17:11 浏览:118
jedis存储list 发布:2025-03-31 04:15:25 浏览:322
少儿编程机器人培训机构哪个好 发布:2025-03-31 03:52:48 浏览:931
安卓平板有什么好用的剪辑软件 发布:2025-03-31 03:50:30 浏览:868
迅雷上传0 发布:2025-03-31 03:48:59 浏览:15
打印机服务器IP变更时重连打印机 发布:2025-03-31 03:48:16 浏览:363
血凝块存储 发布:2025-03-31 03:29:08 浏览:955
c语言数字大小排序 发布:2025-03-31 03:09:28 浏览:66
python3安装redis 发布:2025-03-31 03:07:19 浏览:408
星支付什么时候适配安卓11 发布:2025-03-31 03:07:19 浏览:150