php-fpm for Windows?

时间:2010-12-27 15:25:01

标签: windows fastcgi php

PHP-FPM的主页http://php-fpm.org/表明它是PHP 5.3.3以来的PHP的一部分。现在,我想知道,当我从php.net下载最新的PHP二进制文件时,它没有php-fpm。我怎么得到它?它甚至适用于Windows吗?

5 个答案:

答案 0 :(得分:24)

这里如何在Windows上设置php-fpm:

  1. http://windows.php.net/download/下载.zip文件。 .zip文件应该是VC9,它有FastCGI文件(php-cgi.exe)。不要下载VC6,也不要下载.msi文件,因为它要求你已经安装了IIS才能安装php-fpm。 zip文件包含php-cgi.exe,这是php-fpm所需要的。我从这里http://windows.php.net/downloads/releases/archives/下载了一个稍旧的版本php-5.3.10-Win32-VC9-x86.zip,因为我想匹配我的生产服务器上运行的版本。

  2. 解压缩文件,例如解压缩到C:\ php-5.3.10-Win32-VC9-x86

  3. 根据需要编辑php.ini文件。我做了什么:

    # nginx security setting
    cgi.fix_pathinfo=0
    
    extension_dir = "C:\php-5.3.10-Win32-VC9-x86\ext"
    

    通过取消注释来启用以下模块:

    extension=php_curl.dll
    extension=php_mbstring.dll
    extension=php_mysqli.dll
    
  4. 在某处创建一个.bat文件,例如在webserver目录或PHP目录中的start-php-fcgi.bat:

    @ECHO OFF
    ECHO Starting PHP FastCGI...
    set PATH=C:\php-5.3.10-Win32-VC9-x86;%PATH%
    C:\php-5.3.10-Win32-VC9-x86\php-cgi.exe -b 127.0.0.1:9123 -c C:\php-5.3.10-Win32-VC9-x86\php.ini
    
  5. 双击.bat文件以启动php-fpm。一个窗口将弹出并在运行时保持打开状态。它有点烦人,但还没有考虑将其设置为服务。

  6. 配置您的网络服务器。如果您希望将它与nginx一起使用,请参阅127.0.0.1:9123的配置示例:

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9123;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
    

答案 1 :(得分:10)

德雷克森的回答是一个很好的开始。但是,对于Apache 2.4及更高版本,您不需要将PHP-FPM作为单独的服务运行,您可以使用mod_fcgid来处理Apache中的所有内容。

以下是配置示例:

LoadModule fcgid_module modules/mod_fcgid.so

FcgidInitialEnv PHPRC "c:/php"
FcgidInitialEnv PATH "c:/php;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "C:/WINDOWS/Temp"
FcgidInitialEnv TMP "C:/WINDOWS/Temp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 64
FcgidConnectTimeout 16
FcgidMaxRequestsPerProcess 500

<Files ~ "\.php$">
  AddHandler fcgid-script .php
  FcgidWrapper c:/php/php-cgi.exe .php
</Files> 

请注意,这是基于post in Apache Lounge。虽然有用,但是他们的版本引用了c:/php/php-cgi.exe,如果你这样做,它将无法启动php-cgi.exe,至少在Windows Server 2012上,你获得HTTP 500。我很痛苦的几天才弄明白。

答案 2 :(得分:8)

这篇文章很老,我必须在这里权衡,因为这里发布的不是PHP-FPM,而是使用Fast-CGI运行PHP。

是的PHP-FPM代表PHP-FastCGI流程管理器,因此实现了FastCGI,但您忘记了FPM远不止于此,因为它包含不由Web服务器管理的流程管理功能。

在* nix系统上,PHP-FPM有一个单独的进程来管理PHP子进程,并具有详细的配置来指定如何管理这些进程。有关这些功能的详细信息,请阅读here

在Windows上启动CGI进程并不是一回事。它不会产生工作进程或动态扩展它们或允许多线程。

目前还没有适用于Windows的PHP-FPM。 http://php.net/manual/en/install.fpm.php#121725

但是如您所愿,您可以根据需要启动CGI流程。

答案 3 :(得分:3)

启动PHP v5.3.3,FPM Server-API [SAPI]支持已集成到核心PHP中。这意味着,您可以使用PHP的源代码并使用FPM-SAPI [使用--enable-fpm配置参数]支持来编译和构建它们,而不是让我们说Apache SAPI [--enable-apx2]。如PHP-Wiki所示,您可以像在* nix系统中那样构建PHP - 就像配置一样。我建议你先了解在* nix系统中构建PHP的细节,甚至尝试自己[通常configuremakemake install模式],然后尝试利用从中获得的经验来构建Windows环境。

--enable-fpm配置参数外,还有两个附加参数:--with-fpm-user=USERNAME_HERE--with-fpm-group=USERGROUPNAME_HERE。这两个在* nix环境中工作,但可能在Windows中不可用。

总的来说,我非常确定您可以使用Visual Studio IDE在Windows上构建自己的PHP-FPM服务器应用程序。截至本文撰写之日,还没有正式的PHP-FPM版本。

编辑1:好的,猜测我在Windows上构建PHP-FPM的可能性可能是错的,因为此SAPI使用来自* nix环境的libevent组件。猜猜你毕竟必须坚持使用Cygwin-bundled installation

答案 4 :(得分:1)

PHP-FPM仅适用于linux。有一些网站提供了如何让php-fpm在windows下运行的教程,在cygwin下。你可以尝试这些指南。