PHP-FPM的主页http://php-fpm.org/指出,它是自PHP 5.3.3以来的一部分。现在,我想知道,当我从php.net下载最新的PHP二进制文件时,其中没有php-fpm。我该如何获取它?它是否适用于Windows操作系统?
PHP-FPM的主页http://php-fpm.org/指出,它是自PHP 5.3.3以来的一部分。现在,我想知道,当我从php.net下载最新的PHP二进制文件时,其中没有php-fpm。我该如何获取它?它是否适用于Windows操作系统?
以下是如何在Windows上设置php-fpm:
从http://windows.php.net/download/下载.zip文件。.zip文件应该是VC9版本,其中包含FastCGI文件(php-cgi.exe)。不要下载VC6版本,也不要下载.msi文件,因为安装php-fpm需要已经设置好IIS。zip文件包含了php-cgi.exe,这是你需要的php-fpm文件。我下载了一个稍旧的版本,php-5.3.10-Win32-VC9-x86.zip,从这里http://windows.php.net/downloads/releases/archives/,因为我想与我的生产服务器上运行的版本相匹配。
解压文件,例如解压到C:\php-5.3.10-Win32-VC9-x86
根据需要编辑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
在某个地方创建一个 .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
双击 .bat 文件启动 php-fpm。一个窗口将弹出并保持打开状态,直到它停止运行。这有点烦人,但我还没有研究过如何设置为服务。
配置您的 Web 服务器。如果您想在 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;
}
虽然这篇文章很旧,但我还想发表一下观点,因为这里发布的不是关于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进程。
艾伦的回答是一个很好的开端。然而,对于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>
请注意,这是基于Apache Lounge上的帖子。虽然它很有帮助,但他们的版本在c:/php/php-cgi.exe周围加了引号,如果你这样做,它将无法启动php-cgi.exe,至少在Windows Server 2012上,你会得到HTTP 500错误。花了我痛苦的几天才找出来。
php-cgi.exe
引号的任何问题。就像参考帖子中所述,我怀疑这个问题影响了旧版本的Apache。当然,我使用的是Server 2008,而不是Server 2012。 - Jake Z--enable-fpm
配置参数] 支持编译和构建 PHP 的源代码,而不是像 Apache SAPI [--enable-apx2
] 一样。如在 PHP-Wiki 中所示,您可以以几乎与 *nix 系统相同的方式构建 PHP - 即配置方面。我建议您先学习在 *nix 系统中构建 PHP 的细节,甚至尝试自己构建[通常为configure
,make
和make install
模式],然后尝试利用从中获得的经验来构建 Windows 环境。
除了 --enable-fpm
配置参数外,还有两个额外的参数:--with-fpm-user=USERNAME_HERE
和 --with-fpm-group=USERGROUPNAME_HERE
。这两个参数适用于 *nix 环境,但可能在 Windows 上不可用。
总的来说,我相信您可以在 Windows 上使用 Visual Studio IDE 构建自己的 PHP-FPM 服务器应用程序。截至本文撰写日期,没有官方的 PHP-FPM 构建。
编辑 1:好吧,我可能错了,因为这个 SAPI 使用 *nix 环境中的 libevent
组件。看来您最终还是得坚持使用Cygwin-bundled 安装。
目前PHP-FPM仅适用于Linux系统。有些网站提供了在Windows系统下使用cygwin运行php-fpm的教程,您可以尝试按照这些指南操作。
PHP-FPM主要使用*NIX特定功能,不太可能被移植到Windows系统。实际上,这也没有太大的动力去做这件事情,尤其是考虑到php-cgi已经被开发出来了,可以让Windows特定的服务将其配置为fork pool。是的,它们之间还有差异,但并不足以推动社区对PHP-FPM进行完全重写。
请记住,Windows上的php-cgi不仅仅是CGI的多个实例,而是使用由Windows管理的forked FastCGI处理器池,该池使用与PHP-FPM相同的架构。多个进程完成PHP的模块初始化,并从这些进程中维护多个fork(需要时进行重新启动)以处理请求。自PHP3早期以来,php-cgi就不再是一个CGI。