免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6896 | 回复: 1
打印 上一主题 下一主题

[其他] 使用erlang连接php的cgi处理方式,构建强大的web开发平台 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-23 10:03 |只看该作者 |倒序浏览

  1. -module(test).
  2. -export([cgi_worker/0]).


  3. cgi_worker() ->
  4.     Env = [{"SERVER_SOFTWARE","test web server"},
  5.       {"SERVER_NAME","localhost"},
  6.       {"HTTP_HOST","localhost"},
  7.       {"GATEWAY_INTERFACE","CGI/1.1"},
  8.       {"SERVER_PROTOCOL","HTTP/1.1"},
  9.       {"SERVER_PORT","8080"},
  10.       {"REQUEST_METHOD","GET"},
  11.       {"REQUEST_URI","/t.php"},
  12.       {"DOCUMENT_ROOT","d:/www"},
  13.       {"DOCUMENT_ROOT_MOUNT","/"},
  14.       {"SCRIPT_FILENAME","d:/www/t.php"},
  15.       {"PATH_INFO",[]},
  16.       {"PATH_TRANSLATED",[]},
  17.       {"SCRIPT_NAME","/t.php"},
  18.       {"REMOTE_ADDR","127.0.0.1"},
  19.       {"REMOTE_HOST","127.0.0.1"},
  20.       {"SERVER_ADDR","127.0.0.1"},
  21.       {"LOCAL_ADDR","127.0.0.1"},
  22.       {"QUERY_STRING",[]},
  23.       {"HTTP_ACCEPT",
  24.        "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,i
  25. mage/png,*/*;q=0.5"},
  26.       {"HTTP_USER_AGENT",
  27.        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML
  28. , like Gecko) Chrome/4.0.206.1 Safari/532.0"},
  29.       {"HTTP_ACCEPT_CHARSET","GBK,utf-8;q=0.7,*;q=0.3"},
  30.       {"HTTP_ACCEPT_LANGUAGE","zh-CN,zh;q=0.8"},
  31.       {"HTTP_ACCEPT_ENCODING","gzip,deflate,sdch"},
  32.       {"HTTP_CACHE_CONTROL","max-age=0"}],%%构造http访问相关配置
  33.    
  34.     CGIPort = open_port({spawn, "f:/PHP/php-cgi.exe"},%%Port方式对外交互
  35.                         [{env, Env},
  36.                          {cd, "d:/www"},
  37.                          exit_status,
  38.                          binary]),
  39. cgi_get_line({start, CGIPort}).


  40. %%获取结果
  41. cgi_get_line({start, Port}) ->
  42.     receive
  43.         {Port, {data,Data}} ->
  44. io:fwrite("DATA:~p~n", [Data]);
  45.         {Port, {exit_status, 0}} ->
  46.             io:fwrite("~p~n", [{exit_status, 0}]);
  47.         {Port, {exit_status, Status}} when Status /=0 ->
  48.             io:fwrite("~p~n", [{exit_status, Status}]);
  49.         _Other ->
  50.             io:fwrite("~p~n", [_Other])
  51.     end.
复制代码


php脚本

  1. <?php
  2. echo 'ello php-cgi!';
  3. ?>
复制代码


以上纯粹直接构造,使用时请根据每个人环境加以修改,编译后运行如下:

67> c(test).         
{ok,test}
68> test:cgi_worker().
DATA:<<"X-Powered-By: PHP/5.2.6\r\nContent-type: text/html\r\n\r\nhello php-cgi!">>
ok



说明连接并执行成功,erlang以其强悍的网络并发处理(并非只谈性能)能力,加上php的脚本的简便,相信他们可以成为很好的互补。

论坛徽章:
0
2 [报告]
发表于 2010-02-02 14:38 |只看该作者
楼主,我觉得你真的太厉害了~~~!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP