PHP

CentOS7 に phpenv でPHPのインストールをする

覚えちゃいるし、忘れてたら都度検索するけど、それが面倒になってきたので。

  • インストール先: /opt/phpenv
  • めんどくさくて root ユーザで実行してます。
# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 

前準備

必要なパッケージをインストールしておく。CentOS7.6の場合だと、 re2c はソースコンパイルをしなくても良いっぽい。他のディストリビューションやPHPのバージョン等によっては、再コンパイルが必要になるかもしれない。

> yum install -y bzip2 bzip2-devel bison re2c libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel readline-devel libtidy-devel libxslt-devel libmcrypt-devel
> yum install -y git

もしかしたら gcc 等が初期から入っていない場合もあるので、gccがない場合はこんな感じのも追加実行する。

# yum groups install development -y

環境変数を全てのユーザに通す

# cat <<__EOL__ > /etc/profile.d/phpenv.sh 
export PHPENV_ROOT="/opt/phpenv"
export PATH="\$PATH:\$PHPENV_ROOT/bin"
__EOL__

環境変数を読み込む

# source /etc/profile.d/phpenv.sh

phpenv の取得

# curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  3128  100  3128    0     0   5765      0 --:--:-- --:--:-- --:--:--  5765
Installing phpenv in /opt/phpenv
remote: Enumerating objects: 2744, done.
remote: Total 2744 (delta 0), reused 0 (delta 0), pack-reused 2744
Receiving objects: 100% (2744/2744), 515.63 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1720/1720), done.
Success.

export PATH="/opt/phpenv/bin:$PATH"
eval "$(phpenv init -)"

Add above line at the end of your ~/.bashrc and restart your shell to use phpenv.

インストール作業

# mkdir /opt/phpenv/plugins
# git clone https://github.com/php-build/php-build.git /opt/phpenv/plugins/php-build
Cloning into '/opt/phpenv/plugins/php-build'...
remote: Enumerating objects: 38, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 6730 (delta 13), reused 24 (delta 10), pack-reused 6692
Receiving objects: 100% (6730/6730), 958.50 KiB | 0 bytes/s, done.
Resolving deltas: 100% (4573/4573), done.

ここまでやると phpenv が使えるので、環境変数を通す。

# echo 'eval "$(phpenv init -)"' >> /etc/profile.d/phpenv.sh
# source /etc/profile.d/phpenv.sh

コンパイルオプション等

/opt/phpenv/plugins/php-build/share/php-build/default_configure_options をいじればいいと思います。大体は初期のままでも問題ないはず。

インストール

phpenv install --list コマンドでお目当てのバージョンを探して、 phpenv install <version> でインストール。今回は 7.2.12 7.1.12 をインストールする。

# phpenv install 7.1.12
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.1.12 into /opt/phpenv/versions/7.1.12
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-7.1.12.tar.bz2


[xdebug]: Installing version 2.6.1

[xdebug]: Compiling xdebug in /tmp/php-build/source/xdebug-2.6.1
[xdebug]: Installing xdebug configuration in /opt/phpenv/versions/7.1.12/etc/conf.d/xdebug.ini
[xdebug]: Cleaning up.
[Info]: Enabling Opcache...

[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.1.12.20181207165102.log or rebuild with '--verbose' option
[Success]: Built 7.1.12 successfully.

動くか確認

# phpenv global 7.1.12
# php -v
PHP 7.1.12 (cli) (built: Dec  7 2018 17:03:08) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.12, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans

各種設定

php.ini, php-fpm.conf 及び、systemdに入れるやつ。

/opt/phpenv/versions/7.1.12/etc にあるからそれを設定すればいい。

僕はここで力尽きた。

参考