php-fpm for Windows?

mar*_*000 32 php windows fastcgi

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

Ala*_*lan 26

这里如何在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"
    
    Run Code Online (Sandbox Code Playgroud)

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

    extension=php_curl.dll
    extension=php_mbstring.dll
    extension=php_mysqli.dll
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 但这不是php-fpm,它是fastcgi (45认同)
  • php-fpm = php-Fastcgi进程管理器 (15认同)
  • 虽然Severus是对的,但该指南很有用.在这种情况下,进程管理器是启动并杀死单个fastcgi进程的批处理文件.实际的php-fpm更加通用,并配有300行配置文件. (8认同)
  • @Alan是的,但这个答案仅仅是一个过程启动器.并发请求没有多线程或其他支持. (3认同)
  • 对不起戴先生,我没有尝试过用Apache.一旦我了解并开始使用NGINX,我就不再使用Apache了. (2认同)
  • php-cgi.exe 是一个 fastcgi 服务器,而不是 fastcgi 进程管理器。它只是产生 fcgi 进程。 (2认同)

Eri*_*ane 11

Dereckson的回答是一个很好的开始.但是,对于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> 
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是问题的答案.问题是fpm在Windows上是否以及在哪里.您提供了使用fpm的*替代*方法. (4认同)

小智 9

这个帖子很旧,我必须在这里权衡,因为这里发布的不是PHP-FPM,它使用Fast-CGI运行PHP.

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

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

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

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

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


小智 2

PHP-FPM 目前仅适用于 Linux。有一些网站提供了有关如何在 cygwin 下在 Windows 上运行 php-fpm 的教程。您可以尝试这些指南。

  • PHP-FPM 现在在 Windows 上安装相当容易。即使在 2011 年,你的答案也明显不正确:(1) 如果它在 Cygwin 下工作,那么它可以在 Windows 和 Linux 之外工作 (2) 它可以在 Solaris、FreeBSD、NetBSD、Mac OS X、OpenBSD 等上工作。 (6认同)