yujiro's blog

「インターネット上で正しい答えを得る最善の方法は、質問することではない。間違った答えを投稿することだ」by ウォード・カニンガム。 辛辣なコメントお待ちしております。

PHP のバージョンをphpenv で管理する

初めに

  • ソースからビルド・コンパイルする形がめちゃくちゃ不便だったので、phpenvを試してみる
  • 構成は Ubuntu14.04 + php-fpm + nginx
  • rbenv のようにプロジェクトごとにphp のバージョンを切り替えられる。最初からこれをつかえばよかった。
  • ここでは 7.1.7を使う前提

手順

$ cd

$ curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash

$ vi ~/.zshrc

# For PHP Environment
export PHP_ROOT="${HOME}/.phpenv"
if [ -d "${PHP_ROOT}" ]; then
   export PATH=${PHP_ROOT}/bin:$PATH
   eval "$(phpenv init -)"
fi

$ source ~/.zshrc

$ mkdir ~/.phpenv/plugins

$ cd ~/.phpenv/plugins

$ git clone git://github.com/php-build/php-build.git

$ cd

$ sudo apt-get install libssl-dev libbz2-dev libcurl4-gnutls-dev libmcrypt-dev libjpeg-dev libtidy-dev libxslt1-dev autoconf

$ sudo apt-get install libicu-dev

※ バージョンによっては必要なし

$ phpenv install 7.1.7

※ postgres 使う場合注意 configure オプション書き換える(後述)

$ phpenv rehash

$ phpenv global 7.1.7

※ 上記でcliの方のバージョンが変わる

$ php -v

PHP 7.1.7 (cli) (built: Jul 19 2017 16:25:39) ( NTS )

$ cp ~/.phpenv/versions/7.1.7/etc/php-fpm.conf.default ~/.phpenv/versions/7.1.7/etc/php-fpm.conf

$ cp ~/.phpenv/versions/7.1.7/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/7.1.7/etc/php-fpm.d/www.conf

※バージョンによっては必要なし

$ vi ~/.phpenv/versions/7.1.7/etc/php-fpm.d/www.conf

- listen = 127.0.0.1:9000
+ listen = 127.0.0.1:9001

- user = nobody
- group = nobody
+ user = www-data
+ group = www-data

PHP のバージョンの数に応じて1ずつずらしておけば、バージョン切り替えの際にいちいちNginxの設定ファイルを変更しなくてもよくなるのでおすすめです。

$ sudo cp /tmp/php-build/source/7.1.7/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm-7.1.7

$ sudo chmod 755 /etc/init.d/php-fpm-7.1.7

$ vi ~/.phpenv/versions/7.1.7/etc/php.ini

- ;date.timezone =
+ date.timezone = "Asia/Tokyo"

- mysql.default_socket =
- pdo_mysql.default_socket =
+ mysql.default_socket = /var/run/mysqld/mysqld.sock
+ pdo_mysql.default_socket= /var/run/mysqld/mysqld.sock

※ 下4行はpostgresのみを使う場合は必要なし

$ sudo service php-fpm-7.1.7 restart

$ sudo vi /etc/nginx/sites-available/sample.com.conf

- fastcgi_pass  unix:/usr/local/php-5.3.29/var/run/php5-fpm.sock
+ fastcgi_pass 127.0.0.1:9001;

$ sudo service nginx restart

Postgres を使う場合

phpenv install するまえに下記を追加しておく

$ vi ~/.phpenv/plugins/php-build/share/php-build/definitions/7.1.7

+ configure_option "--with-pdo-pgsql"
+ configure_option "--with-pgsql"

因みにインストール後でも大丈夫だった。書き換え後に

$ phpenv install 7.1.7

でpostgres のドライバがインストールされました。(インストールされるまでちょっと時間かかったけど)

もう全バージョンでposgre いれていいよっていう場合は default のconfigureオプション を指定してるファイルがあるのでそっちを書き換える

sudo vi ~/.phpenv/plugins/php-build/share/php-build/default_configure_options

+ --with-pdo-pgsql
+ --with-pgsql

でOK