开发基于Apache服务器上的CGI程序

上一节中成功的搭建了Apache服务器,这节将介绍使用C语言开发能在Apache服务器上运行的CGI程序


安装好Apache服务器后,在C:\Program Files\Apache Software Foundation\Apache2.2下有一些用于开发Apache服务器的文件

文件介绍:

bin:Apache服务器软件所在地

cgi-bi:保存C语言写的程序

conf:保存服务器设置的信息

error:网站发送错误的处理

htdcocs:保存HTML程序

icons:保存开发Apache程序用的图标

include:保存开发web程序用到的一些头文件

lib:保存的是开发web程序用到的一些库

logs:日志

manual:Apache服务器语言的设置

modlules:保存一些动态链接库


程序实例1:开发一个CGI版的hello world程序

开发工具:VS2012  Apache服务器

开发步骤:

首先使用VS2012编译下面的代码

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2.   
  3. void main()  
  4. {  
  5.     //设置HTML语言  
  6.     printf("Content-type:text/html\n\n");  
  7.   
  8.     //打印hello world, 我来自CGI  
  9.     //html中的换行符为<br>  
  10.     printf("hello world, 我来自CGI !<br>");  
  11. }  

编译成功后在工程目录下的Debug文件夹中会有一个exe格式的可执行文件,我编译的程序中生成的是CGI编程.exe


将exe文件复制到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin目录下,并且修改文件的格式,将CGI编程.exe改成hello.cgi


最后在IE浏览器中输入http://localhost/cgi-bin/hello.cgi


程序实例2:遍历Apache服务器中所有的环境变量

首先使用VS2012编译下面的代码

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     //设置HTML语言  
  7.     printf("Content-type:text/html\n\n");  
  8.   
  9.     printf("Eviroments:<br>");  
  10.   
  11.     //用于保存环境变量  
  12.     extern char** environ;  
  13.   
  14.     //遍历CGI中的所有环境变量  
  15.     for(int i=0; ;i++)  
  16.     {  
  17.         if(NULL == environ[i])  
  18.         {  
  19.             break;  
  20.         }  
  21.   
  22.         //打印CGI中所有的环境变量  
  23.         printf("%s<br>", environ[i]);  
  24.     }  
  25. }  


将exe文件复制到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin目录下,并且修改文件的格式,将CGI编程.exe改成eviroments.cgi

最后在IE浏览器中输入:http://localhost/cgi-bin/eviroments.cgi



程序实例3:使用环境变量获得服务器的类型

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     //设置HTML语言  
  7.     printf("Content-type:text/html\n\n");  
  8.   
  9.     printf("%s ",getenv("SERVER_SOFTWARE"));  
  10. }  


执行结果:


程序实例4:使用环境变量输出web信息

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     //设置HTML语言  
  7.     printf("Content-type:text/html\n\n");  
  8.   
  9.     //递交表单的浏览器的名称、版本   和其他平台性的附加信息。  
  10.     printf("%s<br><br>",getenv("HTTP_USER_AGENT"));  
  11.   
  12.     //CGI脚本运行时的主机名和IP地址  
  13.     printf("%s<br><br>",getenv("SERVER_NAME"));  
  14.   
  15.     //你的服务器的类型如:  
  16.     printf("%s<br><br>",getenv("SERVER_SOFTWARE"));  
  17.   
  18.     //指向这个CGI脚本的路径,  
  19.     printf("%s<br><br>",getenv("SCRIPT_NAME"));  
  20.   
  21.     //递交脚本的主机名,这个值不能被设置.  
  22.     printf("%s<br><br>",getenv("REMOTE_HOST"));  
  23.        
  24.     //递交脚本的主机IP地址.  
  25.     printf("%s<br><br>",getenv("REMOTE_ADDR"));  
  26.         
  27.     //运行CGI的版本  
  28.     printf("%s<br><br>",getenv("GATEWAY_INTERFACE"));   
  29.         
  30.     //服务器运行的TCP口.  
  31.     printf("%s<br><br>",getenv("SERVER_PORT"));  
  32.   
  33.     //服务器运行的HTTP协议.  
  34.     printf("%s<br><br>",getenv("SERVER_PROTOCOL"));  
  35. }  


执行结果:


程序实例5:在网页中添加超链接

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     //设置HTML语言  
  7.     printf("Content-type:text/html\n\n");  
  8.   
  9.     printf("<a href='http://www.baidu.com'>www.baidu.com</a>");  
  10. }  

执行结果:


程序实例6:使用环境变量实现参数传递

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     //设置HTML语言  
  7.     printf("Content-type:text/html\n\n");  
  8.   
  9.     char Name[256];  
  10.   
  11.     //使用环境变量获得传递的参数  
  12.     char* queryString = getenv("QUERY_STRING");  
  13.   
  14.     //把一个字符串解析到另一个字符串中  
  15.     //将获得的字符串中的%s打印到cName中  
  16.     sscanf(queryString, "name=%s", Name);  
  17.       
  18.     //打印传递的参数  
  19.     printf("hello %s<br>", Name);  
  20. }  


使用VS2012编译上面的代码,编译成功后,在工程目录下的Debug文件夹中会有一个exe文件,将exe文件修改成name.cgi,并且复制到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin中

最后在浏览器中输入http://localhost/cgi-bin/name.cgi?name=Tom

执行结果


程序实例7:使用环境变量传递多个参数

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. void main()  
  5. {  
  6.     //设置HTML语言  
  7.     printf("Content-type:text/html\n\n");  
  8.   
  9.     int i1,i2;//定义2个变量用于接收传递的参数  
  10.   
  11.     //使用环境变量获得传递的参数  
  12.     char* queryString = getenv("QUERY_STRING");  
  13.   
  14.     //把一个字符串解析到另一个字符串中  
  15.     //将获得的字符串中的%s打印到cName中  
  16.     sscanf(queryString, "i1=%d&i2=%d", &i1, &i2);  
  17.   
  18.     printf("%d+%d=%d", i1, i2, i1+i2);  
  19. }  
使用VS2012编译上面的代码,编译成功后,在工程目录下的Debug文件夹中会有一个exe文件,将exe文件修改成sum.cgi,并且复制到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin中

最后在浏览器中输入http://localhost/cgi-bin/sum.cgi?i1=12&i2=13

执行结果



程序实例8:在CGI中使用HTML

在记事本中输入下面的HTML语言,并且以HTML格式保存

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2. <body>  
  3.     <form method=get action="http://localhost/cgi-bin/sum.cgi">  
  4.        i1:<input type="text" name="i1"/>  
  5.        i2:<input type="text"name="i2"/>  
  6.        <input type="submit"/>  
  7.      </form>  
  8. </body>  
  9. </html>  


将保存好的HTML文件放在C:\Program Files\Apache Software Foundation\Apache2.2\htdocs目录下

在浏览器中输入http://localhost/sum.html

执行结果:



计算11+12的结果

在输入框中输入11和12


单击提交查询内容后显示了计算结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值