使用erlang连接php的cgi处理方式,构建强大的web开发平台

发布于 2022-08-30 23:30:52 字数 4546 浏览 18 评论 1

  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.6rnContent-type: text/htmlrnrnhello php-cgi!">>
ok

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风苍溪 2022-09-02 07:24:17

楼主,我觉得你真的太厉害了~~~!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文