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
[Preparing]: /tmp/php-build/source/7.1.12
[Compiling]: /tmp/php-build/source/7.1.12
[xdebug]: Installing version 2.6.1
[Downloading]: http://xdebug.org/files/xdebug-2.6.1.tgz
[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]: Done
[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` にあるからそれを設定すればいい。

僕はここで力尽きた。

# 参考

- [CentOS7でPHPのバージョンを管理する](http://raichel.hatenablog.com/entry/2015/10/18/CentOS7でPHPのバージョンを管理する)
- [PHP7をCentOS7にインストールする手順](https://blog.takekoshi.net/php7-on-centos7/)