什么是“char ** envp;” FCGX_Request在FastCGI中意味着什么?

时间:2011-08-10 09:00:05

标签: c fastcgi

在FastCGI中,有一个结构FCGX_Request的指针envp。这是代码:

typedef struct FCGX_Request {
    int requestId;            /* valid if isBeginProcessed */
    int role;
    FCGX_Stream *in;
    FCGX_Stream *out;
    FCGX_Stream *err;
    char **envp;

    /* Don't use anything below here */

    struct Params *paramsPtr;
    int ipcFd;               /* < 0 means no connection */
    int isBeginProcessed;     /* FCGI_BEGIN_REQUEST seen */
    int keepConnection;       /* don't close ipcFd at end of request */
    int appStatus;
    int nWriters;             /* number of open writers (0..2) */
    int flags;
    int listen_sock;
} FCGX_Request;

我想这意味着某处的环境变量。是浏览器还是网络服务器的环境变量?

也许我对WEB知之甚少,但我想这应该是浏览器和网络服务器之间的传输。那么 envp 是由broswer发送到网络服务器的吗?如果这是真的,有人能告诉我一些关于 envrioment变量的细节吗?

更重要的是,使用FCGX_Request ::我可以获得一些由浏览器提交的 POST GET 操作。我可以将结果放入FCGX_Request :: out发送到浏览器。 我的问题是,还有其他我可以学到的东西吗?

欢迎任何关键字链接。感谢〜

1 个答案:

答案 0 :(得分:2)

  

我想这意味着某处的环境变量。是个   浏览器或网络服务器的环境变量?

它是一个指向包含客户端(webserver)传递给服务器(应用程序)的环境变量的字符串指针数组的指针,它由FCGX_GetParam()内部使用。如果你想迭代所有变量,你可以使用它,但你不应该改变它或保留超过请求结束的任何指针。

  

...我想这应该是关于之间传播的事情   浏览器和网络服务器。因此envp由broswer发送到   网络服务器?如果这是真的,任何人都可以向我展示一些有关的细节   envrioment变量?

浏览器使用HTTP与网络服务器通信。网络服务器使用FastCGI协议和CGI来连接您的应用。

envp包含标准RFC 3875定义的特定CGI和HTTP变量。

  

我的问题是,还有其他我可以学习的东西吗?

关于所提到的协议的知识可能是一个良好的开端。 FastCGI开发工具包的documentationexamplesfcgiapp.h包含大多数公共职能的文档。