php 的CLI 和 CGI

来源:互联网 发布:linux源码在线 编辑:程序博客网 时间:2024/04/28 23:17

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

 

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

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

原创粉丝点击