Go to list of users who liked
Share on X(Twitter)
Share on Facebook
More than 5 years have passed since last update.
brew の場合は楽そうなかんじなのに、Ubuntu だとわりと手間取った。
Ubuntu で phpenv 入れてる詳しい説明は少なそうだったので、同じところでつまづいてる人用に共有してみます。
基本的にデザインとフロント担当なのでお前は何を言っているんだ的なところがあったら教えてください。
やりたいこと
- 手軽に PHP のバージョンを切り替える開発環境を作りたい
- 引き継いだレガシー案件に古いPHPバージョン依存のコードがあったので
Install
1. Install phpenv
PHPのバージョン切り替えたりするやつです。
# Install phpenv$cd ~$git clone https://github.com/CHH/phpenv.git ~/.phpenv$sh ~/.phpenv/bin/phpenv-install.sh2. Install php-build
PHPビルドするやつです。
# Install php-build$git clone git://github.com/CHH/php-build.git$cdphp-build/$sudopaco-D sh install.sh# paco を好みで使う$which php-build/usr/local/bin/php-build$rm-rf php-buildphp-build インストール時にどこにどんなファイルが配置されたか記録しておくために、paco を使っています。使っても使わなくてもいいやつです。
3. path 設定
# rbenv & phpenv# .rbenv ディレクトリが home にあればパスを通す# phpenv は rbenv を内部利用しているので先に rbenv に PATH を通すif[-d$HOME/.rbenv/bin];thenexportPATH="$PATH:$HOME/.rbenv/bin"eval"$(rbenv init -)"if[-d$HOME/.phpenv/bin];thenexportPATH="$PATH:$HOME/.rbenv/bin:$HOME/.phpenv/bin"eval"$(phpenv init -)"fifiphp-build で PHP をビルドする
1. インストール可能なバージョン一覧の表示
$php-build--definitions5.2.175.3.105.3.11 :5.5.0beta15.5.0beta25.5snapshot2. 依存パッケージのインストール
PHPビルド時にパッケージが足りないようなので、トライアンドエラーで、言われるままに大量にインストールする。
- libcurl4-gnutls-dev
- libcurl4-nss-dev
- libcurl4-gnutls-dev
- libpng3 libjpeg-dev
- re2c
- libxml2-dev
- openssl-dev
- libtidy-dev
- libxslt-dev
- libmcrypt-dev
- libreadline-dev
今回は上のリストを全てインストール。
$sudoaptitudeinstalllibcurl4-gnutls-dev libcurl4-nss-dev libcurl4-gnutls-dev libpng3 libjpeg-dev re2c libxml2-dev openssl-dev libtidy-dev libxslt-dev libmcrypt-dev libreadline-dev3. apxs2 の用意
debian/ubuntu の場合、 さらにapxs2 コマンドを使えるようにしておかないと、
PHPビルド時にlibphp5.so を作成できないぽいので入れる。
$apache2-VServer version: Apache/2.2.22(Ubuntu) :Server MPM: Prefork :Server MPM の値がPrefork だった場合、apache2-prefork-dev、worker の場合、apache2-threaded-dev が必要。
$sudoaptitudeinstallapache2-prefork-devPHPビルド時の設定にlibphp5.so を作成するオプションを追記。
default_configure_options に--enable-fpm がある場合は削除しておく。
このあたりは、CLI版, CGI版 どちらでビルドするかで変わるぽい。
$which apxs2/usr/bin/apxs2$sudovim /usr/local/share/php-build/default_configure_options :--with-apxs2=--with-apxs2=/usr/bin/apxs2# << 追記4. libphp5.so のバックアップ
PHPビルド時に、libphp5.so が上書きされるため、現在のバージョンのものをバックアップする。
$mkdir ~/.phpenv/versions/CURRENT_PHP_VER/$mv /usr/lib/apache2/modules/libphp5.so ~/.phpenv/versions/CURRENT_PHP_VER/5. PHP のビルド, インストール
phpenv で管理できるようにするため、~/.phpenv/versions をインストール先として
指定する。
$php-build 5.3.19 ~/.phpenv/versions/5.3.19[Info]: Loaded apc Plugin.[Info]: Loaded pyrus Plugin.[Info]: Loaded xdebug Plugin.[Info]: Loaded xhprof Plugin.[Info]: php.ini-production gets used as php.ini[Info]: Building 5.3.19 into /home/qurage/.phpenv/versions/5.3.19[Skipping]: Already downloaded and extracted http://downloads.php.net/johannes/php-5.3.19.tar.bz2[Preparing]: /tmp/php-build/source/5.3.19[Compiling]: /tmp/php-build/source/5.3.19[Pyrus]: Downloading from http://pear2.php.net/pyrus.phar[Pyrus]: Installing executablein /home/qurage/.phpenv/versions/5.3.19/bin/pyrus[XDebug]: Downloading http://xdebug.org/files/xdebug-2.2.1.tgz[XDebug]: Compilingin /tmp/php-build/source/xdebug-2.2.1[XDebug]: Installing XDebug configurationin /home/qurage/.phpenv/versions/5.3.19/etc/conf.d/xdebug.ini[XDebug]: Cleaning up.[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the login /tmp/php-build.5.3.19.20130409111047.log[Success]: Built 5.3.19 successfully.phpenv からビルドしたPHPが正しく認識されているか確認。
$phpenv versions* system(setby /home/qurage/.phpenv/version) 5.3.19libphp5.so はPHPをビルドするたびに上書きされるため、
バージョンごとに移動・保存しておく。
$sudo cp /usr/lib/apache2/modules/libphp5.so ~/.phpenv/versions/5.3.19/PHP バージョン切り替え
$phpenv global 5.3.19$phpenv versions system* 5.3.19(setby /home/qurage/.php-version)$phpenv rehashApache 側の設定
phpenv でバージョン切り替えしただけでは、Apache 側には未適用なので、phpenv-apache-version プラグインを利用する。
$git clone https://github.com/garamon/phpenv-apache-version .phpenv/plugins/phpenv-apache-version/$sudo /home/qurage/.phpenv/bin/phpenv apache-version 5.3.19phpinfo(); などで Apache 側の動作確認。
php.ini 設定
[Date]; Defines the default timezone used by the date functions; http://php.net/date.timezonedate.timezone=Asia/Tokyo:; Default socket name for local MySQL connects. If empty, uses the built-in; MySQL defaults.; http://php.net/pdo_mysql.default-socketpdo_mysql.default_socket=/var/run/mysqld/mysqld.sock:; Default socket name for local MySQL connects. If empty, uses the built-in; MySQL defaults.; http://php.net/mysql.default-socketmysql.default_socket=/var/run/mysqld/mysqld.sock:; Default socket name for local MySQL connects. If empty, uses the built-in; MySQL defaults.; http://php.net/mysqli.default-socketmysqli.default_socket=/var/run/mysqld/mysqld.sockmysql の socket パスは適宜変更する必要がある。
- Ubuntu ⇒ /var/run/mysqld/mysqld.sock
- CentOS ⇒ /tmp/mysql.sock
あとがき
なかなか大変でした。
参考にしたサイト
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme