php-fpm для Windows? - PullRequest
       4

php-fpm для Windows?

31 голосов
/ 27 декабря 2010

На домашней странице PHP-FPM http://php -fpm.org / указано, что она является частью PHP с PHP 5.3.3.Теперь мне было интересно, когда я загружаю новейшие бинарные файлы PHP с php.net, там нет php-fpm.Как мне это получить?Это даже доступно для Windows?

Ответы [ 5 ]

25 голосов
/ 17 мая 2012

Вот как настроить php-fpm в Windows:

  1. Загрузите файл .zip из http://windows.php.net/download/. .zip-файл должен быть VC9 с файлом FastCGI (PHP-cgi.exe).Не загружайте VC6 и не загружайте MSI-файл, потому что для этого требуется установка IIS для установки php-fpm.ZIP-файл содержит php-cgi.exe, который вам нужен для php-fpm.Я скачал немного более старую версию, php-5.3.10-Win32-VC9-x86.zip, отсюда http://windows.php.net/downloads/releases/archives/, потому что я хотел соответствовать версии, запущенной на моем производственном сервере.

  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, например start-php-fcgi.bat в каталоге веб-сервера или в каталоге PHP:

    @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;
    }
    
10 голосов
/ 08 августа 2014

Ответ Дерексона - отличное начало.Однако для 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.мне больно несколько дней, чтобы понять это.

8 голосов
/ 18 января 2018

Старый, как этот пост, я должен взвесить здесь, потому что здесь было написано не PHP-FPM, он работает на PHP с использованием Fast-CGI.

Да PHP-FPM расшифровывается как процесс PHP-FastCGIManager и так реализует FastCGI, но вы забываете, что FPM гораздо больше, чем тот, который содержит функции управления процессами, которые не управляются веб-сервером.

В * nix системах PHP-FPM имеет отдельный процесс, который управляетДочерние процессы PHP и имеют подробную конфигурацию, чтобы указать, как эти процессы управляются.Подробнее об этих функциях читайте здесь

Запуск процесса CGI в Windows - это не одно и то же.Он не порождает рабочие процессы, не динамически их масштабирует и не разрешает многопоточность.

PHP-FPM для окон пока не существует.http://php.net/manual/en/install.fpm.php#121725

Однако, как было предложено, вы можете запустить процесс CGI, если хотите.

3 голосов
/ 28 апреля 2011

Начиная с PHP v5.3.3, поддержка FPM Server-API [SAPI] была интегрирована в ядро ​​PHP.Это означает, что вы можете взять исходные коды PHP, скомпилировать и собрать их с помощью FPM-SAPI [с использованием поддержки --enable-fpm параметр конфигурации] вместо, скажем, Apache SAPI [--enable-apx2].Как показано в PHP-Wiki , вы можете создавать PHP почти так же, как в * nix-системах, то есть в конфигурации.Я бы посоветовал вам сначала изучить все тонкости построения PHP в * nix-системах и даже попытаться сделать это самостоятельно [обычный шаблон configure, make и make install], а затем попытаться использовать опыт, полученный изэто для сборки в среде Windows.

В дополнение к параметру конфигурации --enable-fpm, есть также два дополнительных параметра: --with-fpm-user=USERNAME_HERE и --with-fpm-group=USERGROUPNAME_HERE.Они работают в среде * nix, но могут быть недоступны в Windows.

В целом, я уверен, что вы можете создать свое собственное серверное приложение PHP-FPM в Windows, используя Visual Studio IDE.Официальных сборок PHP-FPM на дату написания этой статьи не было.

РЕДАКТИРОВАТЬ 1: Хорошо, я могу ошибаться в отношении возможности сборки PHP-FPM в Windows, поскольку этот SAPI использует libeventкомпонент из среды * nix.Думаю, вам придется придерживаться Cygwin-комплектной установки в конце концов.

2 голосов
/ 03 января 2011

PHP-FPM доступен только для Linux на данный момент.Есть несколько сайтов, которые предоставляют учебник о том, как заставить php-fpm работать на Windows под Cygwin.Вы можете попробовать эти руководства.

...