PHP: Сборка версии 7.2.15

Рассмотрим как собрать актуальную версию PHP (ну почти актуальную).

Обычно появляется вопрос «зачем оно надо?». Многие кто программировал или сталкивался с программистами наверняка уже в курсе, что в каждой версии есть свои баги и фичи. И чтобы писать нормальный код приходится использовать конкретную версию софта. Так же бывает, что разные проекты хостятся в пределах одной машины, которые написаны на разных версиях интерпретатора. Такой подход позволит использовать сразу несколько версий интерпретатора. Другое дело это дистрибутивы, которые зачастую обновляются по программе Long Time Service по истечении которого уже не будет новых версий пакетов. Другим фактором является то, что серверные дистрибутивы обычно содержат в репозиториях устаревшие версии пакетов. Нюансов масса, так что некоторые вещи лучше собирать с исходных кодов.

$ git clone https://github.com/php/php-src/tree/PHP-7.2.15
$ cd PHP-7.2.15
$ ./configure --prefix=/usr/local/php72 --enable-fpm --with-fpm-user=nobody --with-fpm-group=nobody --disable-ipv6 --enable-bcmath --enable-exif --enable-mbstring --enable-shmop --enable-soap --enable-wddx --enable-zip --enable-mysqlnd --with-openssl --with-zlib --with-pcre-regex --with-gd --with-curl --with-pdo-mysql --with-mysqli --with-ldap=yes --with-libdir=lib64
$ make
$ make install
$ cp php.ini-production /usr/local/php72/lib/php.ini
$ mv /usr/local/php72/etc/php-fpm.default /usr/local/php72/etc/php-fpm.conf
$ mv /usr/local/php72/etc/php-fpm.d/www.default /usr/local/php72/etc/php-fpm.d/www.conf
$ cp sapi/fpm/php-fpm.service /lib/systemd/system/
$ systemctl start php-fpm
$ systemctl enable php-fpm
$ ln -s /usr/local/php72/bin/php /usr/bin/php

Таким не хитрым образом можно в одной системе установить несколько версий PHP и разделить их префиксами создав симлинки. Не достающие модули можно установить из pecl.

Ну и конечно же PHP не PHP без composer.

$ php72 -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php72 -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php72 composer-setup.php
$ php72 -r "unlink('composer-setup.php');"
$ mv composer.phar /usr/local/php72/bin/composer
$ ln -s /usr/local/php72/bin/composer /usr/bin/composer
$ php composer search <package>

Или вместо извращения с симлинками можно накидать wrapper на bash.

Параметры компиляции можно посмотреть командой:

$ /usr/local/php72/bin/php -i|grep -i 'configure command'|sed "s/'//g"|awk '{$1="";$2="";$3=""; print}'