fcgi_stdio和 fcgiapp 有什么区别
What is the difference between fcgi_stdio and fcgiapp?
我正在尝试开始快速cgi开发,因此我下载了libfcgi
的参考实现,并尝试让测试程序与lighttpd
一起运行。由于fcgi_stdio
允许cgi
向后兼容性,因此我决定从此开始。但是我无法让examples/tiny-fcgi.c
与lighttpd
一起工作,它产生了一个internal server errror 500
,相同的配置允许完美运行lighttpd
示例程序(http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModFastCGI,低于C/C++ FastCGI on lightty named socket
)。但是,我完全不清楚为什么默认提供的示例不起作用。
问题:
- 参考实现中的 examples/tiny-fcgi.c 示例导致 lighttpd 返回错误 500 有什么问题?
- 哪种 fastcgi 实现更适合 c++ 开发(fcgi_stdio、fcgiapp、其他)?(fcgi 包中有一些流,但我找不到好的/任何文档)
我已经测试了未修改的示例(Ubuntu/13.10/amd-64、Apache/2.4.6、libapache2-mod-fastcgi/2.4.7~0910052141-1.1、libfcgi-dev/2.4.0-8.1ubuntu4),它运行正常:
manuelz@garibaldi:~$ curl habrich/tiny-fcgi
<title>FastCGI Hello! (C, fcgi_stdio library)</title>
<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>
Request number 2 running on host <i>habrich</i>
答案:
- 不知道您的配置很难分辨,但这里有一个黑暗中的镜头:如果未定义
SERVER_NAME
,getenv
将返回NULL
。 -
fcgiapp
是基本实现:我会将其用于新开发。fcgi_stdio
是与CGI兼容的包装器:使用它来迁移遗留的CGI项目。报价:fcgi_stdio 作为 FCGIAPP 顶部的薄层实现
fcgiapp
的体面文档。
我不知道
你的问题是否与我的问题有相同的起源,但至少它有相同的症状。
tiny-fcgi 示例有不同的版本。 我首先尝试了这里给出的那个(示例 1)。 此操作失败,出现内部服务器错误。 但是,这里给出的示例(基本相同)有效。 微小但关键的区别是工作代码使用
getenv("SERVER_NAME")
而不是
getenv("SERVER_HOSTNAME")
对我来说并不完全相同,但是如果我避免使用getenv
示例运行而没有错误,则必须发现为什么getenv
会导致错误
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::enable_if 和 std::enable_if_t 有什么区别?