Cài đặt Tool, thư viên cho PHP 7.2

# yum install autoconf libtool re2c bison libxml2-devel bzip2-devel libcurl-devel libpng-devel libicu-devel gcc-c++ libmcrypt-devel libwebp-devel libjpeg-devel openssl-devel -y

Trên đây có các thư viên dùng tích hợp vào PHP khi biên dịch PHP ví dụ như: hỗ trợ file jpeg, png của GD

Tải Source PHP 7.2

Kiểm tra tại php-src, tải về phiên bản Release mới. Bí dụ bản 7.2.12 với link tải https://github.com/php/php-src/archive/php-7.2.12.tar.gz

# curl -O -L https://github.com/php/php-src/archive/php-7.2.12.tar.gz

Giải nén

# tar -zxvf php-7.2.12.tar.gz
# cd php-src-php-7.2.12

Build PHP 7.2

Lưu ý: Nếu có sử dụng Apache thì thì phải cài đặt hoặc build Apache trước (nếu muốn tự build từ source xem Build Apache)

Giờ thực hiện với PHP, đầu tiên chạy

# ./buildconf --force

Tiếp theo chạy

# ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-apxs2=/usr/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql-sock=/var/run/mysql/mysql.sock --with-mhash --with-openssl --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-pgsql=/usr/local/pgsql --with-pdo-pgsql=/usr/local/pgsql --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir=/usr/lib64 --with-png-dir=/usr/lib64 --with-freetype-dir --enable-opcache --enable-fpm --with-fpm-user=apache --with-fpm-group=apache --without-gdbm --disable-fileinfo

Có thể nhập và chạy lệnh ./configure trên nhiều dòng, mỗi dòng cách nhau bằng /, cách này bạn lưu lệnh trên một file rồi paste vào terminal cho thuận tiện

# ./configure \
--prefix=/usr/local/php \
--exec-prefix=/usr/local/php \
--bindir=/usr/local/php/bin \
--sbindir=/usr/local/php/sbin \
--includedir=/usr/local/php/include \
--libdir=/usr/local/php/lib/php \
--mandir=/usr/local/php/php/man \
--with-apxs2=/usr/bin/apxs \
--with-config-file-path=/usr/local/php/etc \
--with-mysql-sock=/var/run/mysql/mysql.sock \
--with-mhash \
--with-openssl \
--with-mysqli=shared,mysqlnd \
--with-pdo-mysql=shared,mysqlnd \
--with-pgsql=/usr/local/pgsql \
--with-pdo-pgsql=/usr/local/pgsql \
--with-gd \
--with-iconv \
--with-zlib \
--enable-zip \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir=/usr/lib64 \
--with-png-dir=/usr/lib64
--with-freetype-dir \
--enable-opcache \
--enable-fpm \
--with-fpm-user=apache \
--with-fpm-group=apache \
--without-gdbm \
--disable-fileinfo

Nếu muốn biết thêm các thiết lập chạy script ./configure --help

Trong các thiết lập trên thì có một số thiết lập cần chỉ ra đường dẫn, thực tế trên máy của bạn có thể ở vị trí khác, nên bạn phải xác định nó nằm chính xác ở đâu như:

  • --with-apxs2=/usr/bin/apxs yêu cầu sinh ra file libphp7.so để tạo Handler gọi PHP từ Apache. Bạn phải xem Apache để apxs ở đâu rồi thay vào /usr/bin/apxs - Tìm bằng lệnh find / "apxs"
  • --with-jpeg-dir=/usr/lib64 cho phép GD chỉnh sửa được jpeg. Tìm xem libjpeg.so nằm ở thư mục nào thì điền thư mục đó vào find / -name "libjpeg.so"
  • --with-png-dir=/usr/lib64 tương tự như trên (tìm từ find / -name "libpng.so")
  • --prefix=/usr/local/php thiết lập thư mục cài đặt PHP

Tiếp theo chạy lệnh

# make clean
# make

Cài đặt

# make install

Copy file php.ini vào vị trí (do thiết lập khi build ở trên nạp config từ /usr/local/php/etc/ nên bạn copy vào đúng vị trí đó:

# cp php.ini-development /usr/local/php/etc/php.ini

Thiết lập biến môi trường để trỏ đến đường dẫn gọi PHP

# vi /etc/profile

Thêm vào cuối file đó các dòng:

#PHP PATH
export PHP_HOME=/usr/local/php
export PATH=$PHP_HOME/bin:$PATH

Lưu lại và chạy lệnh sau để nạp lại biến môi trường

# source /etc/profile

Giờ có thể kiểm tra PHP

# php -v

Có PHP rồi, muốn Webserver Apache gọi nó theo cách nào thì thêm Handler cho phù hợp trong Apache, xem tại để biết các Handler trước tại PHP APACHE HANDLER

Thiết lập Handler mặc định

Nếu sử dụng Handler mặc định Apache 2.0 Handler với module libphp7.so mới build được:

#TÌM libphp7.so
# find / -name "libphp7.so"

/usr/lib/apache/libphp7.so

Mở apache.conf thêm vào:

LoadModule php7_module /usr/lib/apache/libphp7.so

<FilesMatch \.(php|phar)>
    SetHandler application/x-httpd-php
</FilesMatch>

Lưu lại và khởi động lại Apache bằng lệnh service httpd restart

Giờ Apache đã chạy file .php khi truy cập đến

Thiết lập trên cũng đã tích hợp thư viện để truy cập MySQL là thư viện MySqli, PDO_MYSQL. Nếu cần MySQL Server trên Server này luôn thì cài vào theo Cài đặt MySQL

SỬ DỤNG PHP-FPM

Trong cấu hình cài đặt ở trên có tham số kích hoạt build hỗ trợ PHP-FPM với tham số --enable-fpm, đây là loại Handler rất nhanh, có thể khởi chạy nhiều thread PHP, giúp cho các trang có lượng truy cập lớn chạy nhanh hơn. Nếu muốn dùng nó thay cho Handler mặc định ở trên (Apache 2.0 Handler) thì cần một số thiết lập như sau, di chuyển vào thư mục mã nguồn PHP ở trên (bằng lệnh CD):

#TÌM init.d.php-fpm
# find / -name "init.d.php-fpm"
./sapi/fpm/init.d.php-fpm
# cp ./sapi/fpm/init.d.php-fpm /usr/local/bin/php-fpm
# chmod +x /usr/local/bin/php-fpm

#TÌM find / -name "php-fpm.conf.default"
# find / -name "php-fpm.conf.default"
/usr/local/php/etc/php-fpm.conf.default
# /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

Mở file /usr/local/php/etc/php-fpm.conf và cập nhật nội dung thành

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
pid = run/php-fpm.pid
; Error log file
; Note: the default prefix is /usr/local/php/var
error_log = log/php-fpm.log

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;
include=/usr/local/php/etc/php-fpm.d/*.conf

Cập nhật file thiết lập /usr/local/php/etc/php-fpm.d/www.conf

# cat <<EOF >/usr/local/php7/etc/php-fpm.d/www.conf
[www]
;listen = /usr/local/php/var/run/www-php-fpm.sock
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = apache
listen.group = apache
listen.mode = 0660
user = apache
group = apache
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
pm.status_path = /status
ping.path = /ping
ping.response = pong
request_terminate_timeout = 100
request_slowlog_timeout = 10s
slowlog = /usr/local/php/var/log/www.log.slow
EOF
#Với CENTOS 7
#TÌM php-fpm.service
# find -name "php-fpm.service"
./sapi/fpm/php-fpm.service

# cp ./sapi/fpm/php-fpm.service /etc/systemd/system/
# chmod +x /etc/systemd/system/php-fpm.service

# systemctl enable php-fpm.service
# systemctl start php-fpm.service

Mở apache.conf hủy Handler PHP cũ đi và thêm vào Handler PHP-FPM gọi PHP qua Proxy:

#LoadModule php7_module /usr/lib/apache/libphp7.so

#<FilesMatch \.(php|phar)>
#    SetHandler application/x-httpd-php
#</FilesMatch>

#Handler all file
SetHandler "proxy:fcgi://127.0.0.1:9000"

#Hoặc (.php) AddHandler "proxy:fcgi://127.0.0.1:9000" .php

Lưu lại và khởi động lại Apache

# service httpd restart

Giờ PHP đã được Apache gọi thông qua PHP-FPM