Edited at

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 にあるからそれを設定すればいい。

僕はここで力尽きた。


参考