PHP-CLI命令行接口详解:从定时任务到多线程处理的完整指南

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!

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读