通用网关接口请求处理方法、设备和存储介质与流程

文档序号:14410268阅读:269来源:国知局
通用网关接口请求处理方法、设备和存储介质与流程

本发明涉及计算机网络领域,具体而言,涉及一种通用网关接口cgi请求处理方法、设备和存储介质。



背景技术:

在相关php技术中,很多设计都更侧重使用上的便利。例如,每个通用网关接口(commongatewayinterface,cgi)请求都调用请求初始化rinit和请求的关闭rshutdown。

php-cgi请求本身是为了web提供接口服务,而web接口服务大部分情况都是无状态的,请求和请求之间在web逻辑上是独立的,所以通过请求初始化rinit和请求的关闭rshutdown可以做到请求隔离,在使用上,不用关心请求之间产生副作用。但是随着互联网的发展,高并发大流量的web场景下,这种请求维度隔离资源的设计,会造成较大的性能浪费。



技术实现要素:

本公开提供一种cgi请求处理方法、设备和存储介质。

第一方面,提供一种cgi请求处理方法,该方法可包括:创建通用网关接口cgi进程;判断第一cgi请求是否为首次请求;若是首次请求,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;若不是首次请求,执行所述第一cgi请求对应的php脚本;在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

在一些实施方式中,所述判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

在一些实施方式中,cgi请求处理方法还可包括:在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

在一些实施方式中,cgi请求处理方法还可包括:在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

在一些实施方式中,cgi请求处理方法还可包括:在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

在一些实施方式中,cgi请求处理方法还可包括:在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

在一些实施方式中,cgi请求处理方法还可包括:在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

在一些实施方式中,cgi请求处理方法还可包括:在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

第二方面,提供一种计算机设备,包括存储器和处理器,其中,所述存储器用于存储一条或多条计算机指令,所述一条或多条计算机指令被所述处理器执行时实现:创建通用网关接口cgi进程;判断第一cgi请求是否为首次请求;若是首次请求,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;若不是首次请求,执行所述第一cgi请求对应的php脚本;在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

在一些实施方式中,所述判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

第三方面,提供一种cgi请求处理装置,所述装置包括:创建模块,用于创建通用网关接口cgi进程;请求处理模块,用于判断第一cgi请求是否为首次请求;以及,在是首次请求的情况下,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;在不是首次请求的情况下,执行所述第一cgi请求对应的php脚本;关闭模块,用于在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

在一些实施方式中,所述请求处理模块判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

在一些实施方式中,所述请求处理模块,还用于在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

在一些实施方式中,所述请求处理模块,还用于在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

在一些实施方式中,所述请求处理模块,还用于在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

在一些实施方式中,所述请求处理模块,还用于在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

在一些实施方式中,所述请求处理模块,还用于在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

在一些实施方式中,所述请求处理模块,还用于在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

第四方面,提供一种计算机可读存储介质,其上存储有计算程序,其特征在于,所述程序被处理器执行时实现上述第一方面所述的方法。

本公开的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施方式的cgi请求处理方法的流程图。

图2是cgi请求处理的流程示意图。

图3是根据本发明实施方式的计算机设备的结构示意图。

图4是根据本发明实施方式的cgi请求处理装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

在本发明的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如s101、s102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例以及基于本发明的思想得到的实施例,都属于本发明保护的范围。

参见图1,图1示出了根据本发明实施实施方式的cgi请求处理方法的流程图,该方法可包括:s101、s102、s103、s104和s105。

s101,创建通用网关接口cgi进程。

在一些实施方式中,s101中创建一个新的cgi进程,例如,fastcgij进程,实现服务器端应用编程接口(serverapplicationprogramminginterface,sapi)的回调。sapi可以提供一个接口,使得php可以与其他应用进行数据交互。

s102,判断第一cgi请求是否为首次请求,若是首次请求,则执行s103,若不是首次请求,则执行s104。

cgi进程可以处理多个cgi请求,并且可以为这些请求设置标识位,表示两个状态,例如,表示首次请求状态和非首次请求状态(即后续请求状态),不同的状态分别执行不同的处理逻辑。

在一些实施方式中,可以基于请求的标识位判断cgi请求是否为首次请求,标识位为第一数值,表示首次请求;为第二数值,表示非首次请求。例如,在accept收包的大循环开始前设置1个变量request_state为false,进入收包循环后,判断request_state变量是false时,意味着首次请求,做首次请求特殊逻辑,然后将收包循环中第一cgi请求之外的其他cgi请求的标识位设置为true,第二个及以后的请求处理时,判断该变量request_state是否为true,即可分辨是否首次请求,如果为true,则是后续请求,若不为true(即false),则是首次请求。

s103,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本。

如图2所示。现有的cgi请求中,对于每个cgi请求,都需要执行虚线圈出的处理:

s201,请求test.php;

s202,调用扩展的rinit;

s203,执行test.php脚本;

s204,调用扩展的rshurtdown;

s205,调用完test.php之后清理。

而本发明实施方式中,对于首次cgi请求,执行一次请求的初始化rinit,然后,对于后续的cgi请求,仅重复执行点线圈出的处理s203,执行test.php脚本。

s104,执行所述第一cgi请求对应的php脚本。

下面对cgi请求中涉及的一些数据结构进行简要说明。类表是php解析过程中创建维护的一个hash表,会将php解析的类class信息全部由类表维护,类表的key是类名字符串,值是类的具体结构,主要包含父类、引用计数、成员变量、函数等信息。全局符号表是指保存全局变量的hash表。opcode由是zend引擎解析php代码得到的。

cgi进程在rshutdown阶段会全部将类表、全局符号表和opcode等释放掉。在之前的cgi请求处理中,每次cgi请求都执行一次rinit和rshutdown,也就是说,这些类表、全局符号表和opcode会在cgi请求的rshutdown阶段释放掉。

在本发明的实施方式中,由于不是每次cgi请求都执行rshutdown,所以这些资源(例如,类表、全局符号表和opcode)都可以其他的cgi请求中使用。在第一cgi请求之后的第二cgi请求中,可以使用第一cgi请求中创建的类表、全局符号表和代码解释生成的opcode等中的一种,也可以使用类表、全局符号表和代码解释生成的opcode中的两种,例如,类表和全局符号表;类表和代码解释生成的opcode;或者,全局符号表和代码解释生成的opcode等;还可以同时使用类表、全局符号表和代码解释生成的opcode三种。因此,本发明提供的cgi请求处理方法,能够在不同cgi请求之间共享诸如类表、全局符号表和代码解释生成的opcode等之类的资源,降低系统资源处理的压力,提高cgi请求的处理效率。

在一些实施方式中,在第一cgi请求之后的第二cgi请求的处理中,还可以使用cgi请求中创建的全局符号表中的第一全局变量对应的资源。需要说明的是,第一全局变量可以是全局符号表中的任意一个全局变量。全局变量是指php脚本中的全局变量。由于之前phpcgi的逻辑是请求处理时申请的全局变量,会在请求结束后释放,因此无法构建资源池。例如,1个cgi请求中建立了1个数据库连接,在该cgi请求结束时rshutdown阶段必须释放,下一个cgi请求无法使用。本发明实施方式利用全局变量在请求之间共享的特性,在全局变量中保存数据库连接,构造连接池,便可以在所有请求中共用。需要说明的是,数据库连接仅是用于举例,只是资源的一种,其他资源也可以类似地适用。

之前的cgi请求处理中,对于每个请求,独立执行php解释,每个请求中用到的常量都会声明,然后在请求的rshutdown阶段释放。在本发明实施方式中,常量资源共享,也就是说,1个cgi请求声明了变量,那么下次的cgi请求按照php的opcode执行,还是要触发常量声明,但是php内部源码中是不允许常量重复声明的,会报一个警告。因此为了兼容原有的常量使用模式,需要做特殊处理。在执行第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略第一常量的常量声明,返回常量表中该第一常量的数值。也就是说,如果常量表中已经存在此常量,变忽略常量声明。如果已经存在,由于是常量,数值是固定的,所以直接返回常量表中的常量值即可。这样的处理,能够较好地兼容现有的cgi请求处理的程序代码。

静态变量是在zend引擎解析php代码时生成的。类加载是当类表中不存在此类名时触发的,根据类加载函数,寻找到类对应的php文件,然后编译php文件,将php类加载到类表中。静态变量是编译php类时生成到类结构中的。现有的cgi请求处理中,静态变量只在每次请求中存在,在本发明的实施方式中,静态变量会跨请求存在,导致与原有代码不兼容。

在本发明的实施方式中,为了使得本发明实施方式与原有代码兼容,在首次cgi请求之前,hook住类加载的系统函数spl_autoload_call。也就是说,勾住系统的spl_autoload_call,在系统本应该调用spl_autoload_call的时候,真正调用的是适用本发明实施方式的预定函数。

在一些实施方式中,在cgi请求处理中,在第一类加载时,保存该第一类内的静态变量的默认值,在该cgi请求结束时,将该静态变量恢复为所述保存的默认值。通过对静态变量的上述处理,保证了cgi请求之间静态变量的资源共用,又保证了与原有cgi代码兼容性。

在一些实施方式中,在第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。具体而言,在请求初始化阶段执行php_output_activate(重置输出全局变量和设置输出处理回调函数栈);在请求结束时,执行php_output_end_all(汇总所有的回调输出内容)php_output_deactivate(释放输出回调栈)。类似地,在第一cgi请求之后的第二cgi请求,也在请求的处理是阶段执行php_output_activate,在请求结束阶段,执行php_output_end_all和php_output_deactivate,以使输出缓冲区的内存冲刷到第二cgi请求的响应报文。

s105,在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

在一些实施方式中,子进程收到主进程的sigterm信号便会退出进程。在接收到主进程的sigterm信号,执行cgi请求的关闭rshutdown,释放掉整个cgi进程创建的常量、静态变量、全局变量以及类表等等。

本发明实施方式还提供了一种计算机设备。如图3所示,计算机设备300可包括存储器301和处理器302,其中,所述存储器301用于存储一条或多条计算机指令,所述一条或多条计算机指令被所述处理器302执行时实现:创建通用网关接口cgi进程;判断第一cgi请求是否为首次请求;若是首次请求,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;若不是首次请求,执行所述第一cgi请求对应的php脚本;在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

在一些实施方式中,所述判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

在一些实施方式中,所述一条或多条计算机指令被所述处理器执行时还实现:在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

本公开还提供一种cgi请求处理装置,如图4所示,cgi请求处理装置400可包括创建模块401、请求处理模块402和关闭模块403,其中,创建模块401,用于创建通用网关接口cgi进程;请求处理模块402,用于判断第一cgi请求是否为首次请求;以及,在是首次请求的情况下,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;在不是首次请求的情况下,执行所述第一cgi请求对应的php脚本;关闭模块403,用于在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

在一些实施方式中,所述请求处理模块402判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

在一些实施方式中,所述请求处理模块402,还用于在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

在一些实施方式中,所述请求处理模块402,还用于在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

在一些实施方式中,所述请求处理模块402,还用于在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

在一些实施方式中,所述请求处理模块402,还用于在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

在一些实施方式中,所述请求处理模块402,还用于在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

在一些实施方式中,所述请求处理模块402,还用于在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

本公开还提供一种计算机可读存储介质,其上存储有计算程序,所述程序被处理器执行时实现上述方法的步骤。

以上所描述的装置或设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

本申请公开了a1、一种cgi请求处理方法,其特征在于,所述方法包括:

创建通用网关接口cgi进程;

判断第一cgi请求是否为首次请求;

若是首次请求,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;

若不是首次请求,执行所述第一cgi请求对应的php脚本;

在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

a2、根据权利要求a1所述的方法,其特征在于,所述判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

a3、根据权利要求a2所述的方法,其特征在于,所述方法还包括:

在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

a4、根据权利要求a1所述的方法,其特征在于,所述方法还包括:

在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

a5、根据权利要求a1所述的方法,其特征在于,所述方法还包括:

在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

a6、根据权利要求a5所述的方法,其特征在于,所述方法还包括:

在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

a7、根据权利要求a1所述的方法,其特征在于,所述方法还包括:

在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;

在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

a8、根据权利要求a1所述的方法,其特征在于,所述方法还包括:

在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

b9、一种计算机设备,其特征在于,包括存储器和处理器,其中,所述存储器用于存储一条或多条计算机指令,所述一条或多条计算机指令被所述处理器执行时实现:

创建通用网关接口cgi进程;

判断第一cgi请求是否为首次请求;

若是首次请求,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;

若不是首次请求,执行所述第一cgi请求对应的php脚本;

在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

b10、根据权利要求b9所述的计算机设备,其特征在于,所述判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

b11、根据权利要求b10所述的计算机设备,其特征在于,所述一条或多条计算机指令被所述处理器执行时还实现:

在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

b12、根据权利要求b9所述的计算机设备,其特征在于,所述一条或多条计算机指令被所述处理器执行时还实现:

在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

b13、根据权利要求b9所述的计算机设备,其特征在于,所述一条或多条计算机指令被所述处理器执行时还实现:

在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

b14、根据权利要求b13所述的计算机设备,其特征在于,所述一条或多条计算机指令被所述处理器执行时还实现:

在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

b15、根据权利要求b9所述的计算机设备,其特征在于,所述一条或多条计算机指令被所述处理器执行时还实现:

在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;

在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

b16、根据权利要求b9所述的计算机设备,其特征在于,所述一条或多条计算机指令被所述处理器执行时还实现:

在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

c17、一种cgi请求处理装置,其特征在于,所述装置包括:

创建模块,用于创建通用网关接口cgi进程;

请求处理模块,用于判断第一cgi请求是否为首次请求;以及,在是首次请求的情况下,执行cgi请求的初始化rinit,然后执行所述第一cgi请求对应的php脚本;在不是首次请求的情况下,执行所述第一cgi请求对应的php脚本;

关闭模块,用于在所述cgi进程退出时,执行cgi请求的关闭rshutdown。

c18、根据权利要求c17所述的装置,其特征在于,所述请求处理模块判断第一cgi请求是否为首次请求是基于所述第一cgi请求的标识位。

c19、根据权利要求c18所述的装置,其特征在于,所述请求处理模块,还用于在执行cgi请求的初始化rinit之后,将收包循环中所述第一cgi请求之外的其他cgi请求的标识位变更为表示非首次请求的标识。

c20、根据权利要求c17所述的装置,其特征在于,所述请求处理模块,还用于在执行所述第一cgi请求对应的php脚本的过程中,在常量表中已经存在第一常量的情形下,忽略所述第一常量的常量声明,返回所述常量表中所述第一常量的数值。

c21、根据权利要求c17所述的装置,其特征在于,所述请求处理模块,还用于在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求创建的类表、全局符号表和代码解释生成的opcode中的一种或多种的组合。

c22、根据权利要求c21所述的装置,其特征在于,所述请求处理模块,还用于在所述第一cgi请求之后的第二cgi请求的处理中,使用所述第一cgi请求中创建的全局符号表的第一全局变量对应的资源。

c23、根据权利要求c17所述的装置,其特征在于,所述请求处理模块,还用于在所述第一cgi请求的处理中,在第一类加载时,保存所述第一类内的静态变量的默认值;在所述第一cgi请求结束时,将所述静态变量恢复为所保存的默认值。

c24、根据权利要求c17所述的装置,其特征在于,所述请求处理模块,还用于在所述第一cgi请求结束时,将输出缓冲区的内容保存到所述第一cgi请求的响应报文。

d25、一种计算机可读存储介质,其上存储有计算程序,其特征在于,所述程序被处理器执行时实现权利要求a1至a8所述的方法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1