PHP-CLI命令行模式开发从新手到高手

 更新时间:2024年04月20日 11:15:35   投稿:yin  
php-cli就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(php-cgi, isapi等),也就是说,php不单可以写前台网页,它还可以用来写后台的程序,cli模式的业务场景:定时任务,有数据同步,数据处理,多线程,进程通信,共享内存都要使用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应用场景:

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命令行模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • php的XML文件解释类应用实例

    php的XML文件解释类应用实例

    这篇文章主要介绍了php的XML文件解释类及其应用实例,包括针对XML文件的读取、解释、检查及输出等功能,非常实用,需要的朋友可以参考下
    2014-09-09
  • PHP实现LRU算法的原理详解

    PHP实现LRU算法的原理详解

    这篇文章主要为大家详细介绍了PHP实现LRU算法的原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • PHP实现动态执行代码的方法

    PHP实现动态执行代码的方法

    这篇文章主要介绍了PHP实现动态执行代码的方法,涉及PHP中create_function函数的使用技巧,需要的朋友可以参考下
    2016-03-03
  • 简单解决微信文章图片防盗链问题

    简单解决微信文章图片防盗链问题

    本文给大家介绍了2种如何盗链微信文章图片的方法,思路非常巧妙,有需要的小伙伴可以来参考下
    2016-12-12
  • 详谈PHP编码转换问题

    详谈PHP编码转换问题

    本文给大家分享的是个人对于PHP编码转换问题的理解以及处理方法,非常的简单实用,有需要的小伙伴可以参考下。
    2015-07-07
  • PHP常用的三种设计模式汇总

    PHP常用的三种设计模式汇总

    本文给大家简单介绍了PHP中最常用的三种设计模式:单例设计模式、工厂设计模式和观察者设计模式。都是个人的一些经验总结,希望小伙伴们能够喜欢
    2016-08-08
  • PHP标准库(PHP SPL)详解

    PHP标准库(PHP SPL)详解

    今天小编就为大家分享一篇关于PHP标准库(PHP SPL)详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • php自动给网址加上链接的方法

    php自动给网址加上链接的方法

    这篇文章主要介绍了php自动给网址加上链接的方法,可实现对本文中的网址加上链接的功能,涉及正则匹配的相关技巧,需要的朋友可以参考下
    2015-06-06
  • PHP判断上传文件类型的解决办法

    PHP判断上传文件类型的解决办法

    php通过判断上传文件的头字符来判断文件的类型,这可以称得上是最安全,最真实确定上传文件类型的方法了,具体实现方法如下
    2015-10-10
  • PHP实现邮件群发的源码

    PHP实现邮件群发的源码

    本篇文章是对用PHP实现邮件群发的代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论