设为首页 收藏本站
查看: 877|回复: 0

[经验分享] windows apache+cgi 运行c/c++

[复制链接]

尚未签到

发表于 2017-1-5 07:15:48 | 显示全部楼层 |阅读模式
     apache是运用比较广泛的web服务器,大多数是php应用,apache可以启动单独的c/c++进程,为web提供服务,这大大丰富的web内容,当然cgi这种方式不适用于大规模并发的场景. Ngix 据说比apache性能更高,可以考虑
 
1. apache安装
    windows下直接下载二进制安装文件,下一步即可; Linux下直接下载源码安装
 
2.配置
   $APACHE/conf/httpd.conf
   1. 将 LoadModule cgi_module modules/mod_cgi.so 前注释取消
   2. cgi的执行权限
  <Directory "D:/Apache2.2/cgi-bin">
  AllowOverride None
  Options Indexes ExecCGI   # 添加ExecCGI,允许执行cgi程序
  Order allow,deny
  Allow from all
  </Directory>
   3. 添加文件映射
   AddHandler cgi-script .cgi .pl .py 
  
   注: *.html文件默认放在$APACHE/htdocs下,cgi处理程序放在$APACHE_HOME/cgi/bin下; 修改配置文件后,apache服务需要重启; 部署cgi程序,直接拷贝至/cgi-bin,无需重启服务
 
3. 测试运行
   3.1  安装成功后,直接运行键入http://localhost,会在浏览器在显示It works! , 实际上执行的是 $APACHE/htdocs/index.html
   3.2  运行python脚本

#!D:\Python27\python.exe
#coding=UTF-8
print "Content-type: text/html;charset=utf-8"
print ""
print "<html><head></head><body>"
print "<h2>Hello World | 显示中文</h2>"
print "</body></html>"
'''
print "Content-type: text/plain\r\n"
print "hello World"
'''
 
    DSC0000.png
    3.3 执行c/c++程序
    

/**
*@brief 以文本方式在网页上输出系统信息
*/
int main(int argc,char **argv)
{
// fprintf(stdout,"content-type:text/plain\r\n\r\n");
// 注意,此处必须添加两个\r\n,不然500错误,输出页面一定要指定 Content-type, 否则500错误; 常用的 text/plain,text/html,application/json ...
[size=1em]printf("content-type:text/plain\r\n\r\n");
char *pszMethod;
pszMethod =getenv("REQUEST_METHOD");
if(strcmp(pszMethod,"GET") == 0)  // get
{     
// 读取环境变量来获取数据
printf("This is GETMETHOD!\n");
printf("SERVER_NAME:%s\n",getenv("SERVER_NAME"));
printf("REMOTE_ADDR:%s\n",getenv("REMOTE_ADDR"));
fprintf(stdout,"input data is:%s\n",getenv("QUERY_STRING"));
}
else  // post
{  
// 读取STDIN来获取数据
int iLength=atoi(getenv("CONTENT_LENGTH"));
printf("This is POSTMETHOD!\n");
fprintf(stdout,"input data is:\n");
for(int i=0;i<iLength;i++)
{
char cGet=fgetc(stdin);
fputc(cGet,stdout);
}
}
return 0;
}
    
     DSC0001.png
     将代码编译成以*.cgi命名(不重命名也没影响)的二进制文件拷贝至/cgi-bin目录即可在浏览器中访问. SERVER_NAME,REMOTE_ADDR等都是系统环境变量,是web服务器传递数据给cgi程序的有效手段,详见 http://www.cfanz.cn/?c=article&a=read&id=39576
 
   3.4 错误列表
   搭建环境不是一帆风顺的,总是会出现一些错误,页面上经常会显示:  500 Internal Server Error ,别急,可通过 $APACHE/logs/error.log 分析错误
   * /cgi-bin/hello.py is not executable; ensure interpreted scripts have "#!" or "'!" first line
   上述错误描述比较详细,python脚本必须在第一行定义解释器的目录,以#!开头
  * [error] [client 127.0.0.1] Premature end of script headers: cgi_test.cgi
   这个错误比较常见,看描述相当于啥也没说,其实就是cgi程序没有正常运行起来,大致有如下原因:   
   (1) 配置没有打开, AddHandler cgi-script .cgi 
   (2) Linux 下 cgi_test 没有执行权限
   (3) 程序无法运行,或缺少依赖库,依赖库放于PATH目录或/cgi-bin下
   (4) 程序运行异常,中途退出,未正常返回. 一般都是该原因引起的 
   (5) 文档类型定义错误,必须是 Content-type: xxx\r\n\r\n,两个\r\n,少一个则报错
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-323918-1-1.html 上篇帖子: ( 转)windows 下apache的MPM 下篇帖子: Wins2003系统中Apache性能优化方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表