PHP設定 · 3 min read · Nov 03, 2025

ISPConfig 3 (Ubuntu 12.04 LTS)で複数のPHPバージョン(PHP-FPM & FastCGI)を使用する方法

ISPConfig 3 (Ubuntu 12.04 LTS)で複数のPHPバージョン(PHP-FPM & FastCGI)を使用する方法

バージョン 1.0
著者: Falko Timme
Twitterでフォローしてください

ISPConfig 3.0.5以降、1つのサーバーで複数のPHPバージョンを使用し、ウェブサイトに最適なPHPバージョンを選択することが可能です。この機能はPHP-FPM(PHP 5.3以降)およびFastCGI(すべてのPHP 5.xバージョン)で動作します。このチュートリアルでは、Ubuntu 12.04サーバー上でPHP 5.3およびPHP 5.4をPHP-FPMおよびFastCGIバージョンとして構築する方法を示します。これらのPHPバージョンは、ISPConfigでデフォルトのPHP(aptを通じてインストールされたもの)と一緒に使用できます。

これがあなたにとって機能することを保証するものではありません!

1 前提条件

私はPHP 5.3.22とPHP 5.4.12、執筆時点での最新のPHP 5.3および5.4バージョンをインストールします。また、APC、memcache、memcached、ioncubeなどの追加のPHP拡張機能を構築する方法も示します。

PHP-FPMはApacheおよびnginxサーバーの両方で使用できますが、FastCGIはApacheサーバーのみに利用可能です。

PHP 5.3および5.4ではPHP-FPMとFastCGIは相互排他的であるため、PHPを構築する2つの方法を示します。1つはPHP-FPM用、もう1つはFastCGI用ですが、PHPを2回コンパイルして両方を取得することもできます。1回は–enable-fpmを使用し、もう1回は–enable-cgiを使用します(異なるベースディレクトリを使用することを確認してください。たとえば、PHP-FPM用に/opt/php-5.3.22、FastCGI用に/opt/phpfcgi-5.3.22など)。

2 PHP 5.3.22の構築(PHP-FPM)

PHP 5.3.22をダウンロードして抽出します:

mkdir /opt/php-5.3.22  
mkdir /usr/local/src/php5-build  
cd /usr/local/src/php5-build  
wget http://de.php.net/get/php-5.3.22.tar.bz2/from/this/mirror -O php-5.3.22.tar.bz2  
tar jxf php-5.3.22.tar.bz2
cd php-5.3.22/

PHP5を構築するための前提条件をインストールします:

apt-get install build-essential 
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

(最後のコマンドは、–with-imapでPHPを構築する場合に必要です。そうでないと、./configureは次のエラーで停止します:

checking for crypt in -lcrypt… yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
root@server1:/usr/local/src/php5-build/php-5.3.22#

)

次のようにPHP 5.3.22を構成して構築します(./configureコマンドは必要に応じて調整できます。すべての利用可能なオプションを確認するには、

./configure --help

を参照してください。異なる./configureコマンドを使用する場合、追加のライブラリが必要になるか、ビルドプロセスが失敗する可能性があります):

./configure \  
--prefix=/opt/php-5.3.22 \  
--with-pdo-pgsql \  
--with-zlib-dir \  
--with-freetype-dir \  
--enable-mbstring \  
--with-libxml-dir=/usr \  
--enable-soap \  
--enable-calendar \  
--with-curl \  
--with-mcrypt \  
--with-zlib \  
--with-gd \  
--with-pgsql \  
--disable-rpath \  
--enable-inline-optimization \  
--with-bz2 \  
--with-zlib \  
--enable-sockets \  
--enable-sysvsem \  
--enable-sysvshm \  
--enable-pcntl \  
--enable-mbregex \  
--with-mhash \  
--enable-zip \  
--with-pcre-regex \  
--with-mysql \  
--with-pdo-mysql \  
--with-mysqli \  
--with-jpeg-dir=/usr \  
--with-png-dir=/usr \  
--enable-gd-native-ttf \  
--with-openssl \  
--with-fpm-user=www-data \  
--with-fpm-group=www-data \  
--with-libdir=/lib/x86_64-linux-gnu \  
--enable-ftp \  
--with-imap \  
--with-imap-ssl \  
--with-kerberos \  
--with-gettext \  
--enable-fpm

最後のスイッチ(–enable-fpm)は、このPHPバージョンがPHP-FPMで動作することを確認します。

make  
make install

php.iniとphp-fpm.confを正しい場所にコピーします:

cp /usr/local/src/php5-build/php-5.3.22/php.ini-production /opt/php-5.3.22/lib/php.ini
cp /opt/php-5.3.22/etc/php-fpm.conf.default /opt/php-5.3.22/etc/php-fpm.conf

/opt/php-5.3.22/etc/php-fpm.confを開き、以下の設定を調整します - listen行では未使用のポート(例: 8999; ポート9000はUbuntuのデフォルトのPHP-FPMで使用されている可能性があります)を使用し、最後にinclude=/opt/php-5.3.22/etc/pool.d/*.confという行を追加する必要があります:

vi /opt/php-5.3.22/etc/php-fpm.conf

| [...] pid = run/php-fpm.pid [...] user = www-data group = www-data [...] listen = 127.0.0.1:8999 [...] include=/opt/php-5.3.22/etc/pool.d/*.conf |

PHP-FPM用のプールディレクトリを作成します:

mkdir /opt/php-5.3.22/etc/pool.d

次に、PHP-FPM用のinitスクリプトを作成します:

vi /etc/init.d/php-5.3.22-fpm

| #! /bin/sh ### BEGIN INIT INFO # Provides: php-5.3.22-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-5.3.22-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-5.3.22/sbin/php-fpm php_fpm_CONF=/opt/php-5.3.22/etc/php-fpm.conf php_fpm_PID=/opt/php-5.3.22/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac |

initスクリプトを実行可能にし、システム起動リンクを作成します:

chmod 755 /etc/init.d/php-5.3.22-fpm  
update-rc.d php-5.3.22-fpm defaults

最後にPHP-FPMを起動します:

/etc/init.d/php-5.3.22-fpm start

/opt/php-5.3.22/etc/pool.dにプールがない限り、無視できる警告が表示されます:

root@server1:/usr/local/src/php5-build/php-5.3.22# /etc/init.d/php-5.3.22-fpm start
Starting php-fpm [04-Mar-2013 14:58:41] WARNING: Nothing matches the include pattern ‘/opt/php-5.3.22/etc/pool.d/*.conf’ from /opt/php-5.3.22/etc/php-fpm.conf at line 512.
done
root@server1:/usr/local/src/php5-build/php-5.3.22#

これで完了です - もしよければ、APC、memcache、memcached、ioncubeなどの追加のモジュールをインストールできます。

APC、memcache、およびmemcachedモジュールはPEARを通じてインストールできます。まず、PEARをインストールして初期化する必要があります:

apt-get -y install php-pear
cd /opt/php-5.3.22/etc
pecl -C ./pear.conf update-channels

APCは次のようにインストールできます:

pecl -C ./pear.conf install apc

すべてのデフォルト値を受け入れます。その後、/opt/php-5.3.22/lib/php.iniを開き…

vi /opt/php-5.3.22/lib/php.ini

…ファイルの最後にextension=apc.soという行を追加します(追加のAPC設定を構成することもできます):

| [...] extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.user_ttl=600 apc.gc_ttl=600 apc.enable_cli=1 apc.mmap_file_mask=/tmp/apc.XXXXXX ;apc.mmap_file_mask=/dev/zero ;apc.shm_segments = 5 |

memcache拡張は次のようにインストールできます:

pecl -C ./pear.conf install memcache   

/opt/php-5.3.22/lib/php.iniを開き…

vi /opt/php-5.3.22/lib/php.ini

…ファイルの最後にextension=memcache.soという行を追加します:

| [...] extension=memcache.so |

memcached拡張は次のようにインストールできます:

apt-get install libmemcached-dev
ln -s /usr/include/libmemcached /usr/include/libmemcached-1.0
pecl -C ./pear.conf install memcached

/opt/php-5.3.22/lib/php.iniを開き…

vi /opt/php-5.3.22/lib/php.ini

…ファイルの最後にextension=memcached.soという行を追加します:

| [...] extension=memcached.so |

ionCube Loaderは次のようにインストールできます:

cd /tmp

次に、アーキテクチャ(x86_64またはx86)に適したionCube Loaderパッケージをダウンロードして解凍します。

x86_64の場合:

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz  
tar xfvz ioncube_loaders_lin_x86-64.tar.gz

x86の場合:

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz  
tar xfvz ioncube_loaders_lin_x86.tar.gz

次のように進めます:

cp ioncube/ioncube_loader_lin_5.3.so /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so  
vi /opt/php-5.3.22/lib/php.ini

ファイルの最初にzend_extension = /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.soという行を追加します([PHP]行の前):

| zend_extension = /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so [PHP] [...] |

その後、PHP-FPMを再読み込みします:

/etc/init.d/php-5.3.22-fpm reload

ISPConfig 3.0.5では、システム > 追加のPHPバージョンの下で新しいPHPバージョンを構成できます。名前タブには、PHPバージョンの名前(例: PHP 5.3.22)を入力します。このPHPバージョンは、ISPConfigのウェブサイト設定でこの名前の下にリストされます:

PHP-FPM設定タブに移動し(FastCGI設定タブは空のままにできます)、フィールドを次のように記入します:

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。