有个php的php 获取网页内容,怎么在goahead里使用cgi运行?有详细教程吗?

PHP三种运行方式mod_php5/cgi/fast-cgi | Rming
Please click
if you are not redirected within a few seconds.
PHP三种运行方式mod_php5/cgi/fast-cgi
a.通过HTTPServer内置的模块来实现,
例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;
b.通过CGI来实现
这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器;另一方面就是不太安全;该方面几乎很少使用了。
c.最新出现一种叫做FastCGI。
所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进 程,每次HTTPServer遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。
该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏;
但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响 应或者将动态脚本解析器的结果返回给用户客户端。所以比较起Apache的内置模块方式,有时候性能要提高很多。有人测试可能会达到 Apache+mod_php的5~10倍。
三种常用模式:
Apache+mod_php5;
lightppd+spawn-
nginx+PHP-FPM
我们可以使用到生产环境中的:
0) 如果不是server cluster的话:
可以使用以上任一种,不过有各种测试表明nginx+PHP-FPM性能优越,但是Apache+mod_php5很经典模块多,比如对.htaccess等的支持。
如果构建server cluster的话:
1) nginx作为反向代理服务器,后台多台Apache+mod_php5。
nginx处理静态文件,及对php并发请求对后台多台app server的负载均衡;
2) nginx作为反向代理器,后台多台PHP-FPM
nginx处理静态文件及将php并发请求发送到后台php-fpm来解析;21ic官方微信-->
请完成以下验证码
求嵌入式WEB服务器GoAhead入门教程
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
本人刚接一项目,需要基于嵌入式WEB 服务器GoAhead做一套控制程序,从github上下载了最新的代码。并且在Linux上编译安装完成,现在可以运行静态文件,cgi程序。但是对GoAhead里面的goforms、action这些不清楚如何入手。在网上百度了一些,也没见到比较完整的例子。其中比较好的是某篇blog上提到的内容。如下
****************************************************************************************************
建立一个form.asp,并保存到项目/web/目录下,内容如下:
&html&
&!-Copyright(c) Go Ahead software Inc.,.All Rights Reserved.-&
&head&
&title&Goahead Form Test &/title&
&link rel=&stylesheet& href=&style/normal_ws.css& type=&text/css&&
&/head&
&body&
&h1&Goahead Form Test 1&/h1&
&form action=/goform/formTest method=POST&
&table&
&tr&
&td&Name:&/td&&td&&input type=text name=name size=50 value=&&&&/td&
&/tr&
&tr&
&td&Addr:&/td&&td&&input type=text name=addr size=50 value=&&&&/td&
&/tr&
&tr&
&td&&/td&
&td ALIGN=&CENTER&&
&input type=submit name=ok value=&OK&& &input type=submit name=ok value=&CANCEL&&&/td&
&/tr&
&/table&
&/form&
&/body&
&/html&复制代码
****************************************************************************************************
在 goahead 中增加如下内容:
websFormDefine(T(&formTest&), formtest); // 注册
static void formtest(webs_t wp, char_t *path, char_t *query) // 原型
{
char_t *name, *
name = websGetVar(wp, T(&name&), T(&&));
addr = websGetVar(wp, T(&addr&), T(&&));
websHeader(wp);
websWrite(wp, T(&&body&&h2&Name: %s, Addr: %s&/h2&\n&),name, addr);
websFooter(wp);
websDone(wp, 200);
}复制代码
****************************************************************************************************
关于文章中描述的“在 goahead 中增加如下内容”,一直没搞明白,是在goahead.c中添加上述代码后再编译安装goahead,还是另外编写处理。
如果在goahead.c中添加代码,应该添加在什么位置呢?如果是另外编写程序,又改怎么处理?
烦请各路大侠指点,万分感谢!!!
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJst 来进行自定义函数的定义。修改程序主要是在goahead的源代码http.c里面进行。
步骤如下:
1、创建自己的函数,如
static void buy(Webs *wp)
& & & & char *name,*
& & & & websSetStatus(wp, 200);
& & & & websWriteHeaders(wp, -1, 0);
& & & & websWriteEndHeaders(wp);
& & & & name=websGetVar(wp, &name&, NULL);
& & & & item=websGetVar(wp, &item&, NULL);
& & & & websWrite(wp,&&&Age %s&, websGetVar(wp, &age&, &&));*/
& & & & printf(&Name=%d \n\n&,name);
& & & & printf(&Item=%d \n\n&,item);
& & & & websWrite(wp, &&html&&body&&p&Name %s&/p&&p&Item:%s&/p&&/body&&/html&\n&, name,item);
& & & & websFlush(wp, 0);
& & & & websDone(wp);
2、在static void initWebs(Webs *wp, int flags, int reuse)中进行注册。如:
& & & & websDefineAction(&buy&, buy);
3、在程序前面定义函数,否则编译不通过。如:
static void& & & & buy(Webs *wp);
4、在goahead源代码里面的route.txt添加配置,如下
#route uri=/action handler=action------------------这个记得要注释掉,我也不知道为啥,不注释的话,就会访问不到
route uri=/action/buy methods=GET|POST handler=action
5、重新使用make编译源代码,再install
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
补充一下,我最新的代码是直接从github上下载的,这里不准贴链接,所以就不贴了,版本是3.6.3。
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJ ...
能者自答,赞一个
终于自己摸索出来了,新版本的goahead和之前的很不一样的。现在基本上就用websDefineAction,和websDefineJ ...
论坛用这个的比较少
扫描二维码,随时随地手机跟帖
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
您需要登录后才可以回帖
热门推荐 /3基于php在各种web服务器的运行模式详解
字体:[ ] 类型:转载 时间:
本篇文章是对php在各种web服务器的运行模式进行了详细的分析介绍,需要的朋友参考下
一、php在apache中运行模式&php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL以下分别比较:1. CGI模式与模块模式比较:php在apache中两种工作方式的区别(CGI模式、Apache 模块DLL)这两种工作方式的安装:PHP 在 Apache 2.0 中的 CGI 方式ScriptAlias /php/ "c:/php/"AddType application/x-httpd-php .php# 对 PHP 4 用这行Action application/x-httpd-php "/php/php.exe"# 对 PHP 5 用这行Action application/x-httpd-php "/php/php-cgi.exe"PHP 在 Apache 2.0 中的模块方式# 对 PHP 4 用这两行:LoadModule php4_module "c:/php/php4apache2.dll"# 别忘了从 sapi 目录中把 php4apache2.dll 拷贝出来!AddType application/x-httpd-php .php# 对 PHP 5 用这两行:LoadModule php5_module "c:/php/php5apache2.dll"AddType application/x-httpd-php .php# 配置 php.ini 的路径PHPIniDir "C:/php"这两种工作方式的区别:在CGI模式下,如果客户机请求一个php文件,Web服务器就调用php.exe去解释这个文件,然后再把解释的结果以网页的形式返回给客户机;而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。所以从某种角度上来说,以apache模块方式安装的 PHP4有着比CGI模式更好的安全性以及更好的执行效率和速度。2. FastCGI运行模式分析:FastCGI的工作原理是:(1)、Web Server 启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module);(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。(3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。 (4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi.exe在此便退出了。在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。3. 为什么要使用FastCGI,而不是多线程CGI解释器?这可能出于多方面的考虑,例如:(1)、你无论如何也不能在windows平台上稳定的使用多线程CGI解释器,无论是IIS ISAPI方式还是APACHE Module方式,它们总是运行一段时间就崩溃了。奇怪么?但是确实存在这样的情况!当然,也有很多时候你能够稳定的使用多线程CGI解释器,但是,你有可能发现网页有时候会出现错误,无论如何也找不到原因,而换用FastCGI方式 时这种错误的概率会大大的降低。我也不清楚这是为什么,我想独立地址空间的CGI解释器可能终究比共享地址空间的形式来得稳定一点点。(2)、性能!性能?可能么,难道FastCGI比多线程CGI解释器更快?但有时候确实是这样,只有测试一下你的网站,才能最后下结论。原因嘛,我觉得 很难讲,但有资料说在Zend WinEnabler的时代,Zend原来也是建议在Windows平台下使用FastCGI而不是IIS ISAPI或Apache Module,不过现在Zend已经不做这个产品了。4. FastCGI 模式运行PHP 的优点:以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好(我本来用 ApacheBench 进行了测试,但忘了保存结果,大家有兴趣可以自己测试)。最后,就是可以同时运行 PHP5 和 PHP4。参考下面的配置文件,分别建立了两个虚拟主机,其中一个使用 PHP5,另一个使用 PHP4。 代码如下:LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dllScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"FastCgiServer "d:/usr/local/php-4.3.11/php.exe"Listen 80NameVirtualHost *:80DocumentRoot d:/wwwOptions Indexes FollowSymlinks MultiViewsServerName php5.localhostAddType application/x-httpd-fastphp5 .phpAction application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"IndexOptions FancyIndexing FoldersFirstOptions Indexes FollowSymLinks MultiViewsAllowOverride NoneOrder allow,denyAllow from allListen 8080NameVirtualHost *:8080DocumentRoot d:/wwwOptions Indexes FollowSymlinks MultiViewsServerName php4.localhostAddType application/x-httpd-fastphp4 .phpAction application/x-httpd-fastphp4 "/fcgi-php4/php.exe"Options Indexes FollowSymLinks MultiViewsAllowOverride NoneOrder allow,denyAllow from all使用上面的配置,访问 http://localhost/ 就使用 PHP5,而访问 http://localhost:8080/ 就使用 PHP4。所以只要合理配置,就可以让不同的虚拟主机使用不同版本的 PHP。FastCGI 模式的一些缺点:说完了好处,也来说说缺点。从我的实际使用来看,用 FastCGI 模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI 模式。最后,在 Windows 中以 FastCGI 模式存在潜在的安 二、php 在nginx 中运行模式(nginx+PHP-FPM )目前理想选择&使用FastCGI方式现在常见的有两种stack:ligthttpd+spawn- 另外一种是nginx+PHP-FPM(也可以用spawn-fcgi) 。(1) 如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。(2) 该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对php支持,但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错)。另一个:首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了。c. 由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器,叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点:由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM三、IIS+ ISAPI模式这种模式适合开发环境中, 生产环境中用的较少。四、总结目前在HTTPServer这块基本可以看到有三种stack比较流行:(1)Apache+mod_php5(2)lighttp+spawn-fcgi(3)nginx+PHP-FPM三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具goahead 能支持多少并发_百度知道
goahead 能支持多少并发
我有更好的答案
其实php在goahead中作为cgi程序运行的!!很简单的
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 php网页 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信