PHP-FPM的主页http://php-fpm.org/表明它是PHP 5.3.3以来的PHP的一部分。现在,我想知道,当我从php.net下载最新的PHP二进制文件时,它没有php-fpm。我怎么得到它?它甚至适用于Windows吗?
答案 0 :(得分:24)
这里如何在Windows上设置php-fpm:
从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,因为我想匹配我的生产服务器上运行的版本。
解压缩文件,例如解压缩到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。一个窗口将弹出并在运行时保持打开状态。它有点烦人,但还没有考虑将其设置为服务。
配置您的网络服务器。如果您希望将它与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)
以下是配置示例:
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的细节,甚至尝试自己[通常configure
,make
和make 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下。你可以尝试这些指南。