On December 1, 2016 the PHP development community released version 7.1, which added 12 new features , we mention some of them below:
– Nullable types: Type declarations for parameters and return values can now be marked as nullable by prefixing the type name with a question mark. This signifies that as well as the specified type, NULL can be passed as an argument, or returned as a value, respectively.
– Void functions: The void type functions should not return any value so they should use an empty return or omit it completely, I think that if you omit the return it gives more clarity to the code since it is more consistent with the definition of void, the NULL value is not a valid return value for void functions.
– Symmetric array destructuring : The shorthand array syntax ([]) may now be used to destructure arrays for assignments (including within foreach).
– Class constant visibility: Now the class constants can be defined visibility or scope: public (default), protected or private.
– iterable pseudo-type: A new pseudo-type (similar to callable) called iterable has been introduced. It may be used in parameter and return types, where it accepts either arrays or objects that implement the Traversable interface.
– Multi catch exception handling: Multiple exceptions per catch block may now be specified using the pipe character (|).
– Support for keys in list(): You can now specify keys in list(), or its new shorthand [] syntax. This enables destructuring of arrays with non-integer or non-sequential keys.
Goals
- Update to the latest version of PHP
- Get benefits from the latest language features
- Correct errors from previous versions
- Customize the installation process
Prerequisites
This tutorial assumes that:
- You have some knowledge about GNU/Linux
- You have Ubuntu GNU/Linux installed
- You are familiar with the command interpreter
- You are familiar with the compilation process
Update your OS
$ sudo bash -c 'apt update && apt upgrade'
Download PHP
The lastest released 7.1 version is .33 so you can download it using the following command
$ wget http://php.net/get/php-7.1.33.tar.xz/from/this/mirror -O php-7.1.33.tar.xz
Unzip
We can decompress the downloaded file before using the tar tool
$ tar xJvf php-7.1.33.tar.xz.
where:
x = Extract
J = allows you to manipulate extensions xz
v = verbose
f = file
If the above command issues an error message you must install the package xz-utils details in: Error to decompress .tar.xz file.
Download php-dev-install-dep.sh script from Github
PHP-dev-install-dep.sh is a bash script that helps with the installation of the GNU compiler collection, essential tools and necessary dependencies.
# wget https://raw.githubusercontent.com/yoander/sysadmin/master/shscript/php-dev-install-dep.sh & chmod a+x -c php-dev-install-dep.sh
then run the script by typing:
#./php-dev-install-dep.sh
You can modify the above script according your needs.
Download php-build.sh script from Github
php-build.sh is bash script that helps with the PHP compilation process. Enables the most common extensions: curl, openssl, intl, mysql, pcre,… and it allows you to install PHP in a custom DIR chosen by you, It allows to compile PHP with Apache support (prefork or worker) or with PHP-FPM support.
You can modify php-build.sh according to your needs.
If you compile PHP with PHP-FPM support then you need to modify and set the user and group under which will run our PHP-FPM.
wget https://raw.githubusercontent.com/yoander/sysadmin/master/shscript/php-build.sh & chmod a+x -c php-build.sh
Compile PHP with support for PHP-FPM and systemd
PHP-FPM (FastCGI Process Manager) is an alternative implementation of FastCGI protocol it is include in PHP tree since version 5.3.3.
systemd is a replacement to the SysV initialization system. systemd is also a suite of services and settings for the GNU/Linux operating system administration.
First we create the necessary DIR that will be used during the build process.
# mkdir -p /etc/php /etc/php/conf.d /usr/lib/php/modules /usr/share/pear
We install systemd development libraries
# apt-get install libsystemd-dev
then we compile
#./php-build.sh -fs php-7.0.2
where -f=PHP-FPM support, -s=integration with systemd
Install
# cd php-7.1.33 & make install
Creating configuration file
In the PHP source code are included 2 versions of the ini file. Due we are compiling PHP on a PROD server we type:
# cp -v php.ini-production /etc/php/php.ini
Adjust the directives according to your needs
Creating the configuration file for PHP-FPM
# cp -pv /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf
Edit the file /etc/php/php-fpm.conf
In order to the php-fpm
accepts incoming connection on all network interfaces set the value of the directive listen to:
listen 9000
Or if we want php-fpm
listens on a specific IP address
listen IP:9000
IP can be IPv4 or IPv6
To restrict access to the service php-fpm and allow only certain IPs set the directive listen.allowed_clients
to:
listen.allowed_clients = IP1, IP2, IP3, IP4
IP1, IP2, IP3, IP4 can be IPv4 or IPv6
Enable OPcache
OPcache improves the performance of your applications storing precompiled code in the shared memory allowing to server greater number of requests per second.
echo "zend_extension=opcache.so" > /etc/php/conf.d/20-opcache.ini
Create PHP-FPM initialization service
# cp -v ./sapi/fpm/php-fpm.service /etc/systemd/system/php-fpm.service
If the user and group under which the service will run do not exist then we must create them.
groupadd - www-data system & useradd -system -m -d /var/www - s /usr/sbin/nologin - g www-data www-data
The above commands create the user www-data and group www-data
-m = create HOME DIR if not exist
-d = DIR HOME for the user in question
-s = login shell (do not login because www-data is not an authenticated user on the operating system)
-g = group will the user belong which
If the user and group www-data exist then create the /var/www DIR
# mkdir -p /var/www/
For security reasons, we will change the owner and group to the /var/www DIR
chown root:root -c /var/www/ & chmod 755 /var/www/
Create the config file for the www pool
cp -v /etc/php/php-fpm.d/www.conf.default /etc/php/php-fpm.d/www.conf
Start PHP-FPM service with the operating system
# systemctl enable php-fpm
Start PHP-FPM service
# systemctl php-fpm start
Check the PHP-FPM service
# systemctl status php-fpm
Create the info.php file
echo '<?php phpinfo();' > /var/www/info.php
NGINX
NGINX is a web server with excellent performance and low memory consumption. NGINX can be used as reverse-proxy and load balancer In this example we will use NGINX as a reverse proxy to check our PHP-FPM service.
Installing NGINX
# apt-get install nginx
Edit /etc/nginx/nginx.conf
We look for server section and add the following block
location ~ .php$ {
root /var/www;
fastcgi_pass IP:9000;
include snippets/fastcgi-php.conf;
}
IP is where the php-fpm service is listening on, open the file /etc/nginx/snippets/fastcgi-php.conf
look for and comment the line
try_files $fastcgi_script_name = 404;
Start NGINX with the operating system
# systemctl enable nginx
Start the NGINX service
# systemctl start nginx
Check the NGINX service
# systemctl nginx status
Try
Type in your browser
$ firefox http://IP/info.php
IP is the IP or url where the NGINX server is listening.
How to compile PHP from the source code, 1 (11)
- How to compile PHP 7.1 in Ubuntu 16.04
- Butterfly Builder, a tool to compile PHP
- How to compile PHP 7.4 on Ubuntu 18.04
- How to compile PHP-7.3 en Debian
- How to compile PHP-7.2 on CentOS
- How to Compile PHP 8.0 in Debian 10?
- Compile php 5.5 with apache prefork support
- Compile PHP-5.6 with Apache Worker support
- Compile php-5.6 with fpm support
- How to compile PHP-5.6 on CentOS 7
- Compile PHP 7 on Debian 8
thank you but it’s no longer working, article is bit outdated, please update as PHP 7.1 is no longer supported on ubantu 16.04