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

Обычно появляется вопрос "зачем оно надо?". Многие кто программировал или сталкивался с программистами наверняка уже в курсе, что в каждой версии есть свои баги и фичи. И чтобы писать нормальный код приходится использовать конкретную версию софта. Так же бывает, что разные проекты хостятся в пределах одной машины, которые написаны на разных версиях интерпретатора. Такой подход позволит использовать сразу несколько версий интерпретатора. Другое дело это дистрибутивы, которые зачастую обновляются по программе 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}'
Показать комментарии