PHP-CLI命令行接口详解:从定时任务到多线程处理的完整指南
PHP-CLI命令行模式开发从新手到专家

更新时间:2024年4月20日11:15:35 提交:yin
php-cli是PHP在命令行上运行的接口,与运行在Web服务器上的PHP环境(php-cgi、isapi等)不同。也就是说,PHP不仅可以编写前端网页,还可以用来编写后端网页。程序、cli模式业务场景:定时任务、数据同步、数据处理、多线程、进程通信、共享内存等都使用cli
目录
php-cli 是 php 命令行界面的缩写。顾名思义,它是php在命令行上运行的接口,与在web服务器上运行的php环境(php-cgi、isapi等)不同。也就是说,php不仅可以写前端网页,还可以用来写后台程序。 PHP CLI Shell 脚本应用了 PHP 的所有优点,可以创建服务器端脚本或系统,甚至具有 GUI 的应用程序! ——注:php_cli模式在windows和linux下都支持。
PHP-cli应用场景:
cli模式的业务场景:定时任务、数据同步、数据处理、多线程、进程通信、共享内存等都使用cli
1.多线程应用程序
1.使用多进程。子进程结束后,内核将负责回收资源。
2、使用多进程时,子进程的异常退出不会导致整个进程Thread退出。父进程仍然有机会重建进程。
3.一个常驻主进程,只负责任务分配,逻辑更清晰
4、虽然大家普遍认为PHP没有多线程(curl模拟多线程而不是真实),但是php_cli模式下的PHP是完全多线程的。此时php就属于Linux的一个守护进程了。
2.定期执行php程序
利用Linux的cron方法。 Cron是Linux下的一个定时执行工具。它可以运行作业和定期作业,无需人工干预。
3. 开发桌面程序
您可以使用 PHP 制作 Windows 或 Linux 图形用户界面 (GUI) 应用程序!您所需要的只是 PHP 的命令行界面和 GTK 包。这将允许创建真正可移植的图形用户界面应用程序(哈哈,我以前只知道php可以用作桌面程序,但现在我知道它使用php_cli模式),并且不需要学习其他任何东西。
4.编写PHP shell脚本
如果您不知道如何使用 bash shell 或 Perl,但需要执行一些脚本,该怎么办?这时候你就完全可以用你熟悉的PHP来编写shell脚本了。这时,你是不是突然觉得PHP太强大了?
PHP CLI 的安装
PHP CLI可以从PHP官网下载并安装。安装完成后,需要配置环境变量才能在任何地方运行php命令行。
在 Windows 系统上执行以下步骤:
在Linux或macOS系统下,可以通过命令行指令安装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'] 获取参数值和参数个数。
注意:网页模式下,必须在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来设置超时时间。
缓冲缓冲
在常规Web模式下,输出的语句/函数如echo、var_dump、phpinfo等,默认先进入php缓冲区,等到缓冲区达到一定数量才开始传输到Web服务器。但在php-cli模式下,默认关闭缓冲区并直接输出,如以下代码:
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--信息
查看类/函数/扩展信息,就像在Web服务器上使用phpinfo()一样
6. php--rf
显示有关函数的信息
7. php --rc
显示有关班级的信息
8. php --re
显示有关扩展的信息
9. php --ri
显示扩展配置信息
10. php--rz
显示有关 zend 扩展的名称信息
总结
PHP除了被Apache IIS服务器调用外,还可以以cli方式运行,因为PHP本质上是一个用C语言编写的程序。 cli模式的业务场景:定时任务、数据同步、数据处理、多线程、进程通信、共享内存等都使用cli。
这篇关于PHP-CLI命令行模式从新手到专家的开发的文章到此结束。关于PHP-CLI命令行模式的更多信息,请搜索Script House之前的文章或者继续浏览下面的相关文章。今后请多多支持Script House!