C语言1个好用且有利于的法斯特Cgi C++库 – 法斯特Cgi++

不知底你是或不是早已发愁过使用法斯特Cgi库来选取C++开垦法斯特cgi程序繁琐而且会与C++
STL代码发生争执的地点,大概你要么习惯了cout而不是pringf,那那篇小说就可以理解到3个接纳的可比少的法斯特Cgi
的C++库  —— 法斯特Cgi++ / 法斯特Cgipp。

付出条件:

  OS: Centos
7

  编译器:gcc 4.8.3

准备:

  一. 自个儿的yum源中从不找到Fastcgi++,而且,正如作者过去的习惯的话,我大概相比较喜欢源码编译: )

    法斯特Cgi++
官方介绍: http://www.nongnu.org/fastcgipp/

      下载
源码:最新版本为2.一版本 http://download.savannah.nongnu.org/releases/fastcgipp/fastcgi++-2.1.tar.bz2

  二.  海外大好些个开源库中都会采取Boost库,所以,免不了必要安装libboost-devel。参考Mongodb中对Boost库的装置。或然直接yum
install boost-devel,也就一味是依赖那叁个非标准化准库,所以不须求设置任何。

  三.  出于是法斯特Cgi Application
,选八个一个WebServer来表明他的实践成果。采用Nginx,作者的Nginx版本为一.6.0

 

编译:

  一.  那1段确实也没怎么好说的

      tar -xvjf fastcgi++-2.1.tar.bz2

      ./configure –disable-shared –enable-static

      make && make install

  再不钦定prefix的门路的动静下,GCC编译也就会到暗中认可的路线去搜寻头文件与库文件。那里,小编选用编写翻译成了静态库的样式,不必要数据库有关的操作,不须求编写翻译进去.

主干选用:

 

开首采用:

   

/**
 * Fastcgi++ Test by kk
 * main.cpp
 */

#include <boost/date_time/posix_time/posix_time.hpp>
#include <fstream>
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
void error_log(const char* msg)
{
   using namespace std;
   using namespace boost;
   static ofstream error;
   if(!error.is_open())
   {
      error.open("/tmp/errlog", ios_base::out | ios_base::app);
      error.imbue(locale(error.getloc(), new posix_time::time_facet()));
   }
   error << '[' << posix_time::second_clock::local_time() << "] " << msg << endl;
}
class HelloWorld: public Fastcgipp::Request<wchar_t>
{
   bool response()
   {
      wchar_t russian[]={ 0x041f, 0x0440, 0x0438, 0x0432, 0x0435, 0x0442, 0x0020, 0x043c, 0x0438, 0x0440, 0x0000 };
      wchar_t chinese[]={ 0x4e16, 0x754c, 0x60a8, 0x597d, 0x0000 };
      wchar_t greek[]={ 0x0393, 0x03b5, 0x03b9, 0x03b1, 0x0020, 0x03c3, 0x03b1, 0x03c2, 0x0020, 0x03ba, 0x03cc, 0x03c3, 0x03bc, 0x03bf, 0x0000 };
      wchar_t japanese[]={ 0x4eca, 0x65e5, 0x306f, 0x4e16, 0x754c, 0x0000 };
      wchar_t runic[]={ 0x16ba, 0x16d6, 0x16da, 0x16df, 0x0020, 0x16b9, 0x16df, 0x16c9, 0x16da, 0x16de, 0x0000 };
      out << "Content-Type: text/html; charset=utf-8\r\n\r\n";
      out << "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";
      out << "<title>fastcgi++: Hello World in UTF-8</title></head><body>";
      out << "English: Hello World<br />";
      out << "Russian: " << russian << "<br />";
      out << "Greek: " << greek << "<br />";
      out << "Chinese: " << chinese << "<br />";
      out << "Japanese: " << japanese << "<br />";
      out << "Runic English?: " << runic << "<br />";
      out << "</body></html>";
      err << "Hello apache error log";
      return true;
   }
};
int main()
{
   try
   {
      Fastcgipp::Manager<HelloWorld> fcgi;
      fcgi.handler();
   }
   catch(std::exception& e)
   {
      error_log(e.what());
   }
}

  使用GCC将其编写翻译:g++ -o main -lboost_system-mt -lboost_thread-mt
-lfastcgipp main.cpp

 

验证:

  由于是三个法斯特Cgi程序,所以就要求四个lighthttpd项目中二个fastcgi运营器spawn-fastcgi(行吗,临时先运行器这么叫,小编想在底下的稿子源码具体搜求一下spawn-fastcgi的进行进度)

  网上有关spawn-fastcgi的教程大多,编写翻译起来也轻巧。贴上源码下载路径就好:http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz

  更动Nginx配置文件 nginx.conf 在server中参与fastcgi配置:

  

location ~\.fcgi$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.fcgi;
                        fastcgi_param SCRIPT_FILENAME /$fastcgi_script_name;
                        include fastcgi_params;
                }

  重启Nginx重新加载配置文件。

  运行spawn-fastcgi程序:  

    spawn-fastcgi -a 127.0.0.1 -C 20 -p 9000 main

  成功唤醒:spawn-fcgi: child spawned successfully: PID: 1340四 

  以后张开浏览器,输入localhost/test.fcgi就能看出C++代码输出的值了。

 

后记:

  从前一直利用的法斯特Cgi库,可是那是1个C语言的库,用C++来开垦应用极其不方便人民群众,而且会出现局地不著名的失实。法斯特Cgi++使用OOP设计,能到家的使用C++来开垦FastCgi程序。在前面包车型客车文章会详细的牵线法斯特Cgi++的利用办法。
🙂  工作欢腾