Ale ten czas szybko płynie. Dopiero co opisywałem Wam przepis na kompilację PHP 5.4 (2013), a za rogiem czeka już PHP 7.3.
Mimo upływu 5 lat dużo się nie zmieniło w samej konfiguracji kodu źródłowego i kompilacji. Podstawa to posiadanie w Linuksie gcc/g++ oraz pakietów -dev (głównie pliki nagłówkowe .h), dla rozszerzeń z których będziemy korzystać. Poniżej lista pakietów dla Debiana, które są przydatne:
apt-get install make gcc g++ libxml2-dev zlib1g-dev bzip2 libbz2-dev libcurl4-gnutls-dev libjpeg8-dev libpng-dev libfreetype6-dev libmcrypt-dev libmysqlclient-dev lemon libtidy-dev libxslt1-dev libpcre++-dev libssl-dev automake autoconf libsystemd-dev pkgconf
Na pewno zapytacie po co to wszystko? W dawnych czasach nie wszystkie dodatki PHP były przygotowane w paczkach danej dystrybucji i po pewnym czasie trzeba było pobierać kod źródłowy, skonfigurować i skompilować i tak. Dlaczego nie zrobić tego od razu?
W tamtych czasach również kompilacja pomagała odpowiednio sprofilować PHP pod daną konfigurację (czy ktoś jeszcze korzysta z Gentoo?).
Obecnie główna przewaga takie podejścia, to posiadanie kilku różnych instanacji PHP w różnych wersjach na jednej maszynie (bo mamy różne projekty, różnych klientów etc). Jak również można sprofilować PHP pod konkretną jedną aplikację (prof-gen & prof-use).
Ja nadal zawsze kompilują PHP, wtedy w przypadku dysków HDD mamy ciut mniejsze obciążenia i większą swobodę działania. Jeśli już wykonałeś poprzedni krok wystarczy pobrać kod źródłowy wybranej przez nas wersji PHP (np. 7.2.12). Jeśli nie chcecie za każdym razie przeklikiwać się przez stronę https://php.net/downloads.php możecie użyć prostego skrypciku:
#!/bin/bash
if [ $# -eq 0 ]; then
echo "Syntax : $0 php_version"
echo "Example: $0 7.0.2"
exit 1
fi
VERSION=$1
SHORT=${VERSION%.*}
SHORT=${SHORT//./}
FILE="php-$VERSION.tar.gz"
URL="http://pl1.php.net/get/$FILE/from/this/mirror"
HTTP_CODE=`curl --silent --head --location --output /dev/null --write-out '%{http_code}' $URL`
if [ $HTTP_CODE == 404 ]
then
echo "Cannot download php-$VERSION - not found."
exit 1
fi
wget $URL -O $FILE
Wtedy gdy dostaniesz informację o nowej wersji wystarczy, że wydasz polecenie ./php_get 7.2.12. Jak już mamy paczkę .tar.gz na dysku musimy rozpakować źródła i w katalogu, który powstanie umieszczamy nasz przepis na kompilację.
Jak taki przepis wygląda? Wszystko zależy, z czego Wasze aplikacje PHP korzystają, a może jest to serwer, gdzie serwujecie rózne aplikacje i wymagacie różnych bibliotek. Mój uniwersalny przepis, z którego korzystam to:
make distclean
./configure \
--enable-opcache \
--prefix /usr/local/php72 \
--enable-fpm \
--enable-cli \
--enable-inline-optimization \
--disable-rpath \
--disable-ipv6 \
--enable-mbstring \
--enable-mbregex \
--enable-zip \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-gettext \
--with-curl \
--with-zlib \
--with-zlib-dir=/usr \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir \
--enable-exif \
--enable-shmop \
--with-xsl=shared \
--enable-soap=shared \
--enable-sockets \
--enable-pcntl=shared \
--with-bz2 \
--with-tidy \
--with-pcre-dir \
--with-openssl \
--with-imap-ssl \
--with-pear \
--enable-pcntl \
--with-fpm-systemd
make -j2
make install
Czasami różni się w zależności od potrzeb. W dużym skrócie – sprzątamy po poprzedniej kompilacji, konfiguruejmy nasz przepis oraz puszczamy machinę w ruch. Opcja -j2 oznacza, że kompilacja wykona się na 2 jobach. Potrwa to dobrych kilka minut.
I ostatecznie wszystko zainstaluje się zgodnie z przepisem, tj. w /usr/local/php72 (dzięki takiemu podejściu łatwo później posprzątać po poprzedniej wersji, np. php70).
Konfiguracja dla środowiska PHP jest czytana z lokalizacji /usr/local/php72/lib/php.ini (ja mam i tak w /etc/php72.ini, a we właściwym miejscu link symboliczny, ułatwia to tworzenie kopii zapasowych konfiguracj):
cp php-7.2.12/php.ini-production /etc/php72.ini
ln -s /etc/php72.ini /usr/local/php72/etc/php.ini
ln -s /usr/local/php72/etc/php.ini /usr/local/php72/lib/php.ini
Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...
Zwiń
Czytaj na blogu autora...