Scanning WordPress Plugins for PHP 8.x Compatiability and Incompatible Plugin List

Content Error or Suggest an Edit

Notice a grammatical error or technical inaccuracy? Let us know, we will give you credit!

Introduction

This article stems from Kinsta’s move to disable the creation of new sites on PHP 7.4 starting on November 29th 2022. Here’s the screenshot from the Self Managed WordPress GridPane Facebook Group.

Checking PHP Compatibility using PHP Code Sniffer

There is a free tool out there called PHP Code Sniffer that can check PHP code’s compatibility with specific versions of PHP.

Here’s a link to the Github repository https://github.com/squizlabs/PHP_CodeSniffer which provides more information on the tool.

Downloading PHP Code Sniffer

You can download PHP Code Sniffer’s latest release on their release page. https://github.com/squizlabs/PHP_CodeSniffer/releases

You will want to download the phpcs.phar file into a Linux shell with the PHP cli binary or package available. This can be on your live site via SSH or using WSL or Terminal on macOS as long as the php binary is available. You can run the phpcs.phar command and target a single file or a whole directory.

cd ~/
mkdir tmp
cd tmp
wget https://github.com/squizlabs/PHP_CodeSniffer/releases/download/3.7.1/phpcs.phar

Downloading the PHP Compatibility Coding Standard for PHP CodeSniffer

There is one more step, you will need the PHP Compatibility Coding Standard library for PHP Code Sniffer. You can download this from the Github repository at https://github.com/PHPCompatibility/PHPCompatibility

As with PHP Code Sniffer, you will need to download the latest release file. It’s a zip file and you will need to extract it to a directory. You can place this anywhere, but you will need to know the full path so we can tell PHP Code Sniffer where to find it.

Visit the releases page at https://github.com/PHPCompatibility/PHPCompatibility/releases copy the link to the latest release file and use wget to pull it down, and then extract it.

cd ~/tmp
wget https://github.com/PHPCompatibility/PHPCompatibility/archive/refs/tags/9.3.5.zip
unzip 9.3.5.zip

The above commands will extract the PHP Compatibility library to ~/tmp/PHPCompatibility-9.3.5 and we now need to tell PHP Code Sniffer where this is located.

~/tmp/phpcs.phar --config-set installed_paths ~/tmp/PHPCompatibility-9.3.5

Running PHP Code Sniffer Against a WordPress Plugin

Here is an example of running compatibility for PHP 8.0 against the fluent-smtp plugin

./phpcs.phar -p htdocs/wp-content/plugins/fluent-smtp –standard=PHPCompatibility –runtime-set testVersion 8.0 -n

You should now receive the following output.

…………………………………………………… 60 / 429 (14%)
…………………………………………………… 120 / 429 (28%)
…………………………………………………… 180 / 429 (42%)
…………………………………….EE…………… 240 / 429 (56%)
…………………………………………………… 300 / 429 (70%)
……………………………SS…S.SSS…………….. 360 / 429 (84%)
…………………………………………………… 420 / 429 (98%)
……… 429 / 429 (100%)

FILE: htdocs/wp-content/plugins/fluent-smtp/includes/libs/google-api-client/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
——————————————————————————————————————————————————–
FOUND 44 ERRORS AFFECTING 24 LINES
——————————————————————————————————————————————————–
777 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
777 | ERROR | Function mcrypt_generic_init() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
810 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
810 | ERROR | Function mcrypt_generic_init() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
813 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
813 | ERROR | Function mcrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
818 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
818 | ERROR | Function mcrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
827 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
827 | ERROR | Function mcrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
837 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
837 | ERROR | Function mcrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
840 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
840 | ERROR | Function mcrypt_generic_init() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1089 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1089 | ERROR | Function mcrypt_generic_init() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1117 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1117 | ERROR | Function mcrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1122 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1122 | ERROR | Function mcrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1131 | ERROR | Function mdecrypt_generic() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1134 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1134 | ERROR | Function mcrypt_generic_init() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1596 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1596 | ERROR | Function mcrypt_list_algorithms() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1675 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1675 | ERROR | Function mcrypt_module_close() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1676 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1676 | ERROR | Function mcrypt_module_close() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1681 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1681 | ERROR | Function mcrypt_module_close() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1788 | ERROR | The constant “MCRYPT_MODE_ECB” is deprecated since PHP 7.1 and removed since PHP 7.2
1789 | ERROR | The constant “MCRYPT_MODE_CBC” is deprecated since PHP 7.1 and removed since PHP 7.2
1791 | ERROR | The constant “MCRYPT_MODE_NOFB” is deprecated since PHP 7.1 and removed since PHP 7.2
1792 | ERROR | The constant “MCRYPT_MODE_STREAM” is deprecated since PHP 7.1 and removed since PHP 7.2
1795 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1795 | ERROR | Function mcrypt_module_open() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1796 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1796 | ERROR | Function mcrypt_module_open() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1802 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1802 | ERROR | Function mcrypt_module_open() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
1802 | ERROR | The constant “MCRYPT_MODE_ECB” is deprecated since PHP 7.1 and removed since PHP 7.2
1807 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
1807 | ERROR | Function mcrypt_generic_init() is deprecated since PHP 7.1 and removed since PHP 7.2; Use OpenSSL instead
——————————————————————————————————————————————————–

FILE: /htdocs/wp-content/plugins/fluent-smtp/includes/libs/google-api-client/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php
——————————————————————————————————————————————————-
FOUND 5 ERRORS AFFECTING 2 LINES
——————————————————————————————————————————————————-
69 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
69 | ERROR | Function mcrypt_create_iv() is deprecated since PHP 7.1 and removed since PHP 7.2; Use random_bytes() or OpenSSL instead
108 | ERROR | Extension ‘mcrypt’ is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
108 | ERROR | Function mcrypt_create_iv() is deprecated since PHP 7.1 and removed since PHP 7.2; Use random_bytes() or OpenSSL instead
108 | ERROR | The constant “MCRYPT_DEV_URANDOM” is deprecated since PHP 7.1 and removed since PHP 7.2
——————————————————————————————————————————————————-

Viola, you’ve just found the Fluent SMTP plugin has a library called google-api-client that has incompatible PHP 8.0 code.

Running PHP Code Sniffer Against All Plugins

If you want to run PHP Code Sniffer against all your plugins, simply change the directory path

./phpcs.phar -p htdocs/wp-content/plugins –standard=PHPCompatibility –runtime-set testVersion 8.0 -n

This will produce a report of all your affecting plugins, it might be large.

WordPress Plugins not compatible with PHP 8.0

The following are plugins not compatible with PHP 8.0, if you’ve notified an author of this, please let us know with a link to the support thread and we will post it in the table below.

Changelog

  • 09-22-2022 – Added section “Running PHP Code Sniffer Against All Plugins
0 Shares:
You May Also Like