总结PHP权威指南 - PHP Shell脚本编程

本文详细对比了PHP中的CLI(命令行界面)与CGI(通用网关接口)两种SAPI(Server Application Programming Interface)。介绍了它们的区别、安装方式及如何判断正在使用的SAPI类型。此外还介绍了CLI版本的特性及其与CGI的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下总结,参照了 PHP权威指南和PHP手册:

从PHP3.0就可以编写shell脚本,使用的是CGI版本的PHP。CLI是4.2.0发布的,2者都可以编写shell脚本。先明白这2个概念,都是SAPI(Server Application Programming Interface)。


以下摘自PHP手册:

一、无论是Linux还是Windows,安装PHP,CLI和CGI都会被安装。

1.linux下安装

1>在默认情况下,当运行 make 时,CGI 和 CLI 都会被编译并且分别放置在 PHP 源文件目录的 sapi/cgi/phpsapi/cli/php 下。可以注意到两个文件都被命名为了 php

2>在 make install的过程中会发生什么取决于配置行。如果在配置的时候选择了一个 SAPI 模块,如 apxs,或者使用了 --disable-cgi参数,则在 make install 的过程中,CLI 将被拷贝到 {PREFIX}/bin/php,除非 CGI 已经被放置在了那个位置。因此,例如,如果在配置行中有 --with--apxs,则在 make install 的过程中,CLI 将被拷贝到 {PREFIX}/bin/php。如果希望撤销 CGI 执行文件的安装,请在 make install之后运行 make install-cli。或者,也可以在配置行中加上 --disable-cgi参数.

2.windows下安装

1>在 PHP 4.2.0 到 PHP 4.2.3 之间的 Windows 发行包中,CLI 的文件名为 php-cli.exe,相同文件夹下的 php.exe 为 CGI。从 PHP 4.3.0 版本开始,Windows 的发行包中 CLI 的执行文件为 php.exe,被放置在一个单独的名为 cli 的文件夹下,即 cli/php.exe。在 PHP 5 中,CLI 存在于主文件夹中,名为 php.exe,而 CGI 版本名为 php-cgi.exe

可以看出,CLI基本已替代了CGI

二、如何得知自己使用的是哪个 SAPI?

1>.在 命令行下,运行 php -v 便能得知该 php 是 CGI 还是 CLI。请参考函数 php_sapi_name() 以及常量 PHP_SAPI
2>在浏览器中,输出 php_sapi_name() 以及常量 PHP_SAPI,得到的是 apache2handler(我使用的是apache,更好的是fast-cgi等,对这些概念也是模模糊糊)

三、CLI如何区别于CGI

CLI版本的PHP与CGI版本是非常类似的,而且曾基于CGI。主要区别在于所有的web服务器接口,这也是CGI真正需要实现的。
通过CLI,PHP被简化为非常基础的部分,而不会导入任何GET,POST形式的变量,在输出中不会输出任何MIME头信息,总体来说就是不会像其他SAPI执行所做的幕后工作。
1.CLI,其输出没有任何头信息。CGI倒是也提供了取消HTTP头信息的方法,CLI压根就没有这个选项,不会出现开启。CLI默认以安静模式开始,为了保证兼容CGI,保留了 -q和 --no-header 参数,这个参数用户CLI没有任何作用。
2.CLI在运行时,不会把工作目录改为脚本的当前目录,而CGI会改变。同样的CGI通过 -C 和 --no-chdir 参数,也可设置为不改变工作目录。CLI同样保留了这个参数,兼容CGI。
3.出错时,输出纯文本的错误信息,而非HTML格式 - 在shell中看不到效果,而且杂乱,没有任何意义!
4.CLI强制覆盖了php.ini的某些配置:
html_errors  - 设置为false,错误信息不显示html标签
implicit_flush - 设置为true,命令行模式下,所有来自print和echo的输出将被立即写到输出端,而不作任何的缓冲操作。如果希望延迟或控制输出,我们可以通过output buffering(输出控制,ob_flush)控制。
max_execution_time - 设置为0,不限制最大执行时间!区别于浏览器设置的最大执行时间。
register_argc_argv - 设置为true,在CLI中,总是可以访问到argc(传送给应用程序参数的个数)和argv(实际参数数组)。CGI版本或其他版本的SAPI,这2个变量基于 register_globals = on。不过到是也可以通过$_SERVER或$HTTP_SERVER_VARS超全局数组来访问。例如:$_SERVER['argv']。

Note:
在CLI模式下,我们无法通过php.ini中来修改这些选项的值,这些默认值只允许在所有的设置文件被解析后才能改变。所有修改php.ini是没有意义的。可以在程序运行的过程中改变。使用ini_set()或其他方法。

5.php.ini 名称和位置
在linux系统中,PHP(除了CLI)默认在/usr/local/lib/下寻找php.ini文件,为了更shell化,CLI后台默认寻找/etc/php-cli.ini用作替代。这可以让web服务器和CLI/shell脚本保持单独的php.ini文件。
可以通过 get_cfg_var("cfg_file_path")查看默认的php.ini文件
6.PHP的进程控制扩展(pcntl)只有在CLI版本中可以使用,通过它一个fork()调用只会复制PHP,而不会复制整个web服务器的进程。

7.CLI专用常量:
STDIN
STDOUT
STDERR

暂时写到这,看到内容太多。。。


PHP 5首席设计师Andi Gutmans,PEAR创始人Stig Saether Bakken,PHP核心贡献者Derick Rethans三大高手合力而作:本书几乎囊括了PHP 5所有的新特性,包括PHP 5所有的新功能,PHP 5的面向对象编程方法和设计模式,以及PHP 5的新的数据库连接处理、错误处理和XML处理等机制。另外,该书还重点介绍PEAR的基本安装和使用、核心PEAR包介绍和如何创建PEAR组件,可以提供极大帮助那些缺少PEAR使用经验的PHP程序员。 近年来,随着使用PHP的大流量网站逐渐增加,企业在使用:PHP的时候开始面临新的问题,代码的规范与维护就是其中比较突出的问题。另外,在PHP的速度满足业务需求后,人们对项目的稳健性、可升级性提出了新的要求。 本书为大家全面介绍了PHP 5中的新功能、面向对象编程方法及设计模式,还分析阐述了PHP 5中新的数据库连接处理、错误处理和XML处理等机制。希望能够帮助读者系统了解、熟练掌握PHP,最大程度地挖掘PHP的潜力,以更低的成本搭建更加稳健、高效的PHP应用。 本书适合PHP程序员及具备其他高级语言编程经验的Web开发人员阅读。 目录: 序 前言 第1章 PHP 5新特性 1.1 介绍 1.2 语言特性 1.3 PHP改进概述 1.4 其他的PHF 5新特性 1.5 总结 第2章 PHP 5基础语言 2.1 介绍 2.2 嵌入HTMI 2.3 注释 2.4 变量 2.5 基础数据类型 2.6 运算符 2.7 控制结构 2.8 函数 2.9 总结 第3章 PHP 5面向对象语言 3.1 介绍 3.2 对象 3.3 声明一个类 3.4 new关键字和构造函数 3.5 析构函数 3.6 使用$this变量访问方法和属性 3.7 类的常量 3.8 克隆对象 3.9 多态 3.10 parent::和self:: 3.11 instanceof运算符 3.12 Abstract方法和类 3.13 接口 3.14 接口的继承 3.15 final方法 3.16 final 类 3.17 __toString()方法 3.18 异常处理 3.19 ___autoloadO 3.20 在函数参数中提示类的类别 3.21 总结 第4章 PHP 5高级面向对象编程和设计模式 4.1 介绍 4.2 重载性能 4.3 迭代器 4.4 设计模式 4.5 映射 4.6 总结 第5章 如何用PHP写一个Web应用 5.1 介绍 5.2 嵌入HTML当中 5.3 获取用户数据 5.4 对用户输入的数据进行安全验证 5.5 一些让脚本运行“安全”的技术 5.6 Cookies 5.7 Sessions 5.8 文件上传 5.9 架构 5.10 总结 第2章 PHP 5基础语言 第3章 PHP 5面向对象语言 第4章 PHP 5高级面向对象编程和设计模式 第5章 如何用PHP写一个Web应用 第6章 使用PHP 5访问数据库 第7章 错误处理 第8章 PHP 5中处理XML 第9章 主流扩展 第10章 使用PEAR 第11章 重要的PEAR包 第12章 创建PEAR的组件 第13章 迁移 第14章 性能 第15章 一个编写PHP扩展的介绍 第16章 PHP Shell 脚本编程 附录A PEAR和PECL包索引 附录B phpDocumentor格式参考 附录C Zend Studio快速使用说明 索引 “这本书,是我的同事Andi Gutmans和另外两位非常卓越的PHP开发者Stig Bakken及Derick Rethans编写的,它描述了许多PHP 5丰富功能的关键内容。本书彻底阐述了新版本所有的特性,并且是所有想研究PHP 5高级特性的PHP开发者的必备书。”             ——Zeev Su raski,PHP 5设计者之一、Zend引擎创始人之一 “本书英文版刚刚上市,就在国外快速流行起来。我记得此书出版不久,Andi就告诉我这本书的下载次数超过了百万。更多的书都是依据PHP 4来撰写的,真正意义上的PHP 5书籍市场上并不太多,此书正是完全意义上的第一本PHP 5技术书。”               ——耿志军,PHPChina创始人
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值