CGI

Posted zww-kjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGI相关的知识,希望对你有一定的参考价值。

标题也就是这里要说的内容.

CGI也就是公用网关接口.  

历史:

  自从91年欧洲原子核研究中心开发出了www协议,网络服务的享受者就不局限于那些网络设计者了.

  借此,web技术就应运而生了.早期,web技术只是按照客户服务器方式进行静态的连接,一个是服务请求方,一个是服务提供方,提供的一般都是静态的,没法动态变化的内容.后来人们发现了其缺点,就进而思考去改变一下.   因此动态网页的概念就出现了!  动态网页就是可以动态变化,随用户的想法进行改变的网页.

  但是网络设计者就犯难了,这说起来简单,做起来难!   我们都知道使用网络,但是网络如何通信呢?   动态通信又如何进行呢?这里就不讲http协议是如何规定客户端及服务器端如何进行通信的了!   主要讲动态变化是如何实现的.

  首先,客户端发出服务请求,比如查询数据库的某条信息.  它就发送请求给服务器,服务器在受到请求后会对之进行处理,比如"你小子原来想查询李四的账号密码",但是我们要知道,服务器不是万能的,不是什么乱七八糟的东西它都要管,它想管的话要知道它要给请求方提供什么服务?且它怎么提供这种服务?在知道提供的确切服务后,他就要着手进行这种服务的进行.  通过什么呢?   就是CGI程序(脚本),如这个脚本告诉它,他应该怎么做来实现这种服务,它在执行这个脚本后就能回送给服务器,服务器在添加一定必要信息之后就能发送给客户端了.最后,客户端的浏览器就能解析这种信息并渲染在屏幕上了.

 

从上面就可以看出CGI就是一个信息进行交互的"接口",在我们的印象里,串行转并行,或者并行转串行大抵也是相同的道理.

CGI并不是一种语言,他只是一个标准,一种供信息在不同系统之间进行交换的一个规则,一种协议而已. 

下面代码展示一下如何用php语言实现一个具体的数据库查询功能的CGI程序.

以下是主页面.

 1 <!DOCTYPE html>
 2 <html>
 3     <head lang="en">
 4         <meta charset="UTF-8"/>
 5         <title>main-page</title>
 6         
 7         <style type="text/css">
 8             a{
 9                 text-decoration:none;
10                 display:block;
11                 border:1px red solid;
12             }
13             td{
14                 border:1px red solid;
15             }
16         </style>
17     </head>
18     <body background="img/main_page.jpg">
19     <h3 align="center" >hello this is a sql page ,you can take some actions to realize you target!</h3>
20         <div align="center">
21             <tr>
22                 <td><a href="select.php">select</a></td> <br/>
23                 <td><a href="insert.php">insert</a></td> <br/>
24                 <td><a href="delete.php">delete</a></td> <br/>
25                 <td><a href="update.php">update</a></td>
26             </tr>
27         </div>
28     </body>
29 </html>

以下是副页面:

 1 <!DOCTYPE html>
 2 <html>
 3     <head lang="en">
 4         <meta charset="UTF-8"/>
 5         <title>select-page</title>
 6         
 7         <style type="text/css">
 8         
 9         </style>
10         <script>
11 function showHint(str)
12 {
13   var xmlhttp;
14   if (str.length==0)
15   { 
16     document.getElementById("txtHint").innerHTML="";
17     return;
18   }
19   if (window.XMLHttpRequest)
20   {
21     // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
22     xmlhttp=new XMLHttpRequest();
23   }
24   else
25   {
26     // IE6, IE5 浏览器执行代码
27     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
28   }
29   xmlhttp.onreadystatechange=function()
30   {
31     if (xmlhttp.readyState==4 && xmlhttp.status==200)
32     {
33       document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
34     }
35   }
36   xmlhttp.open("GET","_select.php?q="+str,true);
37   xmlhttp.send();
38 }
39 
40 function myfunction()
41 {
42     var str=document.getElementById("txt1").value;
43     showHint(str);
44 }
45         </script>
46     </head>
47     
48     <body background="img/main_page.jpg">
49         
50         <p color="red"><strong>hello  this is a select-page!</strong></p>
51         <p display="inline">请输入主键:</p>
52         输入姓名: <input type="text" id="txt1"/>
53         <button type="button" onclick="myfunction()"/> click </button>
54         <div id="txtHint">
55         
56         </div>
57     </body>
58 </html>

以下是php实现的CGI程序实现的查询功能:

 1 <?php
 2 $servername = "localhost";
 3 $username = "root";
 4 $password = "1234";
 5 $dbname="goods";
 6 $q=$_GET[‘q‘];
 7 // 创建连接
 8 $conn = new mysqli($servername, $username, $password, $dbname);
 9  
10 // 检测连接
11 if ($conn->connect_error) {
12     die("连接失败: " . $conn->connect_error);
13 } 
14 
15 $sql="select * from customer";
16 $return = $conn->query($sql);
17 if($return->num_rows >0)
18 {
19     while($row=$return->fetch_assoc())
20     {
21         if($row[‘用户名‘]==$q)
22         {
23             $str="姓名:".$row[‘用户名‘].‘<br/>‘."性别:".$row[‘性别‘].‘<br/>‘.‘地址‘.$row[‘现住址‘];
24             $str=$str.‘<br/>‘.‘手机号:‘.$row[‘手机号‘].‘<br/>‘.‘邮箱:‘.$row[‘邮箱‘].‘<br/>‘;
25             echo $str;
26             break;
27         }
28         else{
29             continue;
30         }
31     }
32 }
33 else {
34     echo "0 结果";
35 }
36 
37 $conn->close();
38 ?>

 

以上,页面很简单.

见谅!

 

以上是关于CGI的主要内容,如果未能解决你的问题,请参考以下文章

20160214.CCPP体系详解(0024天)

shell脚本--编写CGI代码

Rails 框架上的 Ruby CGI 代码

(CVE-2012-1823)PHP-CGI远程代码执行漏洞

更新252板子代码(前端+cgi中间件)

Python CGI编程Ⅷ