使用WEBrick来提供PHP Web应用程序服务

5
我是一名PHP开发者,最近开始学习Ruby on Rails。我喜欢Rails应用程序的快速开发方式,其中最让我喜欢的是WEBrick。它可以避免为每个小项目配置Apache和虚拟主机。WEBrick可以轻松启动和关闭服务器,使您可以在Web应用程序中点击浏览。
但我并不总能有幸使用Ruby on Rails应用程序,因此我想知道如何配置(或修改)WEBrick,以便将其用于我的PHP项目和Zend Framework应用程序的服务。
您是否尝试过这样做?要实现这个目标,需要哪些必要步骤呢?

你确定要使用它吗?维基百科的文章让我感到担忧:“尽管WEBrick很受欢迎,但由于代码完全没有记录,因此它已经获得了一些臭名。” - Charles
4个回答

7
为在webrick中支持php,您可以使用php文件的处理程序。为此,您需要扩展HttpServlet :: AbstractServlet并实现do_GET和do_POST方法。这些方法将用于从浏览器发起的GET和POST请求。在那里,您只需将传入请求提供给php-cgi即可。
要使PHPHandler处理php文件,您需要将其添加到特定挂载点的HandlerTable中。您可以像这样操作:
s = HTTPServer.new(
    :Port => port,
    :DocumentRoot => dir,
    :PHPPath => phppath
)
s.mount("/", HTTPServlet::FileHandler, dir, 
    {:FancyIndexing => true, :HandlerTable => {"php" => HTTPServlet::PHPHandler}})

第一条语句初始化了服务器。第二条添加了选项到DocumentRoot挂载。这里启用了目录列表,并使用PHPHandler处理php文件。之后可以使用s.start()启动服务器。
我自己编写了一个PHPHandler,因为我在其他地方没有找到。它基于webricks的CGIHandler,但进行了重新设计以使其与php-cgi配合使用。你可以在GitHub上查看PHPHandler:

https://github.com/questmaster/WEBrickPHPHandler


3

您可以使用nginxlighttpd

以下是一个最小化的 lighttpd 配置文件。

  1. 安装支持 FastCGI 的 PHP,并根据您的系统调整下面的 "bin-path" 选项。您可以使用MacPorts进行安装,使用命令 sudo port install php5 +fastcgi
  2. 将此文件命名为 lighttpd.conf
  3. 然后从任何您想提供服务的目录中运行 lighttpd -f lighttpd.conf
  4. 在您的 Web 浏览器中打开 localhost:8000

lighttpd.conf:

server.bind = "0.0.0.0"
server.port = 8000
server.document-root = CWD
server.errorlog          = CWD + "/lighttpd.error.log"
accesslog.filename       = CWD + "/lighttpd.access.log"

index-file.names = ( "index.php", "index.html",
                    "index.htm", "default.htm" )

server.modules = ("mod_fastcgi", "mod_accesslog")

fastcgi.server = ( ".php" => (( 
  "bin-path" => "/opt/local/bin/php-cgi",
  "socket" => CWD + "/php5.socket",
)))

mimetype.assign = (  
  ".css"        =>  "text/css",
  ".gif"        =>  "image/gif",
  ".htm"        =>  "text/html",
  ".html"       =>  "text/html",
  ".jpeg"       =>  "image/jpeg",
  ".jpg"        =>  "image/jpeg",
  ".js"         =>  "text/javascript",
  ".png"        =>  "image/png",
  ".swf"        =>  "application/x-shockwave-flash",
  ".txt"        =>  "text/plain"
)

# Making sure file uploads above 64k always work when using IE or Safari
# For more information, see http://trac.lighttpd.net/trac/ticket/360
$HTTP["useragent"] =~ "^(.*MSIE.*)|(.*AppleWebKit.*)$" {
  server.max-keep-alive-requests = 0
}

如果您想使用自定义的php.ini文件,请将bin-path更改为以下内容:

"bin-path" => "/opt/local/bin/php-fcgi -c" + CWD + "/php.ini",

如果您想配置nginx实现相同的功能,这里有一个指针

我甚至不知道lighttpd或nginx。我得试试这个。谢谢! - Andrew

0
我发现了this, 但我真的认为这不值得麻烦。创建一个虚拟主机(甚至也不需要)那么难吗?如果你能让它工作的话,在你设置它的时间内,你可以编写一个脚本为你创建虚拟主机条目,使它像webrick一样容易。

0

看起来WEBrick支持CGI, 这意味着您可以通过将其作为CGI脚本调用来运行PHP。每个可执行文件顶部的#!行只需要指向php-cgi.exe的绝对路径。

值得注意的是,当将文件移动到任何其他不将PHP视为CGI脚本的服务器时,您需要删除 #! 行,这将是...嗯...所有的服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接