扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
小编给大家分享一下cgi与php的主要区别有哪些,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
创新互联-专业网站定制、快速模板网站建设、高性价比淇县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式淇县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖淇县地区。费用合理售后完善,十多年实体公司更值得信赖。
区别:CGI是协议和标准,是一种规范,不是语言;遵循这个标准就可以用各种语言(包括PHP)编写程序处理网页请求和返回数据到客户端浏览器。而PHP是一个动态网页开发语言,PHP可以以CGI方式工作,也可以ISAPI、NSAPI等模块方式工作。
CGI是通用网关协议,是开发动态网页的一个标准,遵循这个标准就可以用BAT、CMD、sh、PERL、C、C++、PERL以及PHP等语言编写程序处理网页请求和返回数据到客户端浏览器。CGI是协议和标准,是一种规范,不是语言。
cgi是一种接口,不管用什么语言都可以按照这个接口进行实现。一般服务器判断需要调用cgi程序前,会把请求的GET参数放在环境变量QUERY_STRING里,POST请求内容则通过标准输入流输送到cgi程序内。cgi程序只需要将HTTP协议(包括HTTP头和HTTP Body)打印到标准输出流stdout,服务器就会把它们直接传输给浏览器。
//c++实现cgi接口,打印query string和post data #includeusing namespace std; int main() { cout << "Content-type:text/html\n\n"; const char *queryString = getenv("QUERY_STRING"); if (queryString != NULL) { cout << " query string is :" << queryString << "
" << endl; } else { cout << "No query string
" << endl; } string postData, tmpData; while(cin >> tmpData) { postData += tmpData; } if (postData != "") { cout << "" << postData << "" << endl; } else { cout << "No post data
" << endl; } return 0; }
把它编译好,命名为test.cgi,然后扔到服务器到cgi目录里。然后访问类似于http://localhost/cgi/test.cgi?a=b&c=d的URL,服务器就会把a=b&c=d放到QUERY_STRING环境变量中传给test.cgi。最后能看到页面上显示出query string is a=b&c=d。也可以创建一个表单,把数据POST到http://localhost/cgi/test.cgi,然后可以看到页面上显示出所有的POST data。
PHP是一个动态网页开发语言,主要用于处理浏览器提交的数据以及返回结果给浏览器。PHP可以以CGI方式工作,也可以以ISAPI、NSAPI等模块方式工作。
PHP写CGI程序:
#!/usr/env php query string is : $queryString"; } else { echo "No query string
"; } $postData = file_get_contents("php://stdin"); if ($postData != "") { echo "$postData"; } else { echo "No post data
"; } ?>
好吧它的功能跟上面C++写的程序一毛一样,我们把它加上“可执行属性”chmod +x testphp.cgi然后扔到cgi目录,然后访问http://localhost/cgi/testphp.cgi?a=b&c=d,以及用表单post数据给它,看到的效果应该是一样的。
所以你也看到了,服务器调用CGI程序,它才不管你用啥实现的,反正接口都定好了,只要按接口来编程就行。
但一般服务器调用PHP和调用CGI程序的逻辑不一样。CGI程序需要自己解析QUERY_STRING和POST_DATA,PHP应该是通过另一套扩展跟服务器交互的,所以一般用PHP直接写网页的时候,写网页的方式跟平时还真不太一样,比如说,服务器的php扩展已经帮我们把query string和post data解析成了数组,我们直接取值就好了:
No query string"; } if (isset($_POST)) { print_r($_POST); } else { echo "No post data
"; } ?>
存成test.php之后访问http://localhost/test.php?a=b&c=d,或者表单提交内容到页面。可以看到输出的数据都是结构化的,已经变成数组了。而且,HTTP头也不需要我们自己输出了(特殊情况除外)。
看完了这篇文章,相信你对cgi与php的主要区别有哪些有了一定的了解,想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流