关于PHP CGI和CLI的几点学习

 

本文来自小屋
sjolzy.cn【原创】

 

首先关于几个概念词的总结:

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

CGI
:“公共网关接口”(Common Gateway Interface),HTTP服务器
与你的或其它机器上的程序
进行
“交谈”的一种工具
,其程序
须运行在网络
服务器
上。在服务器
环境中,为“程序
”提供标准
的接口,通过这个接口,“程序
”可以对服务器
客户端
交换的信息
做一些事情
。“程序
”的
言并没有要求。程序
对接口进行
操作。服务器
支持
CGI就要提供CGI中要求的环境变量
,或者还有别的。我的理解至此为之。

 

CLI
:“ 命令
行界面”(Command Line Interface),可在用户
提示符下键入可执行指令
的界面。

 

SAPI
:“ 服务器
应用程序
接口”(Server Application Programme Interface),可以认为是服务器
端的API。貌似和CGI是一个东西
,每个服务器
提供的API可能不同,但是他们都提供了CGI。所以可以理解CGI是每个服务器
应该
有的SAPI。apache
有自己的SAPI,IIS也有自己的。但是php
能这些不同的服务器
端工作,因为php
支持
了它们各自的SAPI。(CGI和CLI都是SAPI的

)

 

ISAPI
:ISAPI 服务器
扩展
是可以被 HTTP 服务器
加载
调用
的 DLL。Internet 服务器
扩展
也称为 Internet 服务器
应用程序
(ISA),用于增强符合 Internet 服务器
API (ISAPI) 的服务器
功能
。ISA 通过浏览器
应用程序
调用
,并且将相似的功能
提供给通用网关接口 (CGI) 应用程序

 

*(ISAPI的DLL应用程序
和WEB服务器
处于同一个进程
中,效率
要显著高于CGI)

*php
CGI和php
SAPI为php
在Web服务器
上运行的php
环境;php
CLI为php
命令
行运行的接口

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

php
的CLI 和 CGI

 

PHP 5 中对 CLI 和 CGI 文件
名作了些改变。PHP 5 中,CGI 版本
被改名为 php
-cgi.exe
(以前是 php
.exe
),现在主目录
中的是 CLI 版本
(之前是 cli/php
.exe
)。

PHP 5 中引进了一种新模式
php
-win.exe
。这和 CLI 版本
相同,只除了 php
-win 不输出
任何内容
,因此不会
提供控制台
(屏幕上不会
闪过“dos 窗口”)。此行为
php
-gtk。

PHP 5 中,CLI 版本
总会产生全局变量
$argv 和 $argc 而不管 php
.ini 是怎么设的。即使将 register_argc_argv 设为 off 也不影响 CLI。

 

 

以CGI方式
运行PHP

 

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    Allow from all

#    Deny from all

#不能有deny from all

    Satisfy all

</Directory>

 

AddType application/x-httpd
-php
.php

Scrip
tAlias /php
5/ "D:/php
5/"

#必须有结尾的“/”

Action application/x-httpd
-php
"/php
5/php
-cgi.exe
"

#必须为php
-cgi.exe

#

Apache里PHP以模块
方式
运行和CGI方式
运行的区别
: 

在CGI方式
运行时占用的资源

,在ISAPI模式
下的资源
相对就较少点,也比较稳定.

 

模式
方式
运行需要的配置

LoadModule php
5_module        modules/libphp
5.so

//添加php
解析的扩展

AddType application/x-httpd
-php
.php

//添加.Z解析的扩展

AddType application/x-compres
s .Z

//添加压缩文件
解析的扩展

AddType application/x-gzip
.gz .tgz

 

 

以CLI方式
运行PHP

 

1*直接在终端执行php

sjolzy@localhost# php
-r 'print
_r(get_defined_constants());'

 

2*运行php
-cli脚本
文件

sjolzy@localhost# php
my_scrip
t.php

sjolzy@localhost# php
-f my_scrip
t.php

以上两种方法
使用
或不使用
-f 参数
)都能够运行给定的 my_scrip
t.php
文件
。可以选择
任何文件
来运行,指定的 PHP 脚本
并非必须要以 .php
扩展
名,它们可以有任意的文件
名和扩展
名。

 

3*通过标准
输入(stdin)提供需要运行的 PHP 代码

以上用法提供了非常强大的功能
,使得可以如下范例所示,动态
地生成 PHP 代码
并通过命令
行运行这些代码

$ some_application | some_filter
| php
| sort -u >final_output.txt

 

以上三种运行代码
方法
不能同时使用

 

用Cron执行php
-cli脚本

cron是一个linux
下的定时执行工具
,可以在无需人工干预的情况下运行作业,周期
性作业,比如备份数据
,Preminder定期查询PR等等,添加的方法
:打开/etc/crontab,添加:

0 13 * * * /usr/bin/php
-f /home/php
scrip
ts/php
cli.php