还有一个问题,在IIS中我使用ISAPI的方式加入php4isapi.dll时,出现错误,status是not loaded。
这是IIS的配置的问题?还是PHP的文件问题?或者是其它问题?
谢谢!

解决方案 »

  1.   

    转载:一、CGI的工作原理
        CGI(Common Gateway Interface)是外部应用程序与Web服务器交互的一个标准接口。CGI应用程序可以完成客户端与服务器的交互操作,它打破了服务器软件的局限性,允许用户根据需要采用各种语言去实现无法用HTTP、HTML实现的功能,给WWW提供了更为广阔的应用空间。例如,一个能够访问外部数据库的CGI程序可以使客户端用户通过Web服务器进行数据库的查询。同时,CGI也为如何在不同的平台之间进行沟通提供了范例。
        CGI工作的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页中用户输入的信息提取出来;3.将用户输入的信息传给服务器主机应用程序(如数据库查询);4.将服务器处理结果通过HTML文件返回给用户;5.CGI进程结束。
      CGI程序的工作原理是:客户端的Web浏览器浏览到某个主页后,利用一定的方式提交数据,并通过HTTP协议向Web服务器发出请求,服务器端的HTTP Daemon(守护进程)将描述的主页信息通过标准输入stdin和环境变量(environment variable)传递给主页指定的CGI程序,并启动此应用程序进行处理(包括对数据库的处理),处理结果通过标准输出stdout返回给HTTP Daemon守护进程,再由HTTP Daemon进程通过HTTP协议返回给客户端的浏览器,由浏览器负责解释执行,将最终的结果显示给用户。
      服务器使用环境变量(执行CGI程序时的设置)传输有关的请求信息到CGI程序,这些环境变量包括服务器的名字、CGI和服务器使用协议的版本号、客户端的IP地址和域名地址、客户端的请求方式、请求内容及编码方式、访问信息的合法性以及用户的输入信息等。
      CGI程序一般是可执行程序。编译好的CGI程序一般要集中放在一个目录下。具体存放的位置随操作系统的不同而不同(而且可以由用户自己根据情况进行配置),例如UNIX系统下的WWW服务器中一般放在cgi-bin子目录下,而在Windows操作系统下以Webstar或Website作WWW服务器,CGI程序都放在cgi-win下。不过,CGI程序的执行一般有两种调用方式:一是通过URL直接调用,如:"http://202.205.240.63/cgi-bin/test.cgi",在浏览器的URL栏里直接写入上述地址就可以调用该程序;另一种方式,也是主要的方式,是通过交互式主页中的FORM栏调用,通常都是用户在填完一张输入信息主页后按"确认"按钮启动CGI程序。主页的交互一般都是这样调用CGI来完成的。
      CGI的跨平台性能极佳,几乎可以在任何操作系统上实现,如DOS、Windows、UNIX、OS/2、Macintosh等。实现CGI的编程语言也有很多选择,常用的有Perl、C/C++、VisualBasic等。CGI的应用程序一般都是一个独立的可执行程序,与Web服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。CGI的缺点也是显而易见的:每当有一个用户请求,就会激活一个CGI进程,当用户请求数量非常多时,大量的CGI程序就会大量挤占系统的资源,如内存、CPU时间等,造成CGI运行效率低下。
      正因为如此,Web服务器开发商又开发出了专用的API,它是驻留在Web服务器上的原始代码,可以像CGI那样扩展Web服务器的功能,同时又比CGI占用的资源少。但开发API应用程序比开发CGI应用程序更复杂,需要较多的编程技巧,如多线程、同步运行机制、直接的协议编程和容错处理等。
    二、ISAPI的工作原理及其性能
      ISAPI即Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,例如提供了过滤器应用程序接口等。
      ISAPI的工作原理和CGI大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理(如图5所示)。但是二者在实现机制上大相径庭。ISAPI与CGI最大的区别在于:在ISAPI下建立的应用程序都是以动态链接库的形式存在的;而CGI的应用程序一般都是可执行程序。
      ISAPI应用的工作流程与CGI有一些不同。ISAPI应用的DLL不仅可以像CGI程序一样被用户请求激活,还可以被系统预先激活来监视用户输入;对于被用户激活的DLL,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理其他用户的输入,直到过了指定时间后一直没有用户输入为止。
      一个ISAPI的DLL,除了可以在被用户请求激活后长驻内存,等待用户的另一个请求外,还可以在一个DLL里设置多个用户请求处理函数。此外,ISAPI的DLL应用程序和Web服务器处于同一个进程中,效率要显著高于CGI。
      ISAPI提供了基于Microsoft IIS(Internet Information Server)的专用API,由于ISAPI的应用程序是DLL文件,可以与Web服务器装于同一地址空间中,所以它的执行效率比CGI高。基于ISAPI的所有进程都可以获得HTTPServer上的任何资源,而且当它调用外部CGIScript时,需要的开销也较单纯的CGI少。
      

  2.   

    谢谢  phpteam(George) 关于CGI和ISAPI的资料,能否就我提出的问题一下这方面的问题?
      

  3.   

    关于你说的在IIS中使用ISAPI的方式加入php4isapi.dll时,出现错误,status是not loaded,由于本人也没有碰到过这种问题,所以也不好回答,建议看看http://www.csdn.net/expert/topic/1008/1008822.xml?temp=.7286493,你是否已按照上面所说的每个步骤做的,先试试看吧!
      

  4.   

    我刚刚看过了你推荐的文字,我的配置是没有问题的。
    在我最初配置PHP时,是基于ISAPI的,因为那时候我使用CGI方式就会出错,后来我从网上找到了解决方案,和你的文字中提出的相同。
    那时候,使用ISAPI方式和CGI方式都好用。后来我也忘了是什么原因,ISAPI Filter的模块加载就出了我说到的问题。
      

  5.   

    是我错了。
    我没有把php4ts.dll文件考到system32目录下。
    php4ts.dll这个文件的作用是什么?还有,又回到了我上面提出的问题,ISAPI和CGI的区别,在IIS上的区别。
      

  6.   

    如果我使用ISAPI的方式,_SERVER["DOCUMENT_ROOT"]就会显示正确的路径
    如果使用CGI的方式,_SERVER["DOCUMENT_ROOT"]就没有结果。