本文来自小屋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
#必须有结尾的“/”
Action application/x-httpd-php "/php5/php-cgi.exe"
#
在CGI方式运行时占用的资源较多,在ISAPI模式下的资源相对就较少点,也比较稳定.
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
//添加.Z解析的扩展
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
以CLI方式运行PHP
1*直接在终端执行php
sjolzy@localhost# php -r 'print_r(get_defined_constants());'
sjolzy@localhost# php my_script.php
sjolzy@localhost# php -f my_script.php
以上两种方法(使用或不使用 -f 参数)都能够运行给定的 my_script.php 文件。可以选择任何文件来运行,指定的 PHP 脚本并非必须要以 .php 为扩展名" title="扩展名" >扩展名,它们可以有任意的文件名和扩展名" title="扩展名" >扩展名。
3*通过标准输入(stdin)提供需要运行的 PHP 代码。
以上用法提供了非常强大的功能,使得可以如下范例所示,动态地生成 PHP 代码并通过命令行运行这些代码:
$ some_application | some_filter | php | sort -u >final_output.txt
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据,Preminder定期查询PR等等,添加的方法:打开/etc/crontab,添加:
0 13 * * * /usr/bin/php -f /home/phpscripts/phpcli.php
--EOF--