昔はPHPの新しいバージョン出るたびに./configure && makeとかしてたもんだけど、すっかりめんどくさがりになってOSデフォのPHP使ってる昨今。
Padrino使い出してPowが便利ということを知り、常用しだしたんだけど、ちょっとPHPを使いたくなった時にめんどくさい。RackでPHPを動かすにはrack-legacyとか使えばいいんだけど、rack-legacyが呼ぶのはphp-cgi。Mac標準のPHPはApacheモジュールとcliは提供されているんだけどphp-cgiは入ってない。ということで、Homebrewでお手軽に入れてしまおうかと。
HomebrewにはPHPのFormulaが含まれていないのでリポジトリを足す必要がある。
$ brew -v
Homebrew 0.9.2
$ brew search php
josegonzalez/php/php53 josegonzalez/php/php54 ...
$ brew tap josegonzalez/php
Cloning into '/usr/local/Library/Taps/josegonzalez-php'...
(中略)
Tapped 64 formula
$ brew search php
php53 php54 ...
とりあえずphp53を入れる。PHPのFormulaのコンパイルオプションを確認。
$ brew options php53
--with-libmysql
Include (old-style) libmysql support
--with-mariadb
Include MariaDB support
--with-mysql
Include MySQL support
--with-pgsql
Include PostgreSQL support
--with-mssql
Include MSSQL-DB support
--with-unixodbc
Include unixODBC support
--with-cgi
Enable building of the CGI executable (implies --without-apache)
--with-fpm
Enable building of the fpm SAPI executable (implies --without-apache)
--without-apache
Build without shared Apache 2.0 Handler module
--with-intl
Include internationalization support
--with-imap
Include IMAP extension
--with-gmp
Include GMP support
--with-suhosin
Include Suhosin patch
--with-tidy
Include Tidy support
--without-pear
Build without PEAR
--with-homebrew-openssl
Include OpenSSL support via Homebrew
php-cgiが欲しいので–with-cgiが必須。あとはお好みで。
$ brew install php53 --with-cgi --with-mysql --with-intl --with-homebrew-openssl
Error: No available formula for zlib (dependency of php53)
怒られた。zlibどこよ?
$ brew search zlib
lzlib
homebrew/dupes/zlib
homebrew/dupesにいる。Mac標準パッケージに入ってるのはここに入るらしい。
$ brew tap homebrew/dupes
$ brew install php53 --with-cgi --with-mysql --with-intl --with-homebrew-openssl
opensslがどうのとWarningでた気がするけどキニシナイ。コンパイル長い。
Error: Failed executing: ./configure --prefix=/usr/local/Cellar/php53/5.3.15 ....
工エエェェ(´д`)ェェエエ工
解決策はHomebrew-PHPのREADME.mdにあった。てか、ここまでの手順がほぼそのまま書いてあった。
Mountain LionではX11が削除されたのでXQuartzを入れる必要があるらしい。ダウソしてインスコ。再度挑戦。
$ brew install php53 --with-cgi --with-mysql --with-intl --with-homebrew-openssl
通った。
$ php-cgi -v
PHP 5.3.15 (cgi-fcgi) (built: Aug 9 2012 07:42:30)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
今回は使わないが、今コンパイルしたphpをApacheモジュールで使いたい場合はhttpd.confのLoadModuleを以下のように変更する。
LoadModule php5_module /usr/local/Cellar/php53/5.3.15/libexec/apache2/libphp5.so
さて、ようやくrack-legacyの出番。
$ gem install rack-legacy
PHPをRackアプリケーションとして動かすためにいろいろ準備。
$ mkdir /path/to/phpapp
$ cd /path/to/phpapp
$ mkdir public
public以下にphpファイルを置く感じに。
Gemfile
source :rubygems
gem 'rack'
gem 'rack-legacy'
gem 'rack-rewrite'
config.ru
require File.expand_path('../app', __FILE__)
run MyApp
app.rb
require 'rubygems'
require 'bundler'
Bundler.require
public_dir = File.expand_path('../public', __FILE__)
MyApp = Rack::Builder.app do
use Rack::Rewrite do
rewrite %r'(.*)/?', '$1/index.php', :if => lambda{|e|
File.directory?(File.join(public_dir, e['PATH_INFO']))
}
end
use Rack::Legacy::Php, public_dir
run Rack::File.new(public_dir)
end
public/index.php
<?php echo "hello rack-legacy!" ?>
これで準備はおしまい。pow & powder使ってればpowder linkしてやればpow上でphpアプリケーションが動いていることを確認できる。
以上、brewで簡単に環境整えようと思ってたら意外に苦労したって話でした。