Php

OS X 上的 Nginx 和 PHP-FPM

  • May 30, 2012

我一直想用 PHP-FPM 試用 Nginx。我通過 Macports 安裝了 Nginx。我讀到 PHP 5.3.3 包含 PHP-FPM,但是 Macports 上的 PHP 5.3.3 配置沒有啟用它。

誰能解釋或向我介紹如何在 OS X 上為 Nginx 安裝 PHP-FPM 的 PHP 5.3.3 的教程?我想將它放在 /opt 中 Nginx 的位置,以使其遠離我在 /usr/local 中與 Apache 一起使用的 PHP。

我是命令行的新手。原諒我的無知。

我能夠在上面接受@Struder 的回答,並且大部分都讓它工作,但是像@Seth 我得到了“無法統計 sapi/cgi/php-cgi”錯誤。

我最終對 Portfile 進行了一些額外的調整:僅在使用 fastcgi 變體時添加 enable-fpm,消除“cannot stat”錯誤,並將預設的 php-fpm 配置文件複製到位。配置文件仍然需要使用者自定義,但是這個 portfile 會讓你啟動並執行 php5.3.3。

# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 71588 2010-09-17 05:21:24Z ryandesign@macports.org $

PortSystem              1.0

name                    php5
conflicts               php5-devel php52
# Update revision of php5-eaccelerator when updating version of php5
epoch                   1
version                 5.3.3
revision                2
set major               [lindex [split ${version} .] 0]
set my_name             php${major}
dist_subdir             ${my_name}
categories              lang php www
maintainers             ryandesign jwa
homepage                http://www.php.net/
master_sites            php
distname                php-${version}
use_bzip2               yes
platforms               darwin freebsd
use_parallel_build      yes

description \
   PHP: Hypertext Preprocessor

long_description \
   PHP is a widely-used general-purpose scripting language \
   that is especially suited for developing web sites, but can also \
   be used for command-line scripting.

checksums \
   [suffix ${distname}] \
   md5     21ceeeb232813c10283a5ca1b4c87b48 \
   sha1    9f66716b341119e4e4f8fe3d81b7d0a5daf3cbc8 \
   rmd160  9edb51663feac9b787f8382012893f1ac98fec6a

depends_build \
   port:pkgconfig \
   port:autoconf213

depends_lib \
   path:bin/gsed:gsed \
   port:libtool \
   port:libxml2 \
   port:bzip2 \
   port:mhash \
   port:pcre \
   port:readline \
   port:zlib

# Use -p1 to accommodate the Suhosin patch
patch.pre_args          -p1
patchfiles              patch-scripts-php-config.in.diff \
                       patch-ext-mysqlnd-mysqlnd.h.diff

use_autoconf            yes
autoconf.cmd            ${prefix}/bin/autoconf213

set phpinidir           ${prefix}/etc/${my_name}
set extraphpinidir      ${prefix}/var/db/${my_name}

destroot.keepdirs       ${destroot}${extraphpinidir}

configure.args \
   --mandir=${prefix}/share/man \
   --infodir=${prefix}/share/info \
   --with-config-file-path=${phpinidir} \
   --with-config-file-scan-dir=${extraphpinidir} \
   --disable-all \
   --enable-bcmath \
   --enable-ctype \
   --enable-dom \
   --enable-fileinfo \
   --enable-filter \
   --enable-hash \
   --enable-json \
   --enable-libxml \
   --enable-pdo \
   --enable-phar \
   --enable-session \
   --enable-simplexml \
   --enable-tokenizer \
   --enable-xml \
   --enable-xmlreader \
   --enable-xmlwriter \
   --with-bz2=${prefix} \
   --with-mhash=${prefix} \
   --with-pcre-regex=${prefix} \
   --with-readline=${prefix} \
   --with-libxml-dir=${prefix} \
   --with-zlib=${prefix} \
   --without-pear \
   --disable-cgi

# php5-mysql +mysqlnd needs mysqlnd support compiled into php
configure.env-append    PHP_MYSQLND_ENABLED=yes

configure.universal_args-delete --disable-dependency-tracking

platform darwin 10 {
   configure.env-append \
       LIBS=-lresolv
}

variant no_web conflicts apache apache2 fastcgi description {Don't include any web server support} {}

# Build an Apache 1 module. On Mac OS X, it uses Apple's provided Apache 1 server.
# On other platforms, the MacPorts apache port is used. Keep the options here
# in sync with those in the relevant part of the post-destroot phase.
variant apache conflicts apache2 no_web description {Add Apache 1 web server module} {
   if { ! [variant_isset macosx] && (![info exists os.subplatform] || ${os.subplatform} != "macosx") } {
       depends_lib-append \
           port:apache
       configure.args-append \
           --with-apxs=${prefix}/sbin/apxs
   } else {
       destroot.violate_mtree yes
       configure.args-append \
           --with-apxs=/usr/sbin/apxs
   }
}

# Build an Apache 2.2 module. Keep the options here in sync with those in the
# relevant part of the post-destroot phase.
variant apache2 conflicts apache no_web description {Add Apache 2.2 web server module} {
   pre-configure {
       # Checking for mod_cgi.so is a convenient way to verify apache2 is using its
       # +preforkmpm variant. (+eventmpm and +workermpm instead provide mod_cgid.so.)
       if {![file exists ${prefix}/apache2/modules/mod_cgi.so]} {
           ui_error "To use ${name} with the +apache2 variant, apache2 must be installed with the +preforkmpm variant."
           return -code error "incompatible apache2 installation"
       }
   }
   destroot.violate_mtree yes
   depends_lib-append \
       port:apache2
   configure.args-append \
       --with-apxs2=${prefix}/apache2/bin/apxs
}

# Build a FastCGI binary. Keep the options here in sync with those in the
# relevant part of the post-destroot phase.
variant fastcgi conflicts no_web description {Add FastCGI web server binary} {
   if { ![variant_isset apache] && ![variant_isset apache2] } {
       configure.args-delete \
           --disable-cgi
       configure.args-append \
           --enable-fpm \
           --enable-cgi
   }
}

foreach {old_variant new_port} {
   gmp             gmp
   imap            imap
   macports_snmp   snmp
   mssql           mssql
   mysql4          mysql
   mysql5          mysql
   mysqlnd         mysql
   oracle          oracle
   pcntl           pcntl
   postgresql82    postgresql
   postgresql83    postgresql
   pspell          pspell
   snmp            snmp
   sockets         sockets
   sqlite          sqlite
   tidy            tidy
} {
   eval [subst {
       variant ${old_variant} description "Obsolete; install ${my_name}-${new_port} port instead" {
           pre-configure {
               ui_msg "The +${old_variant} variant is obsolete. Please install the ${my_name}-${new_port} port instead."
           }
       }
   }]
}

variant ipc description {Add semaphore, shared memory and IPC functions} {
   configure.args-append \
       --enable-shmop \
       --enable-sysvsem \
       --enable-sysvshm \
       --enable-sysvmsg
}

if {![variant_isset apache] && ![variant_isset apache2] && ![variant_isset fastcgi] && ![variant_isset no_web]} {
   default_variants +apache2
}

variant pear description {Add PEAR} {
   configure.args-delete \
       --without-pear
   configure.args-append \
       --with-pear=${prefix}/lib/php
   destroot.target-append \
       install-pear
   destroot.args-append \
       PHP_PEAR_INSTALL_DIR=${prefix}/lib/php
   post-destroot {
       #nuke pear-stuff in ${destroot}
       system "cd ${destroot} && rm -rf .channels .depdb .depdblock .filemap .lock"

       system "if \[ -f ${prefix}/lib/php/.depdblock \]; then rm -f ${destroot}${prefix}/lib/php/.depdblock; fi"
       system "if \[ -f ${prefix}/lib/php/.depdb \]; then rm -f ${destroot}${prefix}/lib/php/.depdb; fi"
       system "if \[ -f ${prefix}/lib/php/.filemap \]; then rm -f ${destroot}${prefix}/lib/php/.filemap; fi"
       system "if \[ -f ${prefix}/lib/php/.lock \]; then rm -f ${destroot}${prefix}/lib/php/.lock; fi"
       system "if \[ -d ${prefix}/lib/php/.channels \]; then rm -rf ${destroot}${prefix}/lib/php/.channels; fi"
   }
}

variant suhosin description {Add Suhosin patch} {
   pre-fetch {
       if {"darwin" == ${os.platform} && ${os.major} < 9} {
           ui_error "The suhosin variant requires Mac OS X 10.5 or greater."
           return -code error "incompatible Mac OS X version"
       }
   }
   set suhosin_patch_version   ${version}-0.9.10
   set suhosin_patch           suhosin-patch-${suhosin_patch_version}.patch.gz
   patch_sites-append          http://download.suhosin.org/
   patchfiles-append           ${suhosin_patch}
   checksums-append \
       ${suhosin_patch} \
           md5     b66b27c43b1332400ef8982944c3b95b \
           sha1    76675242cfdeff763767900213346af622002490 \
           rmd160  8dcd8b51ea0357b6cc51e70e495e18f341c62f7c
}

destroot.args \
   INSTALL_ROOT=${destroot}

destroot.target \
   install-cli install-build install-headers install-programs

post-destroot {
   # Copy the Apache 1 module.
   if { [variant_isset apache] } {
       xinstall -m 755 -d ${destroot}${prefix}/libexec/apache \
           ${destroot}${prefix}/etc/apache/extra
       xinstall -m 755 ${worksrcpath}/libs/libphp5.so ${destroot}${prefix}/libexec/apache/
       xinstall -m 755 -c ${filespath}/mod_php.conf ${destroot}$prefix/etc/apache/extra
   }

   # Copy the Apache 2.2 module.
   if { [variant_isset apache2] } {
       xinstall -m 755 -d ${destroot}${prefix}/apache2/modules \
           ${destroot}${prefix}/apache2/conf/extra
       xinstall -m 755 ${worksrcpath}/libs/libphp5.so ${destroot}${prefix}/apache2/modules/
       xinstall -m 755 -c ${filespath}/mod_php.conf ${destroot}${prefix}/apache2/conf/extra
   }

   if { [variant_isset fastcgi] } {
       # If we've built an Apache module (any version) then the FastCGI binary
       # will not have been built, so we need to run through the whole process
       # again and build just the FastCGI binary. Keep the options here in sync
       # with the options specified in the apache and apache2 variants.
       if { [variant_isset apache] } {
           if { ![variant_isset macosx] && (![info exists os.subplatform] || ${os.subplatform} != "macosx") } {
               configure.args-delete \
                   --with-apxs=${prefix}/sbin/apxs
           } else {
               configure.args-delete \
                   --with-apxs=/usr/sbin/apxs
           }
       }
       if { [variant_isset apache2] } {
           configure.args-delete \
               --with-apxs2=${prefix}/apache2/bin/apxs
       }

       # Run the build again to get the FastCGI binary. Keep the options here
       # in sync with those in the fastcgi variant.
       if { [variant_isset apache] || [variant_isset apache2] } {
           configure.args-delete \
               --disable-cgi
           configure.args-append \
               --enable-fpm \
               --enable-cgi
           ui_msg "$UI_PREFIX Configuring ${name} again for fastcgi"
           command_exec configure
           ui_msg "$UI_PREFIX Building ${name} again for fastcgi"
           command_exec build
           ui_msg "$UI_PREFIX Staging ${name} fastcgi into destroot"
       }

       # Copy the FastCGI binary to the bin dir under a new name so it doesn't
       # conflict with the cli version.
       if {[file exists ${worksrcpath}/sapi/cgi/php-cgi]} {
           xinstall -m 755 ${worksrcpath}/sapi/cgi/php-cgi ${destroot}${prefix}/bin
       }

       # Copy the default FastCGI config
       xinstall -m 644 ${worksrcpath}/sapi/fpm/php-fpm.conf ${destroot}${prefix}/etc/
   }

   #file rename ${destroot}${prefix}/etc/pear.conf ${destroot}${prefix}/etc/pear.conf.sample

   # Copy the default php.ini files.
   xinstall -m 755 -d ${destroot}${phpinidir}
   xinstall -m 644 -W ${worksrcpath} \
       php.ini-development \
       php.ini-production \
       ${destroot}${phpinidir}

   # Copy mysqlnd headers.
   xinstall -d ${destroot}${prefix}/include/php/ext/mysqlnd
   eval xinstall -m 644 [glob ${worksrcpath}/ext/mysqlnd/*.h] ${destroot}${prefix}/include/php/ext/mysqlnd
}

pre-activate {
   set filepath ${extraphpinidir}/.turd_${name}
   if {[file exists ${filepath}]} {
       delete ${filepath}
   }
}

post-activate {
   if {[file exists ${prefix}/etc/php.ini] && ![file exists ${phpinidir}/php.ini]} {
       move ${prefix}/etc/php.ini ${phpinidir}
       ui_msg "Your ${prefix}/etc/php.ini has been moved to ${phpinidir}/php.ini"
       ui_msg ""
   }
   if {![file exists ${phpinidir}/php.ini]} {
       ui_msg "To customize php, copy"
       ui_msg "${phpinidir}/php.ini-development (if this is a development server) or"
       ui_msg "${phpinidir}/php.ini-production (if this is a production server) to"
       ui_msg "${phpinidir}/php.ini and then make changes."
   } else {
       ui_msg "You may need to update your php.ini for any changes that have been made"
       ui_msg "in this version of php. Compare ${phpinidir}/php.ini with"
       ui_msg "${phpinidir}/php.ini-development (if this is a development server) or"
       ui_msg "${phpinidir}/php.ini-production (if this is a production server)."
   }

   if {![variant_isset no_web]} {
       ui_msg ""
       ui_msg "If this is your first install, you need to activate PHP in your web server."
       if {![variant_isset fastcgi]} {
           if {[variant_isset apache]} {
               set moduledir ${prefix}/libexec/modules
               set apxs ${prefix}/apache/bin/apxs
           }
           if {[variant_isset apache2]} {
               set moduledir ${prefix}/apache2/modules
               set apxs ${prefix}/apache2/bin/apxs
           }
           ui_msg ""
           ui_msg "To enable PHP in Apache, run"
           ui_msg "  cd ${moduledir}"
           ui_msg "  ${apxs} -a -e -n \"${my_name}\" lib${my_name}.so"
       }
   }

   #ui_msg "* copy  ${prefix}/etc/pear.conf.sample to  ${prefix}/etc/pear.conf"
}

variant debug description {Enable debug support (useful to analyze a PHP-related core dump)} {
   configure.args-append   --enable-debug
}

test.run                yes

livecheck.type          regex
livecheck.url           ${homepage}downloads.php
livecheck.regex         get/php-(5\\.\[0-9.\]+)\\.tar

引用自:https://serverfault.com/questions/170394