php-cli是php command line interface的简称,如同它名字的意思,就是php在命令行运行的接口,区别于在web服务器上运行的php环境(php-cgi, isapi等) 也就是说,php不单可以写前台网页,它还可以用来写后台的程序。 php的cli shell脚本适用于所有的php优势,使创建要么支持脚本或系统甚至与gui应用程序的服务端!——注:windows和linux下都支持php_cli模式
php-cli应用场景:
cli模式的业务场景:定时任务,有数据同步,数据处理,多线程,进程通信,共享内存都要使用cli
1.多线程应用
1. 使用多进程, 子进程结束以后, 内核会负责回收资源
2. 使用多进程,子进程异常退出不会导致整个进程thread退出. 父进程还有机会重建流程
3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚
4.虽然大家都普遍认为php没有多线程(curl属于模拟多线程而不是真实的),但是在php_cli模式下的php彻底的是属于多线程。这个时候php属于linux的一个守护进程。
2.定时执行php程序
利用linux的cron方式,cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业
3.开发桌面程序
你可以做您的windows或linux中使用php的图形用户界面(gui)应用!所有你需要的是php的命令行接口和一包gtk。这将允许建立真正的便携式图形用户界面应用程序(呵呵,之前只是知道php可以做桌面程序,现在才知道是使用php_cli模式),并且不需要学习别的。
4.编写php的shell脚本
如果你不会bash shell或者perl等的使用,但是你又需要一些脚本去执行的时候,怎么办?这个时候你完全可以使用你熟悉的php编写shell脚本,这个时候你是不是突然感觉php是不是太强大了!
php cli的安装
php cli可以从php官网下载并安装。在安装完成后,需要配置环境变量,以在任何地方运行php命令行。
在windows系统下执行下列步骤:
- 下载并安装php
- 将php的安装目录添加到环境变量path中
- 打开终端(cmd.exe),输入php -v,确认已经安装并正确配置了环境变量
在linux或macos系统下,可以通过命令行指令安装php:
- ubuntu/debian系统:
sudo apt-get install php-cli
- centos/rhel系统:
sudo yum install php-cli
- macos系统(通过brew包管理器):
brew install php
php-cli技巧要点
运行php cli
第一种方法是将php解释器的可执行文件路径添加到环境变量(path)中或者直接使用完整路径。然后,可以在终端中键入php命令,后面跟着要执行的php脚本的路径,例如:使用 # php /path/to/yourfile.php 调用php cli解释器,并给脚本传递参数。这种方法要指定php解释器的路径。
第二种方法是首先运行chmod +x <要运行的脚本文件名>(unix/linux环境),将该php文件置为可执行权限,然后在cli脚本头部第一行加入声明(类似于#! /usr/bin/php 或 php cli 解释器位置),接着在命令行直接执行。
命令行选项
php cli支持许多命令行选项,以控制脚本的行为。例如,可以使用-r选项来执行单行php代码,或者使用-f选项来指定要执行的php脚本文件。
获取命令行参数
php cli带有两个特殊的变量,专门用来达到这个目的:
* 一个是 $_server['argv'] 变量,它通过命令行把传递给php脚本的参数保存为单独的数组元素;
* 另一是 $_server['argc'] 变量,它用来保存$_server['argv']数组里元素的个数。cli可以从 $_server['argv'] 和 $_server['argc'] 取得参数的值和参数个数。
备注:在web页模式下必须在php.ini开启register_argc_argv配置项,设置register_argc_argv = on(默认是off),重启服务,$_server[‘argv’]才会有效果,这时候的$_server[‘argv’][0] = $_server[‘query_string’]
标准输入输出
在cli环境下,可以使用echo语句将输出打印到终端,还可以使用fgets(stdin)从终端读取输入。
php配置文件
cli和web服务器环境下的php可能使用不同的配置文件。在cli环境下,默认情况下使用的是php.ini文件,可以通过php --ini命令来查找并编辑该文件。
代码仅在cli下使用
在php中,通过检查 php_sapi
常量来确定代码是否在cli(命令行界面)下执行。
if (php_sapi === 'cli') { // 在这里编写仅在cli环境下执行的代码 // 例如: echo "这是在命令行界面下执行的代码"; }
超时时间
在php-cli中,默认超时时间为永久不超时,但是可以通过set_time_limit
设置超时时间.
<?php set_time_limit(1); while (1){ }
buffer缓冲
在常规web模式中,echo,var_dump,phpinfo等输出语句/函数,默认情况是先进入php缓冲区,等缓冲区到达一定数量,才开始传输给web服务器的,但是在php-cli模式中,默认关闭buffer,直接输出,例如以下代码:
<?php ob_start();//开启buffer缓冲区 php-cli下默认关闭buffer,由于web访问测试较麻烦,该段代码只为了查看以及测试缓冲区的作用,在web模式下,默认开启,无需手动开启,可自行配置 for($i=0;$i<1000;$i++){ echo $i; sleep(1); if($i%10==0){ //当i为10的倍数时,将直接结束并输出缓冲区的数据,然后再次开启缓冲区 ob_end_flush(); ob_start(); } }
php cli模式下的常用命令
-a 以交互式shell模式运行 -c 指定php.ini文件所在的目录 -n 指定不使用php.ini文件 -d foo[=bar] 定义一个ini实体,key为foo,value为'bar' -e 为调试和分析生成扩展信息 -f 解释和执行文件. -h 打印帮助 -i 显示php的基本信息 -l 进行语法检查 (lint) -m 显示编译到内核的模块 -r 运行php代码,不需要使用标签 ..?> -b 在处理输入之前先执行php代码 -r 对输入的没一行作为php代码运行 -f parse and execute for every input line -e run php after processing all input lines -h hide any passed arguments from external tools. -s 运行内建的web服务器. -t 指定用于内建web服务器的文档根目录 -s 输出html语法高亮的源码 -v 输出php的版本号 -w 输出去掉注释和空格的源码 -z 载入zend扩展文件 args... 传递给要运行的脚本的参数. 当第一个参数以-开始或者是脚本是从标准输入读取的时候,使用--参数 --ini 显示php的配置文件名 --rf 显示关于函数的信息 --rc 显示关于类的信息 --re 显示关于扩展的信息 --rz 显示关于zend扩展的信息 --ri 显示扩展的配置信息.
1、php -m
显示编译到内核下的模块
2、php -v
显示php的版本号
3、php --ini
显示配置文件名及配置文件路径,注意,这里显示的是php cli模式下的php.ini配置文件的所在路径。
4、php -h
显示php在cli模式下有哪些命令行命令
5、php --info
查看类/函数/扩展信息,和web服务器上php 使用phpinfo()一样
6、php --rf
显示关于函数的信息
7、php --rc
显示关于类的信息
8、php --re
显示关于扩展的信息
9、php --ri
显示扩展的配置信息
10、php --rz
显示关于zend扩展的name信息
总结
php 除了可以被apache iis服务器调用,还可以通过cli模式运行,因为php本质上还是c语言写的程序。cli模式的业务场景:定时任务,有数据同步,数据处理,多线程,进程通信,共享内存都要使用cli。
到此这篇关于php-cli命令行模式开发从新手到高手的文章就介绍到这了,更多相关php-cli命令行模式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论