Remi's RPM repository - Blog - Mot-clé - planet-phpRemi's RPM repository blog Information about RPM PHP Fedora RHEL and CentOS2024-03-29T06:12:59+01:00Remi Colleturn:md5:04ca934806743f3bda12513f927cafa9DotclearPHP on the road to the 8.1.0 releaseurn:md5:e2aed24f2b1a95dfc22d900cbea02bc52021-09-02T17:43:00+02:002021-09-02T16:49:26+02:00RemiRPMBetaPHPplanet-phpRPM<p>Version <a href="https://www.php.net/archive/2021.php#2021-09-02-1">8.1.0 Release Candidate 1</a> is released. It's now enter the stabilisation phase for the <strong>developers</strong>, and the test phase for the users.</p>
<p>RPM are available in the <strong>remi-php81</strong> repository for <strong>Fedora </strong>≥<strong> 33</strong> and <strong>Enterprise Linux </strong>≥<strong> 7</strong> (RHEL, CentOS), or in the <strong>php:remi-8.1</strong> stream, and as <em>Software Collection</em> in the <strong>remi-safe</strong> repository (or <strong>remi</strong> for Fedora)</p>
<p> </p> <p><img alt="emblem-important-4-24.png" class="media" src="https://blog.remirepo.net/public/icons/emblem-important-4-24.png" style="float: left; margin: 0 1em 0 0;" title="" />The repository provides <strong>development</strong> versions which are not suitable for production usage.</p>
<p>Also read: <a class="ref-post" href="https://blog.remirepo.net/post/2021/06/11/PHP-8.1-as-Software-Collection">PHP 8.1 as Software Collection</a></p>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />Installation : read the <a href="https://blog.remirepo.net/pages/Config-en">Repository configuration</a> and choose installation mode.</p>
<p><strong>Replacement</strong> of default PHP by version <strong>8.1</strong> installation, module way (<strong>simplest</strong> way on Fedora and EL-8):</p>
<pre>
dnf module reset php
dnf module install php:remi-8.1
dnf update
</pre>
<p><strong>Replacement</strong> of default PHP by version <strong>8.1</strong> installation, repository way (<strong>simplest </strong>way on EL-7):</p>
<pre>
yum-config-manager --enable remi-php81
yum update php\*</pre>
<p><strong>Parallel installation</strong> of version <strong>8.1</strong> as <a class="ref-post" href="https://blog.remirepo.net/post/2021/06/11/PHP-8.1-as-Software-Collection">Software Collection</a> (<strong>recommended</strong> for tests):</p>
<pre>
yum install php81</pre>
<p><strong><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />To be noticed : </strong></p>
<ul>
<li>EL8 rpm are build using RHEL-<strong>8.4</strong></li>
<li>EL7 rpm are build using RHEL-<strong>7.9</strong></li>
<li>lot of extensions are also available, see the <a href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PHP extension RPM status</a> page and <a href="https://github.com/remicollet/remirepo/issues/177">PHP version 8.1</a> tracker</li>
<li>follow the comments on this page for update until final version</li>
<li>should be proposed for Fedora 36</li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" /><strong>Information</strong>, read:</p>
<ul><!-- <li><a href="http://php.net/manual/en/migration70.php">Migrating from PHP 5.6.x to PHP 7.0.x</a></li> -->
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-8.1/UPGRADING">UPGRADING</a></li>
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-8.1/UPGRADING.INTERNALS">UPGRADING.INTERNALS</a></li>
</ul>
<p align="center"><strong>Base</strong> packages (php)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php-common&version=8.1.0~RC1&lang=en" style="margin: 1em auto; display: block;" /></p>
<p align="center"><strong>Software Collections </strong>(php81)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php81-php-common&version=8.1.0~rc1&lang=en" style="margin: 1em auto; display: block;" /></p>Install PHP 8.0 on CentOS, RHEL or Fedoraurn:md5:05b858e9fb47a02e8f99af6e2bfaee712020-11-30T15:10:00+01:002021-11-03T14:50:18+01:00RemiHowToCentOSFedoraPHPplanet-phpRHELRPM<p>Here is a quick <em><strong>howto</strong></em> upgrade default <a href="http://php.net/">PHP</a> version provided on <a href="http://fedoraproject.org/">Fedora</a>, <a href="https://www.redhat.com/fr/technologies/linux-platforms/enterprise-linux">RHEL</a>, <a href="https://www.centos.org/">CentOS</a>, <a href="https://almalinux.org/">AlmaLinux</a>, <a href="https://rockylinux.org/fr/">Rocky Linux</a> or other clones with latest version <strong>8.0</strong>.</p>
<p>You can also follow the <a href="https://rpms.remirepo.net/wizard/">Wizard instructions</a>.</p> <p> </p>
<h1>Repositories configuration:</h1>
<p>On <strong>Fedora</strong>, standards repositories are enough, on <strong>Enterprise Linux</strong> (RHEL, CentOS) the <strong>Extra Packages for Enterprise Linux</strong> (<a href="https://fedoraproject.org/wiki/EPEL">EPEL</a>) repository must be configured, and on RHEL the<strong> optional</strong> channel must be enabled.</p>
<h2>Fedora 33</h2>
<pre>
dnf install https://rpms.remirepo.net/fedora/remi-release-33.rpm
</pre>
<h2>Fedora 32</h2>
<pre>
dnf install https://rpms.remirepo.net/fedora/remi-release-32.rpm
</pre>
<h2>RHEL version 8.3</h2>
<pre>
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
</pre>
<h2>RHEL version 7.9</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms</pre>
<h2>CentOS version 8</h2>
<pre>
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
</pre>
<h2>CentOS version 7</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
</pre>
<p> </p>
<h1>php module usage</h1>
<p>With <strong>Fedora modular</strong> and <strong>RHEL / CentOS 8,</strong> you can simply use the <strong>remi-8.0</strong> stream of the <strong>php </strong>module</p>
<pre>
dnf module reset php
dnf module install php:remi-8.0</pre>
<p> </p>
<h1>remi-php80 repository activation</h1>
<p>Needed packages are in the <strong>remi-safe</strong> (enabled by default) and <strong>remi-php80 </strong>repositories, the latest is not enabled by default (administrator choice according to the desired PHP version).</p>
<h2>RHEL or CentOS 7</h2>
<pre>
yum install yum-utils
yum-config-manager --enable remi-php80</pre>
<h2>Fedora</h2>
<pre>
dnf config-manager --set-enabled remi-php80</pre>
<p> </p>
<h1>PHP upgrade</h1>
<p>By choice, the packages have the same name than in the distribution, so a simple update is enough:</p>
<pre>
yum update</pre>
<p>That's all :)</p>
<pre>
$ php -v
PHP 8.0.0 (cli) (built: Nov 24 2020 17:04:03) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
</pre>
<p> </p>
<h1>Known issues</h1>
<p>The upgrade can fail (by design) when some installed extensions are not yet compatible with PHP 8.0.</p>
<p>See the compatibility tracking list: <a class="ref-post" href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PECL extensions RPM status</a></p>
<p>If these extensions are not mandatory, you can remove them before the upgrade, else, you will have to be patient.</p>
<p>Warning: some extensions are still under development, but it seems useful to provide them to allow upgrade to more people, and to allow user to give feedback to the authors.</p>
<p> </p>
<h1>More d'information</h1>
<p>If you prefer to install PHP 8.0 <strong>beside the default PHP</strong> version, this can be achieved using the <strong>php80</strong> prefixed packages, see the <a class="ref-post" href="https://blog.remirepo.net/post/2020/04/10/PHP-8.0-as-Software-Collection">PHP 8.0 as Software Collection</a> post.</p>
<p>You can also try the <a href="https://rpms.remirepo.net/wizard/">configuration wizard</a>.</p>
<p>The packages available in the repository will be used as sources for <strong>Fedora 35</strong> (if self contained change proposal is accepted).</p>
<p>By providing a full feature PHP stack, with about <strong>130</strong> available extensions, 7 PHP versions, as base and SCL packages, for Fedora and Enterprise Linux, and with <strong>300 000</strong> download per day, <strong>remi</strong> repository became in the last <a class="ref-post" href="https://blog.remirepo.net/post/2015/04/27/10-years">15 years</a> a reference for PHP users on RPM based distributions, maintained by an active contributor to the projects (<a href="https://admin.fedoraproject.org/pkgdb/packager/remi/">Fedora</a>, <a href="https://github.com/php/php-src/graphs/contributors">PHP</a>, <a href="https://pecl.php.net/user/remi">PECL</a>...).</p>
<p>See also:</p>
<ul>
<li><a href="https://blog.remirepo.net/feed/en/rss2">Posts RSS feed</a> (versions announcements)</li>
<li><a href="https://blog.remirepo.net/feed/en/rss2/comments">Comments RSS feed</a></li>
<li><a href="https://rpms.remirepo.net/enterprise/8/php80/x86_64/repoview/latest-feed.xml">Repository RSS feed</a> (example for EL-8, php 8.0)</li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2019/12/03/Install-PHP-7.4-on-CentOS-RHEL-or-Fedora">Install PHP 7.4 on CentOS, RHEL or Fedora</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2018/12/10/Install-PHP-7.3-on-CentOS-RHEL-or-Fedora">Install PHP 7.3 on CentOS, RHEL or Fedora</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2017/12/04/Install-PHP-7.2-on-CentOS-RHEL-or-Fedora">Install PHP 7.2 on CentOS, RHEL or Fedora</a></li>
</ul>PHP on the road to the 8.0.0 releaseurn:md5:0a1b1c2ade8956886f5550bb22631a672020-09-12T08:28:00+02:002021-09-02T16:44:15+02:00RemiArchivesBetaPHPplanet-phpRPM<p>Version <a href="https://www.php.net/archive/2020.php#2020-09-03-3">8.0.0 Beta 3</a> is released. It's now enter the stabilisation phase for the <strong>developers</strong>, and the test phase for the users.</p>
<p>RPM are available in the <strong>remi-php80</strong> repository for <strong>Fedora </strong>≥<strong> 31</strong> and <strong>Enterprise Linux </strong>≥<strong> 7</strong> (RHEL, CentOS), or in the <strong>php:remi-8.0</strong> stream, and as <em>Software Collection</em> in the <strong>remi-safe</strong> repository (or <strong>remi</strong> for Fedora)</p>
<p> </p> <p><img alt="emblem-important-4-24.png" class="media" src="https://blog.remirepo.net/public/icons/emblem-important-4-24.png" style="float: left; margin: 0 1em 0 0;" title="" />The repository provides <strong>development</strong> versions which are not suitable for production usage.</p>
<p>Also read: <a class="ref-post" href="https://blog.remirepo.net/post/2020/04/10/PHP-8.0-as-Software-Collection">PHP 8.0 as Software Collection</a></p>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />Installation : read the <a href="https://blog.remirepo.net/pages/Config-en">Repository configuration</a> and choose installation mode.</p>
<p><strong>Replacement</strong> of default PHP by version <strong>8.0</strong> installation, module way (<strong>simplest</strong> way on Fedora and EL-8):</p>
<pre>
dnf module disable php
dnf module install php:remi-8.0
dnf update
</pre>
<p><strong>Replacement</strong> of default PHP by version <strong>8.0</strong> installation, repository way (<strong>simplest </strong>way on EL-7):</p>
<pre>
yum-config-manager --enable remi-php80
yum update php\*</pre>
<p><strong>Parallel installation</strong> of version <strong>8.0</strong> as <a class="ref-post" href="https://blog.remirepo.net/post/2020/04/10/PHP-8.0-as-Software-Collection">Software Collection</a> (<strong>recommended</strong> for tests):</p>
<pre>
yum install php80</pre>
<p><strong><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />To be noticed : </strong></p>
<ul>
<li>EL8 rpm are build using RHEL-<strong>8.2</strong></li>
<li>EL7 rpm are build using RHEL-<strong>7.8</strong></li>
<li>lot of extensions are also available, see the <a href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PHP extension RPM status</a> and <a class="ref-post" href="https://blog.remirepo.net/post/2020/09/21/PHP-extensions-status-with-upcoming-PHP-8.0">PHP extensions status with upcoming PHP 8.0</a> pages</li>
<li>follow the comments on this page for update until final version.</li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" /><strong>Information</strong>, read:</p>
<ul><!-- <li><a href="http://php.net/manual/en/migration70.php">Migrating from PHP 5.6.x to PHP 7.0.x</a></li> -->
<li><a href="https://raw.githubusercontent.com/php/php-src/master/UPGRADING">UPGRADING</a></li>
<li><a href="https://raw.githubusercontent.com/php/php-src/master/UPGRADING.INTERNALS">UPGRADING.INTERNALS</a></li>
</ul>
<p align="center"><strong>Base</strong> packages (php)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php-common&version=8.0.0~beta3&lang=en" style="margin: 1em auto; display: block;" /></p>
<p align="center"><strong>Software Collections </strong>(php80)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php80-php-common&version=8.0.0~beta3&lang=en" style="margin: 1em auto; display: block;" /></p>Install PHP 7.4 on CentOS, RHEL or Fedoraurn:md5:96bca40047f35ac5dd2c00fe446f6ad32019-12-03T16:26:00+01:002019-12-05T10:34:58+01:00RemiHowToCentOSFedoraPHPplanet-phpRHELRPM<p>Here is a quick <em><strong>howto</strong></em> upgrade default <a href="http://php.net/">PHP</a> version provided on <a href="http://fedoraproject.org/">Fedora</a>, <a href="https://www.redhat.com/fr/technologies/linux-platforms/enterprise-linux">RHEL</a> or <a href="https://www.centos.org/">CentOS</a> with latest version <strong>7.4</strong>.</p> <p> </p>
<h1>Repositories configuration:</h1>
<p>On <strong>Fedora</strong>, standards repositories are enough, on <strong>Enterprise Linux</strong> (RHEL, CentOS) the <strong>Extra Packages for Enterprise Linux</strong> (<a href="https://fedoraproject.org/wiki/EPEL">EPEL</a>) repository must be configured, and on RHEL the<strong> optional</strong> channel must be enabled.</p>
<h2>Fedora 31</h2>
<pre>
dnf install https://rpms.remirepo.net/fedora/remi-release-31.rpm
</pre>
<h2>Fedora 30</h2>
<pre>
dnf install https://rpms.remirepo.net/fedora/remi-release-30.rpm
</pre>
<h2>RHEL version 8.1</h2>
<pre>
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
</pre>
<h2>RHEL version 7.7</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms</pre>
<h2>CentOS version 8.0</h2>
<pre>
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
</pre>
<h2>CentOS version 7.7</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
</pre>
<p> </p>
<h1>php module usage</h1>
<p>With <strong>Fedora modular</strong> and <strong>RHEL / CentOS 8,</strong> you can simply use the <strong>remi-7.4</strong> stream of the <strong>php </strong>module</p>
<pre>
dnf module reset php
dnf module install php:remi-7.4</pre>
<p> </p>
<h1>remi-php74 repository activation</h1>
<p>Needed packages are in the <strong>remi-safe</strong> (enabled by default) and <strong>remi-php74 </strong>repositories, the latest is not enabled by default (administrator choice according to the desired PHP version).</p>
<h2>RHEL or CentOS 7</h2>
<pre>
yum install yum-utils
yum-config-manager --enable remi-php74</pre>
<h2>Fedora</h2>
<pre>
dnf config-manager --set-enabled remi-php74</pre>
<p> </p>
<h1>PHP upgrade</h1>
<p>By choice, the packages have the same name than in the distribution, so a simple update is enough:</p>
<pre>
yum update</pre>
<p>That's all :)</p>
<pre>
$ php -v
PHP 7.4.0 (cli) (built: Nov 26 2019 20:13:36) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.0, Copyright (c), by Zend Technologies
</pre>
<p> </p>
<h1>Known issues</h1>
<p>The upgrade can fail (by design) when some installed extensions are not yet compatible with PHP 7.4.</p>
<p>See the compatibility tracking list: <a class="ref-post" href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PECL extensions RPM status</a></p>
<p>If these extensions are not mandatory, you can remove them before the upgrade, else, you will have to be patient.</p>
<p>Warning: some extensions are still under development, but it seems useful to provide them to allow upgrade to more people, and to allow user to give feedback to the authors.</p>
<p> </p>
<h1>More d'information</h1>
<p>If you prefer to install PHP 7.4 <strong>beside default PHP</strong> version, this can be achieved using the <strong>php74</strong> prefixed packages, see the <a class="ref-post" href="https://blog.remirepo.net/post/2019/05/22/PHP-7.4-as-Software-Collection">PHP 7.4 as Software Collection</a> post.</p>
<p>You can also try the <a href="https://rpms.remirepo.net/wizard/">configuration wizard</a>.</p>
<p>The packages available in the repository was used as source for <strong>Fedora 32</strong> (self contained <a href="https://fedoraproject.org/wiki/Changes/php74">change</a> proposal, is already accepted and testable).</p>
<p>By providing a full feature PHP stack, with about <strong>130</strong> available extensions, 6 PHP versions, as base and SCL packages, for Fedora and Enterprise Linux, and with <strong>200 000</strong> download per day, <strong>remi</strong> repository became in the last <a class="ref-post" href="https://blog.remirepo.net/post/2015/04/27/10-years">14 years</a> a reference for PHP users on RPM based distributions, maintained by an active contributor to the projects (<a href="https://admin.fedoraproject.org/pkgdb/packager/remi/">Fedora</a>, <a href="https://github.com/php/php-src/graphs/contributors">PHP</a>, <a href="https://pecl.php.net/user/remi">PECL</a>...).</p>
<p>See also:</p>
<ul>
<li><a href="https://blog.remirepo.net/feed/en/rss2">Posts RSS feed</a> (versions announcements)</li>
<li><a href="https://blog.remirepo.net/feed/en/rss2/comments">Comments RSS feed</a></li>
<li><a href="https://rpms.remirepo.net/enterprise/8/php74/x86_64/repoview/latest-feed.xml">Repository RSS feed</a> (example for EL-8, php 7.4)</li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2018/12/10/Install-PHP-7.3-on-CentOS-RHEL-or-Fedora">Install PHP 7.3 on CentOS, RHEL or Fedora</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2017/12/04/Install-PHP-7.2-on-CentOS-RHEL-or-Fedora">Install PHP 7.2 on CentOS, RHEL or Fedora</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2016/12/05/Install-PHP-7.1-on-CentOS-RHEL-or-Fedora">Install PHP 7.1 on CentOS, RHEL or Fedora</a></li>
</ul>FFI extension usage with PHP 7.4urn:md5:37a5420ae9e3c446f4353230991443172019-10-23T15:09:00+02:002019-10-23T17:01:11+02:00RemiDéveloppementContributeurPHPplanet-php<p>The <strong>FFI</strong> extension (Foreign Function Interface) give access to features from system libraries directly from PHP without any need to additional extension.</p>
<p>Here is some examples, results of my tests of this extension.</p> <h2>1. Preloading</h2>
<p>Another new feature of PHP 7.4 is to allow to preload some classes, which will be usable as internal classes of the language or of an extension.</p>
<ul>
<li>File with class definition: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/preload-foo.inc">preload-foo.inc</a></li>
<li>Test file checking Fichier de test vérifiant l’existence de la classe: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/foo.php">foo.php</a></li>
</ul>
<p><strong>Usage:</strong></p>
<pre>
$ php -dopcache.preload=preload-foo.inc foo.php
Class Remi\Foo exists</pre>
<p>So we'll use this feature with FFI.</p>
<h2>2. ZSTD compression</h2>
<p><a href="http://www.zstd.net/">Zstandard</a> is a well known and efficient compression algorithm. The <a href="https://github.com/facebook/zstd">libzstd</a> library provides a reference implementation.</p>
<p>A <a href="https://github.com/kjdev/php-ext-zstd">zstd for PHP</a> extension already exists, we'll use it to checkthe performance of our <strong>FFI</strong> solution.</p>
<ul>
<li>Library definition, copy/paste from the library header <strong>zstd.h</strong>: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/preload-zstd.h">preload-zstd.h</a></li>
<li><strong>Remi\Zstd</strong> class definition which can be preloaded: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/preload-zstd.inc">preload-zstd.inc</a></li>
<li><strong>Test</strong> script using this classe and zstd extension for benchmarking: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/zstd.php">zstd.php</a></li>
</ul>
<p>Notice: if the class is not preloaded, it will be included, simple usage:</p>
<pre>
$ php zstd.php</pre>
<p>If only the class is preloaded, headers will be loaded using <a href="https://www.php.net/manual/en/ffi.load.php">FFI;load()</a>, usage:</p>
<pre>
$ php -d opcache.preload=preload-zstd.inc zstd.php</pre>
<p>Starting with <strong>7.4.0RC5</strong> (or using RPM from my repository), headers can also be preloaded, and will be used calling <a href="https://www.php.net/manual/en/ffi.scope.php">FFI:scope()</a>, usage:</p>
<pre>
$ php d ffi.preload=preload-zstd.h -d opcache.preload=preload-zstd.inc zstd.php</pre>
<p>In previous versions, headers preload only works when run as a normal user, so doesn't work with <strong>mod_php</strong> or <strong>php-fpm</strong> started under administrative account (<em>root</em>)</p>
<p><strong>Execution</strong> <strong>output</strong>:</p>
<pre>
PHP version 7.4.0RC4
Use preloaded class
Using FFI::scope OK
Src length = 8673632
ZSTD_compress = 1828461
Src length = 1828461
ZSTD_decompress = 8673632
Check = OK
Using FFI extension = 0,09"
Src length = 8673632
ZSTD_compress = 1828461
Src length = 1828461
ZSTD_decompress = 8673632
Check = OK
Using ZSTD extension = 0,09"
</pre>
<p>For final user, code using <strong>FFI</strong> is close the code using the <strong>Zstd</strong> extension, and performances are identical (no noticeable difference).</p>
<h2>3. Redis client</h2>
<p>Various implementations of <a class="ref-post" href="https://blog.remirepo.net/post/2016/11/13/Redis-from-PHP">Redis client</a> exist, written in C or PHP, this sample use FFI to access functions of the <a href="https://github.com/redis/hiredis">hiredis</a> library.</p>
<ul>
<li>Library definition, copy/paste from the library headers <strong>hiredis/hredis.h</strong> et <strong>hiredis/read.h</strong>: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/preload-redis.h">preload-redis.h</a></li>
<li><strong>Remi\Redis</strong> class definition to be preloaded: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/preload-redis.inc">preload-redis.inc</a></li>
<li><strong>Test</strong> script using this class: <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/plain/redis.php">redis.php</a></li>
</ul>
<p><strong>Output extract</strong></p>
<pre>
$ php74 -d ffi.preload=preload-redis.h -d opcache.preload=preload-redis.inc redis.php
...
+ Remi\Redis::__construct(localhost, 6379)
+ Remi\Redis::initFFI()
+ Remi\Redis::del(foo)
int(1)
+ Remi\Redis::get(foo)
NULL
+ Remi\Redis::set(foo, 2019/10/23 12:45:03)
string(2) "OK"
+ Remi\Redis::get(foo)
string(19) "2019/10/23 12:45:03"
+ Remi\Redis::__destruct</pre>
<p>This simplistic code, written in a few hours works and fulfill its goal..</p>
<h2>4. Liens</h2>
<ul>
<li>Complete and really detailed documentation: <a href="https://www.php.net/ffi">https://www.php.net/ffi</a></li>
<li><a href="https://github.com/ircmaxell/FFIMe">FFIme</a> projet by Anthony Ferrara designed to automate soe part of the work (experimental)</li>
<li>Git reporitory with used <a href="https://git.remirepo.net/cgit/tools/ffi-examples.git/tree/">examples</a></li>
</ul>
<h2>5. Conclusion</h2>
<p><strong>FFI</strong> appears to be a new way to develop directly using PHP, and allowing more features without any need to create and maintain extension written in C language.</p>
<p>Its usage stills requires good C skills, to understand the library headers and documentation, and to avoid memory leaks, but should attract more developers / contributors.</p>
<p>The future will tell if <strong>FFI</strong> keep its promises, for a production usage, and if it will allow to reduce the number of existing extensions which will have to be maintained and adapted for next PHP versions.</p>PHP on the road to the 7.4.0 releaseurn:md5:325e9142f9b8c33614aca3fd8f4e0e072019-09-06T10:35:00+02:002019-09-18T09:36:48+02:00RemiRPMBetaPHPplanet-phpRPM<p>Version <a href="https://www.php.net/archive/2019.php#2019-09-05-1">7.4.0RC1</a> is released. It's now enter the stabilisation phase for the <strong>developers</strong>, and the test phase for the users.</p>
<p>RPM are available in the <strong>remi-php74</strong> repository for <strong>Fedora </strong>≥<strong> 29</strong> and <strong>Enterprise Linux </strong>≥<strong> 7</strong> (RHEL, CentOS) and as <em>Software Collection</em> in the <strong>remi-safe</strong> repository (or <strong>remi</strong> for Fedora)</p>
<p> </p> <p><img alt="emblem-important-4-24.png" class="media" src="https://blog.remirepo.net/public/icons/emblem-important-4-24.png" style="float: left; margin: 0 1em 0 0;" title="" />The repository provides <strong>development</strong> versions which are not suitable for production usage.</p>
<p>Also read: <a class="ref-post" href="https://blog.remirepo.net/post/2019/05/22/PHP-7.4-as-Software-Collection">PHP 7.4 as Software Collection</a></p>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />Installation : read the <a href="https://blog.remirepo.net/pages/Config-en">Repository configuration</a> and choose installation mode.</p>
<p><strong>Replacement</strong> of default PHP by version <strong>7.4</strong> installation, module way (<strong>simplest</strong> way on Fedora and EL-8):</p>
<pre>
dnf module disable php
dnf module install php:remi-7.4
dnf update
</pre>
<p><strong>Replacement</strong> of default PHP by version <strong>7.4</strong> installation, repository way (<strong>simplest </strong>way on EL-7):</p>
<pre>
yum-config-manager --enable remi-php74
yum update php\*</pre>
<p><strong>Parallel installation</strong> of version <strong>7.4</strong> as <a class="ref-post" href="https://blog.remirepo.net/post/2018/06/08/PHP-7.3-as-Software-Collection">Software Collection</a> (<strong>recommended</strong> for tests):</p>
<pre>
yum install php74</pre>
<p><strong><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />To be noticed : </strong></p>
<ul>
<li>EL7 rpm are build using RHEL-<strong>7.6</strong></li>
<li>EL6 rpm are build using RHEL-<strong>6.10</strong></li>
<li>lot of extensions are also available, see the <a href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PECL extension RPM status</a> page</li>
<li>follow the comments on this page for update until final version.</li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" /><strong>Information</strong>, read:</p>
<ul><!-- <li><a href="http://php.net/manual/en/migration70.php">Migrating from PHP 5.6.x to PHP 7.0.x</a></li> -->
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-7.4/UPGRADING">UPGRADING</a></li>
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-7.4/UPGRADING.INTERNALS">UPGRADING.INTERNALS</a></li>
</ul>
<p align="center"><strong>Base</strong> packages (php)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php-common&version=7.4.0~RC1&lang=en" style="margin: 1em auto; display: block;" /></p>
<p align="center"><strong>Software Collections </strong>(php74)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php74-php-common&version=7.4.0~rc1&lang=en" style="margin: 1em auto; display: block;" /></p>PHP extensions status with upcoming PHP 7.4urn:md5:ca4db45503aaa4b70c283999f639ac022019-05-23T13:44:00+02:002019-07-12T14:34:06+02:00RemiDéveloppementContributeurPHPplanet-php<p>With <strong>PHP 7.4</strong> entering stabilization phase, time to check the status of most commonly used PHP extensions (at least, the ones available in my repository).</p>
<p>Here is the (not yet) exhaustive list.</p> <h2>1. Compatible</h2>
<p>The last published version is compatible</p>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
</thead>
<tbody>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ahocorasick">ahocorasick</a></td>
<td><strong>0.0.6</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/amqp">amqp</a></td>
<td><strong>1.9.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/apcu">apcu</a></td>
<td><strong>5.1.17</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/apcu_bc">apcu_bc</a></td>
<td><strong>1.0.5</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/apfd">apfd</a></td>
<td><strong>1.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ast">ast</a></td>
<td><strong>1.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/base58">base58</a></td>
<td><strong>0.1.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/bitset">bitset</a></td>
<td><strong>3.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-brotli/">brotli</a></td>
<td><strong>0.7.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/cmark">cmark</a></td>
<td><strong>1.2.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/componere">componere</a></td>
<td><strong>3.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/couchbase">couchbase</a></td>
<td><strong>2.6.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/crypto">crypto</a></td>
<td><strong>0.3.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/datadog_trace">datadog_trace</a></td>
<td><strong>0.3.1</strong></td>
<td>OK, 1 failed test fixed by <a href="https://github.com/DataDog/dd-trace-php/pull/452">PR #452</a></td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/dbase">dbase</a></td>
<td><strong>7.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/decimal">decimal</a></td>
<td><strong>1.3.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/druid">druid</a></td>
<td><strong>1.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/dio">dio</a></td>
<td><strong>0.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ds">ds</a></td>
<td><strong>1.2.9</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/eio">eio</a></td>
<td><strong>2.0.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/env">env</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ev">ev</a></td>
<td><strong>1.0.6</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/event">event</a></td>
<td><strong>2.5.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/fann">fann</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/gearman">gearman</a></td>
<td><strong>2.0.5</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/gender">gender</a></td>
<td><strong>1.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/geoip">geoip</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/geospatial">geospatial</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/gearman">gearman</a></td>
<td><strong>2.0.5</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/geos">geos</a></td>
<td><strong>1.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/gmagick">gmagick</a></td>
<td><strong>2.0.5RC1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/gnupg">gnupg</a></td>
<td><strong>1.4.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/grpc">grpc</a></td>
<td><strong>1.21.0RC1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/handlebars">handlebars</a></td>
<td><strong>0.8.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/hdr_histogram">hdr_histogram</a></td>
<td><strong>0.3.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://www.horde.org/">horde_lz4</a></td>
<td><strong>1.0.10</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/hprose">hprose</a></td>
<td><strong>1.6.7</strong></td>
<td>OK, was fixed by <a href="https://github.com/hprose/hprose-pecl/pull/17">PR #17</a></td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/hrtime">hrtime</a></td>
<td><strong>0.6.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/pecl_http">http</a></td>
<td><strong>3.2.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/http_message">http_message</a></td>
<td><strong>0.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/igbinary">igbinary</a></td>
<td><strong>3.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/imagick">imagick</a></td>
<td><strong>3.4.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/inotify">inotify</a></td>
<td><strong>2.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ip2location">ip2location</a></td>
<td><strong>8.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/json_post">json_post</a></td>
<td><strong>1.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/krb5">krb5</a></td>
<td><strong>1.1.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/leveldb">leveldb</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://libvirt.org/php/">libvirt</a></td>
<td><strong>0.5.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/lua">lua</a></td>
<td><strong>2.0.6</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/luasandbox">luasandbox</a></td>
<td><strong>3.0.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/lzf">lzf</a></td>
<td><strong>1.6.7</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-lz4">lz4</a></td>
<td><strong>0.3.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/mailparse">mailparse</a></td>
<td><strong>3.0.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/maxmind/MaxMind-DB-Reader-php">maxminddb</a></td>
<td><strong>1.4.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/mcrypt">mcrypt</a></td>
<td><strong>1.0.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/memcache">memcache</a></td>
<td><strong>4.0.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/memcached">memcached</a></td>
<td><strong>3.1.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/memprof">memprof</a></td>
<td><strong>2.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/mogilefs">mogilefs</a></td>
<td><strong>0.9.3.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/mongodb">mongodb</a></td>
<td><strong>1.5.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/mosquitto">mosquitto</a></td>
<td><strong>0.4.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/msgpack">msgpack</a></td>
<td><strong>2.0.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/mustache">mustache</a></td>
<td><strong>0.9.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/nsq">nsq</a></td>
<td><strong>3.4.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/opencensus">opencensus</a></td>
<td><strong>0.2.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/parallel">parallel</a></td>
<td><strong>1.1.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/pdflib">pdflib</a></td>
<td><strong>4.1.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/pcov">pcov</a></td>
<td><strong>1.0.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/Letargie/pggi">pggi</a></td>
<td><strong>0.3.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/nrk/phpiredis">phpiredis</a></td>
<td><strong>1.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/tony2001/pinba_extension">pinba</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/pq">pq</a></td>
<td><strong>2.1.5</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/propro">propro</a></td>
<td><strong>2.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/psr">psr</a></td>
<td><strong>0.6.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/radius">radius</a></td>
<td><strong>1.4.0b1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/raphf">raphf</a></td>
<td><strong>2.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/rar">rar</a></td>
<td><strong>4.0.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/rdkafka">rdkafka</a></td>
<td><strong>3.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/redis">redis</a></td>
<td><strong>4.3.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/rpminfo">rpminfo</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/rrd">rrd</a></td>
<td><strong>2.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/sandbox">sandbox</a></td>
<td><strong>0.1.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/scrypt">scrypt</a></td>
<td><strong>1.4.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/selinux">selinux</a></td>
<td><strong>0.4.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/smbclient">smbclient</a></td>
<td><strong>1.0.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-snappy">snappy</a></td>
<td><strong>0.1.9</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/nbs-system/snuffleupagus">snuffleupagus</a></td>
<td><strong>0.5.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/solr">solr</a></td>
<td><strong>2.5.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/sqlsrv">sqlsrv</a></td>
<td><strong>5.6.1</strong></td>
<td>OK (need post alpha1)</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ssdeep">ssdeep</a></td>
<td><strong>1.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/ssh2">ssh2</a></td>
<td><strong>1.1.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/stats">stats</a></td>
<td><strong>2.0.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/stomp">stomp</a></td>
<td><strong>1.2.10</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/svm">svm</a></td>
<td><strong>0.2.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/swoole">swoole</a></td>
<td><strong>4.3.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/sync">sync</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/taint">taint</a></td>
<td><strong>2.0.5</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/tcpwrap">tcpwrap</a></td>
<td><strong>1.2.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/termbox">termbox</a></td>
<td><strong>0.1.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/timecop">timecop</a></td>
<td><strong>2.0.2</strong></td>
<td>Some failed tests since 7.2 (related to timelib changes)</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/trace">trace</a></td>
<td><strong>1.0.1beta</strong></td>
<td>But test suite fails</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/trader">trader</a></td>
<td><strong>0.5.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/translit">translit</a></td>
<td><strong>0.6.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/uopz">uopz</a></td>
<td><strong>6.1.0</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/uuid">uuid</a></td>
<td><strong>1.0.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/uv">uv</a></td>
<td><strong>0.2.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/varnish">varnish</a></td>
<td><strong>1.2.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/vips">vips</a></td>
<td><strong>1.0.9</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/vld">vld</a></td>
<td><strong>0.16.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/krakjoe/wkhtmltox">wkhtmltox</a></td>
<td><strong>0.3.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/xattr">xattr</a></td>
<td><strong>1.3.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/xdebug">xdebug</a></td>
<td><strong>2.8.0-alpha1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/xdiff">xdiff</a></td>
<td><strong>2.0.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/xlswriter">xlswriter</a></td>
<td><strong>1.2.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/xmldiff">xmldiff</a></td>
<td><strong>1.1.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/xxtea">xxtea</a></td>
<td><strong>1.0.11</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/yac">yac</a></td>
<td><strong>2.0.2</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/yaml">yaml</a></td>
<td><strong>2.0.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/yaz">yaz</a></td>
<td><strong>1.2.3</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/phalcon/php-zephir-parser">zephir_parser</a></td>
<td><strong>1.3.1</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/zookeeper">zookeeper</a></td>
<td><strong>0.6.4</strong></td>
<td>OK</td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-zstd">zstd</a></td>
<td><strong>0.7.3</strong></td>
<td>OK</td>
</tr>
</tbody>
</table>
<h2> </h2>
<h2>2. Work in progress</h2>
<p>These extensions have been fixed upstream (or PR are available) but no official release.</p>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/cassandra">cassandra</a></td>
<td><strong>1.3.2</strong></td>
<td>Fixed by <a href="https://github.com/datastax/php-driver/pull/126">PR #126</a> and <a href="https://github.com/datastax/php-driver/pull/132">PR #132</a> awaiting review</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/interbase">interbase</a></td>
<td><strong>1.0.0-dev</strong></td>
<td>Dropped from 7.4, not released yet</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mysql">mysql</a></td>
<td><strong>1.0.0-dev</strong></td>
<td>Dropped from 7.0, never released</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/mysql_xdevapi">mysql_xdevapi</a></td>
<td><strong>8.0.16</strong></td>
<td>Fixed by <a href="https://github.com/php/pecl-database-mysql_xdevapi/pull/6">PR #6</a> and <a href="https://github.com/php/pecl-database-mysql_xdevapi/pull/6">PR #7</a></td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/oauth">oauth</a></td>
<td><strong>2.0.4-dev</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/parle">parle</a></td>
<td><strong>0.8.1</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/recode">recode</a></td>
<td><strong>1.0.0-dev</strong></td>
<td>Dropped from 7.4, no release planed</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/seasclick">seasclick</a></td>
<td><strong>0.1.0</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/seaslog">seaslog</a></td>
<td><strong>2.0.2</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/sphinx">sphinx</a></td>
<td><strong>1.4.0-dev</strong></td>
<td>Fixed upstream (still pending for 7.0)</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/uploadprogress" hreflang="en">uploadprogress</a></td>
<td><strong>1.0.3.1</strong></td>
<td>PHP 7+ compatibility fixed upstream, but probably dead.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/v8">v8</a></td>
<td><strong>0.2.2</strong></td>
<td>Build ok but 16/147 failed tests</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/wddx">wddx</a></td>
<td><strong>1.0.0-dev</strong></td>
<td>Dropped from 7.4, no release planed</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/yaconf">yaconf</a></td>
<td><strong>1.0.8-dev</strong></td>
<td>Fixed by <a href="https://github.com/laruence/yaconf/pull/52">PR #52</a> but still no release for 7.3</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/yaf">yaf</a></td>
<td><strong>3.0.8</strong></td>
<td>Build fixed by <a href="https://github.com/laruence/yaf/pull/446">PR #446</a>, but 5/97 failed tests</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/yar">yar</a></td>
<td><strong>2.0.5</strong></td>
<td>Build ok but 1/18 failed tests</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/zip">zip</a></td>
<td><strong>1.15.5-dev</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/zmq">zmq</a></td>
<td><strong>1.1.3</strong></td>
<td>Fixed upstream</td>
</tr>
</tbody>
</table>
<h2> </h2>
<h2>3. Not compatible for now (only from 7.3 compatible extensions)</h2>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
<td><a href="http://www.ioncube.com/loaders.php">ioncube_loader</a></td>
<td><strong>10.3.4</strong></td>
<td>Not supported</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/molten">molten</a></td>
<td><strong>0.1.2beta</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="https://phalconphp.com/en/">phalcon</a></td>
<td><strong>3.4.3</strong></td>
<td>Don't build with zephir 0.10.16</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/protobuf">protobuf</a></td>
<td><strong>3.8.0RC1</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/request">request</a></td>
<td><strong>1.0.0b2</strong></td>
<td>Don't build, and stil no release compatible with 7.3, PR still awating review</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/runkit7">runkit7</a></td>
<td><strong>2.0.3</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/v8js">v8js</a></td>
<td><strong>0.2.2</strong></td>
<td>Don't build</td>
</tr>
</tbody>
</table>
<h2> </h2>
<h2>4. Not tested yet</h2>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/pthreads">pthreads</a></td>
<td><strong>3.2.0</strong></td>
<td>From Joe: "<span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0" dir="auto">there won't be a 7.4 release for pthreads ..."</span></td>
</tr>
</thead>
</table>
<h2> </h2>
<h2>5. Conclusion</h2>
<ul>
<li>May 23th: Too soon for a statement, <em>alpha1</em> is not yet released.</li>
<li>June 14th: With 94% of extension already compatible with <strong>7.4.0alpha1</strong>, I think current situation is very good, and we still have a few months to fix the remaining.</li>
</ul>
<p> </p>
<p><em>Last updated on <strong>July 12th 2019</strong></em></p>Small history about QAurn:md5:56b364eab8e7e9f63deca4902d7662ff2019-03-21T16:10:00+01:002019-03-21T17:45:48+01:00RemiDéveloppementContributeurPHPplanet-php<p>Despite I'm mainly a developer, I now use most of my time on doing QA on PHP projects.</p>
<p>Here is, around release of versions7.2.17RC1 and 7.3.4RC1 a report which should help to understand this activity.</p>
<p> </p> <h1>1. Presentation</h1>
<p>Usually, tests are done by PHP developers, particularly thanks to <a href="https://travis-ci.org/php/php-src">travis</a> and then by users who will install the RC version available 2 weeks before a GA version.</p>
<p>The PHP project follow a release process (cf <a href="https://github.com/php/php-src/blob/master/README.RELEASE_PROCESS">README.RELEASE_PROCESS</a>) which gives 2 days between the preparation of a version, <strong>the Tuesday on git</strong>, and <strong>the Thursday</strong> <strong>its announcement </strong>in the mailing lists. These 2 days are especially designed to allow the build of binary packages (mostly by Microsoft and often by me for my repository) and to allow a last QA check which mays allow to discover some late issue.</p>
<p>When the new versions were available (on Tuesday afternoon) I start building the packages for my repostiory, givinf more coverage than the current <em>travis </em>configuration<em>:</em></p>
<ul>
<li>Fedora 27 to 31</li>
<li>RHEL 6, 7 and 8-Beta</li>
<li>i386 and x86_64</li>
<li>NTS and ZTS</li>
<li>various compiler versions (GCC 4 to 9) and system library versions</li>
</ul>
<p>I also run the build of the 7.3.4RC1 package in <a href="https://fedoraproject.org/wiki/Releases/Rawhide">Fedora rawhide</a> to trigger the re-build of all the PHP stack in <a href="https://blog.remirepo.net/post/2014/08/12/Koschei-continuous-integration-of-PHP-stack-in-Fedora">Koschei</a>, one of the CI tools of the Fedora project.</p>
<p>Notice : time to build all the packages for all the targets is about <strong>3h for each version</strong> ! (I really need a faster builder).</p>
<p> </p>
<h1>2. Discoverd issues</h1>
<h2>2.1. Failed tests with pcre2 version 10.33RC1</h2>
<p>Already available in <em>rawhide</em>, this version introduce a change in some error message, making 2 tests to fail.</p>
<p>Minor issue, fixed in PHP 7.3+: commit <a href="http://git.php.net/?p=php-src.git;a=commitdiff;h=c421d9afeca772968e185092950b70fdcd98f1e6">c421d9a</a>.</p>
<h2>2.2. Failed tests on 32-bit</h2>
<p>In fix of <a href="https://bugs.php.net/bug.php?id=76717">bug #76117</a> the output of <a href="http://php.net/var_export">var_export</a> have changed, make 2 tests to fail on 32-bit.</p>
<p>After <a href="https://github.com/php/php-src/commit/1fd32e9c2f15eabdc7e531b1fa76f62fc5a8ca75#commitcomment-32827253">confirmation by the autor</a> of the change, tests have been fixed in PHP 7.2+ : commits <a href="http://git.php.net/?p=php-src.git;a=commit;h=a467a89f167e9e03b4acc4bd9b1430e0d52133fa">a467a89</a> and <a href="http://git.php.net/?p=php-src.git;a=commit;h=5c8d69bf6fde2bbb3d6c168833bc9a70f0a5bc1f">5c8d69b</a>.</p>
<h2>2.3. Regression</h2>
<p><strong>Koschei</strong> allow to discover very quickly a important regression in the run of the "make test" command. After digging, this regression was introduced in the fix of <a href="https://bugs.php.net/bug.php?id=77609">bug #77609</a>, read the comments on the commit <a href="https://github.com/php/php-src/commit/3ead67239419632eecb83f0f101ead2021ee6c14">3ead672</a>.</p>
<p>After discussion between the Release managers, it have been choosen to:</p>
<ul>
<li><a href="http://git.php.net/?p=php-src.git;a=commitdiff;h=32e7b0864ca1e5094ecea73641c4dc87bcdaa684">revert</a> this change to get back to a sane situation</li>
<li>to re-run the release process (new <em>tag</em> onr <em>git</em>)</li>
</ul>
<p>The version which wil be announced shortly will not be affected byt this regression.</p>
<p> </p>
<h1>3. Conclusion</h1>
<p>To ensure of the quality of PHP, of no regression is a complex, long and serious work. Thanks to all the actors, developers, QA team and users, this works pretty well.</p>
<p>So, if you use PHP in a development environment, it is essential to install the RC versions to detect and report us quickly any problem, so we can react before the finale version.</p>
<p>For users of my repository, the RC versions of PHP and various extensions are nearly always available in the testing repositories.</p>
<p> </p>Install PHP 7.3 on CentOS, RHEL or Fedoraurn:md5:fd9832a94a0a0b14bf4bd3767c242b4f2018-12-10T14:43:00+01:002018-12-10T18:31:36+01:00RemiHowToCentOSFedoraPHPplanet-phpRHELRPM<p>Here is a quick <em><strong>howto</strong></em> upgrade default <a href="http://php.net/">PHP</a> version provided on <a href="http://fedoraproject.org/">Fedora</a>, <a href="https://www.redhat.com/fr/technologies/linux-platforms/enterprise-linux">RHEL</a> or <a href="https://www.centos.org/">CentOS</a> with latest version <strong>7.3</strong>.</p> <p> </p>
<h1>Repositories configuration:</h1>
<p>On <strong>Fedora</strong>, standards repositories are enough, on <strong>Enterprise Linux</strong> (RHEL, CentOS) the <strong>Extra Packages for Enterprise Linux</strong> (<a href="https://fedoraproject.org/wiki/EPEL">EPEL</a>) repository must be configured, and on RHEL the<strong> optional</strong> channel must be enabled.</p>
<h2>Fedora 29</h2>
<pre>
wget http://rpms.remirepo.net/fedora/remi-release-29.rpm
dnf install remi-release-29.rpm</pre>
<h2>Fedora 28</h2>
<pre>
wget http://rpms.remirepo.net/fedora/remi-release-28.rpm
dnf install remi-release-28.rpm</pre>
<h2>RHEL version 8.0 Beta</h2>
<pre>
wget http://rpms.remirepo.net/enterprise/remi-release-8.rpm
rpm -Uvh remi-release-8.rpm
</pre>
<h2>RHEL version 7.6</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms</pre>
<h2>RHEL version 6.10</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm
rhn-channel --add --channel=rhel-$(uname -i)-server-optional-6</pre>
<h2>CentOS version 7.6</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
</pre>
<h2>CentOS version 6.10</h2>
<pre>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm</pre>
<p> </p>
<h1>php module usage</h1>
<p>Since <strong>Fedora 29</strong> and <strong>RHEL-8 beta,</strong> you can simply use the <strong>remi-7.3</strong> stream of the <strong>php </strong>module</p>
<pre>
dnf module install php:remi-7.3</pre>
<p> </p>
<h1>remi-php73 repository activation</h1>
<p>Needed packages are in the <strong>remi-safe</strong> (enabled by default) and <strong>remi-php73 </strong>repositories, the latest is not enabled by default (administrator choice according to the desired PHP version).</p>
<h2>RHEL or CentOS</h2>
<pre>
yum install yum-utils
yum-config-manager --enable remi-php73</pre>
<h2>Fedora</h2>
<pre>
dnf install dnf-plugins-core
dnf config-manager --set-enabled remi-php73</pre>
<p> </p>
<h1>PHP upgrade</h1>
<p>By choice, the packages have the same name than in the distribution, so a simple update is enough:</p>
<pre>
yum update</pre>
<p>That's all :)</p>
<pre>
$ php -v
PHP 7.3.0 (cli) (built: Dec 4 2018 16:12:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.0, Copyright (c) 1999-2018, by Zend Technologies
</pre>
<p> </p>
<h1>Known issues</h1>
<p>The upgrade can fail (by design) when some installed extensions are not yet compatible with PHP 7.3.</p>
<p>See the compatibility tracking list: <a class="ref-post" href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PECL extensions RPM status</a></p>
<p>If these extensions are not mandatory, you can remove them before the upgrade, else, you will have to be patient.</p>
<p>Warning: some extensions are still under development (xdebug...), but it seems useful to provide them to allow upgrade to more people, and to allow user to give feedback to the authors.</p>
<p> </p>
<h1>More d'information</h1>
<p>If you prefer to install PHP 7.3 <strong>beside default PHP</strong> version, this can be achieved using the <strong>php73</strong> prefixed packages, see the <a class="ref-post" href="https://blog.remirepo.net/post/2018/06/08/PHP-7.3-as-Software-Collection">PHP 7.3 as Software Collection post</a>.</p>
<p>You can also try the <a href="https://rpms.remirepo.net/wizard/">configuration wizard</a>.</p>
<p>The packages available in the repository was used as source for <strong>Fedora 30</strong> (self contained <a href="https://fedoraproject.org/wiki/Changes/php73">change</a> proposal, is already accepted and testable).</p>
<p>By providing a full feature PHP stack, with about <strong>130</strong> available extensions, 5 PHP versions, as base and SCL packages, for Fedora and Enterprise Linux, and with <strong>200 000</strong> download per day, <strong>remi</strong> repository became in the last <a class="ref-post" href="https://blog.remirepo.net/post/2015/04/27/10-years">13 years</a> a reference for PHP users on RPM based distributions, maintained by an active contributor to the projects (<a href="https://admin.fedoraproject.org/pkgdb/packager/remi/">Fedora</a>, <a href="https://github.com/php/php-src/graphs/contributors">PHP</a>, <a href="https://pecl.php.net/user/remi">PECL</a>...).</p>
<p>See also:</p>
<ul>
<li><a href="https://blog.remirepo.net/feed/en/rss2">Posts RSS feed</a> (versions announcements)</li>
<li><a href="https://blog.remirepo.net/feed/en/rss2/comments">Comments RSS feed</a></li>
<li><a href="http://rpms.remirepo.net/enterprise/7/php73/x86_64/repoview/latest-feed.xml">Repository RSS feed</a> (example for EL-7, php 7.3)</li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2017/12/04/Install-PHP-7.2-on-CentOS-RHEL-or-Fedora">Install PHP 7.2 on CentOS, RHEL or Fedora</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2016/12/05/Install-PHP-7.1-on-CentOS-RHEL-or-Fedora">Install PHP 7.1 on CentOS, RHEL or Fedora</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2016/02/14/Install-PHP-7-on-CentOS-RHEL-Fedora">Install PHP 7.0 on CentOS, RHEL or Fedora</a></li>
</ul>PHP on RHEL-8urn:md5:38a251f368cbe384bed448413656bd202018-11-16T09:16:00+01:002018-11-16T13:07:08+01:00RemiHowToBetaPHPplanet-phpRHEL<p><a href="https://www.redhat.com/en/blog/powering-its-future-while-preserving-present-introducing-red-hat-enterprise-linux-8-beta">RHEL-8 Beta is announced</a> and is available for download for whom want to try it.</p>
<p>This is an opportunity to look at PHP installation and how modules work.</p> <h2>1. Installation</h2>
<p>ISO image is available for everyone, see the <a href="http://ftp.redhat.com/redhat/rhel/rhel-8-beta/README">README</a> file.</p>
<p>Don't forget to enable the Beta repositories.</p>
<pre>
# dnf repolist
repo id repo name status
rhel-8-for-x86_64-appstream-beta-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs) 4594
rhel-8-for-x86_64-baseos-beta-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs) 1686</pre>
<h2>2. Installation of PHP</h2>
<p>PHP is not part of <strong>BaseOS</strong> which is the base of the Operating System, reduced to minimal, but is available in <strong>AppStream</strong>, i.e. as a module.</p>
<pre>
# dnf module list
Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs)
php 7.1 devel, minimal, defaul PHP scripting language
t [d]
php 7.2 [d] devel, minimal, defaul PHP scripting language
t [d] </pre>
<p>You can see that both versions 7.1 and 7.2 (default) are available.</p>
<p>Installation of version 7.1</p>
<pre>
# dnf module install php:7.1
Dependencies resolved.
==========================================================================================================
Package Arch Version Repository Size
==========================================================================================================
Installing group/module packages:
php-cli x86_64 7.1.20-2.el8+1700+11d526eb rhel-8-for-x86_64-appstream-beta-rpms 2.9 M
php-common x86_64 7.1.20-2.el8+1700+11d526eb rhel-8-for-x86_64-appstream-beta-rpms 624 k
php-fpm x86_64 7.1.20-2.el8+1700+11d526eb rhel-8-for-x86_64-appstream-beta-rpms 1.5 M
php-json x86_64 7.1.20-2.el8+1700+11d526eb rhel-8-for-x86_64-appstream-beta-rpms 70 k
php-mbstring x86_64 7.1.20-2.el8+1700+11d526eb rhel-8-for-x86_64-appstream-beta-rpms 547 k
php-xml x86_64 7.1.20-2.el8+1700+11d526eb rhel-8-for-x86_64-appstream-beta-rpms 187 k
Installing dependencies:
httpd-filesystem noarch 2.4.35-6.el8+2089+57a79027 rhel-8-for-x86_64-appstream-beta-rpms 32 k
nginx-filesystem noarch 1:1.14.0-3.el8+1631+ba902cf0 rhel-8-for-x86_64-appstream-beta-rpms 23 k
Installing module profiles:
php/default
Enabling module streams:
httpd 2.4
nginx 1.14
php 7.1
Transaction Summary
==========================================================================================================
Install 8 Packages
Total download size: 5.9 M
Installed size: 20 M
Is this ok [y/N]: y
</pre>
<p>Result:</p>
<pre>
# php -v
PHP 7.1.20 (cli) (built: Jul 19 2018 06:17:27) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
</pre>
<p>And you can switch easily to 7.2</p>
<pre>
# dnf module install php:7.2
Dependencies resolved.
==========================================================================================================
Package Arch Version Repository Size
==========================================================================================================
Upgrading:
php-cli x86_64 7.2.11-1.el8+2002+9409c40c rhel-8-for-x86_64-appstream-beta-rpms 3.1 M
php-common x86_64 7.2.11-1.el8+2002+9409c40c rhel-8-for-x86_64-appstream-beta-rpms 653 k
php-fpm x86_64 7.2.11-1.el8+2002+9409c40c rhel-8-for-x86_64-appstream-beta-rpms 1.6 M
php-json x86_64 7.2.11-1.el8+2002+9409c40c rhel-8-for-x86_64-appstream-beta-rpms 73 k
php-mbstring x86_64 7.2.11-1.el8+2002+9409c40c rhel-8-for-x86_64-appstream-beta-rpms 580 k
php-xml x86_64 7.2.11-1.el8+2002+9409c40c rhel-8-for-x86_64-appstream-beta-rpms 188 k
Switching module streams:
php 7.1 -> 7.2
Transaction Summary
==========================================================================================================
Upgrade 6 Packages
Total download size: 6.2 M
Is this ok [y/N]: y</pre>
<p>Result:</p>
<pre>
# php -v
PHP 7.2.11 (cli) (built: Oct 9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies</pre>
<h2>3. Web usage</h2>
<h3>3.1 with Apache HTTP Server</h3>
<p>Installation:</p>
<pre>
# dnf module install httpd</pre>
<p>Service activation:</p>
<pre>
# systemctl enable --now php-fpm
# systemctl enable --now httpd</pre>
<p>Test page:</p>
<pre>
# echo '<?php phpinfo();' >/var/www/html/info.php</pre>
<p>Then you can browse to http://localhost/info.php</p>
<p><img src="https://blog.remirepo.net/public/Ecrans/rhel-8-php7211.png" /></p>
<h3>3.2 with nginx</h3>
<p>Installation:</p>
<pre>
# dnf module install nginx</pre>
<p>Services activation:</p>
<pre>
# systemctl enable --now php-fpm
# systemctl enable --now nginx</pre>
<p>Test page:</p>
<pre>
# echo '<?php phpinfo();' >/usr/share/nginx/html/info.php</pre>
<p>Then you can browse to http://localhost/info.php</p>
<h2>4. Conclusion</h2>
<p>Fedora users won't be surprised, RHEL users can now take benefits of work done on PHP packages since F19:</p>
<ul>
<li><strong>php-fpm</strong> used by default</li>
<li><strong>httpd</strong> using MPM event by default, and <strong>php</strong> working without any configuration change</li>
<li><strong>nginx</strong> available, and <strong>php</strong> working without any configuration change</li>
</ul>
<p>Usage of modules should improve flexibility in version choice, and usability, and of course, we can expect new versions sooner (e.g. php 7.3).</p>
<p>Some (like me) will miss the Software Collections and so the possible installation of multiple versions simultaneously (still possible using containers).</p>
<p> </p>PHP extensions status with upcoming PHP 7.3urn:md5:2760c1df5644d6ef1922c3c1706881472018-07-02T11:36:00+02:002019-02-04T09:31:14+01:00RemiDéveloppementContributeurPHPplanet-php<p>With <strong>PHP 7.3</strong> entering stabilization phase, time to check the status of most commonly used PHP extensions (at least, the ones available in my repository).</p>
<p>Here is the exhaustive list.</p> <h2>1. Compatible</h2>
<p>The last published version is compatible</p>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
</thead>
<tbody>
<tr class="line">
<td> </td>
<td><a href="http://pecl.php.net/package/amqp">amqp</a></td>
<td><strong>1.9.3</strong></td>
<td>OK, was fixed by <a href="https://github.com/pdezwart/php-amqp/pull/323">PR #323</a> merged.</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/APCu" hreflang="en">APCu</a></td>
<td><strong>5.1.11</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/apcu_bc">apcu_bc</a></td>
<td><strong>1.0.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/apfd">apfd</a></td>
<td><strong>1.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/ast">ast</a></td>
<td><strong>0.1.6</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/Bitset">bitset</a></td>
<td><strong>3.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-brotli/">brotli</a></td>
<td><strong>0.5.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/cmark">cmark</a></td>
<td><strong>1.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/componere">componere</a></td>
<td><strong>2.1.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/couchbase">couchbase</a> v2</td>
<td><strong>2.5.0</strong></td>
<td>OK, was fixed by <a href="https://github.com/couchbase/php-couchbase/pull/22">PR #22</a>.</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/crypto">crypto</a></td>
<td><strong>0.3.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/dbase" hreflang="en">dbase</a></td>
<td><strong>7.0.0beta1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/dio">dio</a></td>
<td><strong>0.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/Druid">druid</a></td>
<td><strong>1.0.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/ds">ds</a></td>
<td><strong>1.2.6</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/eio" hreflang="en">eio</a></td>
<td><strong>2.0.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/env">env</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/event" hreflang="en">event</a></td>
<td><strong>2.4.0RC3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/fann">fann</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/gearman" hreflang="en">gearman</a></td>
<td><strong>2.0.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/geoip">geoip</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/gender">gender</a></td>
<td><strong>1.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/geospatial" style="">geospatial</a></td>
<td><strong>0.2.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/gmagick" hreflang="en">gmagick</a></td>
<td><strong>2.0.5RC1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/gnupg" hreflang="en">gnupg</a></td>
<td><strong>1.4.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/gRPC">grpc</a></td>
<td><strong>1.12.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/handlebars">handlebars</a></td>
<td><strong>0.8.2</strong></td>
<td>OK, was fixed by <a href="https://github.com/jbboehr/php-handlebars/pull/53">PR #126</a>, but upstream applied another fix.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/hdr_histogram">hdr_histogram</a></td>
<td><strong>0.3.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/pecl_http">http</a> v2/3</td>
<td><strong>3.2.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/hrtime">hrtime</a></td>
<td><strong>0.6.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/ip2location">ip2location</a></td>
<td><strong>8.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://www.horde.org/">horde_lz4</a></td>
<td><strong>1.0.9</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/igbinary">igbinary</a></td>
<td><strong>2.0.7</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/imagick">imagick</a></td>
<td><strong>3.4.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/inotify">inotify</a></td>
<td><strong>2.0.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/json_post">json_post</a></td>
<td><strong>1.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/krb5">krb5</a></td>
<td><strong>1.1.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/leveldb">leveldb</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://libvirt.org/php/" hreflang="en">libvirt</a></td>
<td><strong>0.5.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/lua">lua</a></td>
<td><strong>2.0.6</strong></td>
<td>OK, was fixed by <a href="https://github.com/laruence/php-lua/pull/37">PR #37</a> awaiting review.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-lz4">lz4</a></td>
<td><strong>0.3.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/lzf">lzf</a></td>
<td><strong>1.6.6</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mcrypt">mcrypt</a></td>
<td><strong>1.0.1</strong></td>
<td>OK, but please don't use it</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/memcached">memcached</a></td>
<td><strong>3.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/memprof" hreflang="en">memprof</a></td>
<td><strong>2.0.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/Molten">molten</a></td>
<td><strong>0.1.2beta</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mongodb">mongodb</a></td>
<td><strong>1.5.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/Mosquitto" hreflang="en">mosquitto</a></td>
<td><strong>0.4.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/msgpack">msgpack</a></td>
<td><strong>2.0.3</strong></td>
<td>OK, was fixed by <a href="https://github.com/msgpack/msgpack-php/pull/124">PR #124</a> (merged) and fixed by <a href="https://github.com/msgpack/msgpack-php/pull/125">PR #125</a> (still awaiting review).</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mustache">mustache</a></td>
<td><strong>0.8.0</strong></td>
<td>OK, was fixed by <a href="https://github.com/jbboehr/php-mustache/pull/48">PR #48</a> merged.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mysql">mysql</a></td>
<td><strong>1.0dev</strong></td>
<td>OK, but please don't use it</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/nsq">nsq</a></td>
<td><strong>3.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/oauth">oauth</a></td>
<td><strong>2.0.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/parle" style="outline: 1px dotted; outline-offset: 0px;">parle</a></td>
<td><strong>0.8.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/pdflib">pdflib</a></td>
<td><strong>4.1.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/Letargie/pggi">pggi</a></td>
<td><strong>0.3.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://phalconphp.com/en/">phalcon</a> v3</td>
<td><strong>3.4.1</strong></td>
<td>OK using zephir <strong>0.10.12</strong></td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/nrk/phpiredis" style="">phpiredis</a></td>
<td><strong>1.0.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/pq">pq</a></td>
<td><strong>2.1.5</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/propro">propro</a></td>
<td><strong>2.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/protobuf">protobuf</a></td>
<td><strong>3.7.0RC2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/psr">psr</a></td>
<td><strong>0.4.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/radius">radius</a></td>
<td><strong>1.4.0b1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/raphf" hreflang="en">raphf</a></td>
<td><strong>2.0.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/rdkafka">rdkafka</a></td>
<td><strong>3.0.5</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/redis">redis</a></td>
<td><strong>4.1.0RC3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://git.remirepo.net/cgit/tools/php-rpminfo.git/">rpminfo</a></td>
<td><strong>0.2.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/rrd">rrd</a></td>
<td><strong>2.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/SeasLog">SeasLog</a></td>
<td><strong>1.8.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/scrypt">scrypt</a></td>
<td><strong>1.4.2</strong>(</td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/selinux" hreflang="en">selinux</a></td>
<td><strong>0.4.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/smbclient">smbclient</a></td>
<td><strong>1.0.0</strong></td>
<td>OK, was fixed by <a href="https://github.com/eduardok/libsmbclient-php/pull/60">PR #60</a> merged.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-snappy">snappy</a></td>
<td><strong>0.1.9</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/nbs-system/snuffleupagus" hreflang="en">snuffleupagus</a></td>
<td><strong>0.4.1</strong></td>
<td>OK, was fixed by <a href="https://github.com/nbs-system/snuffleupagus/pull/185">PR #185</a>.</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/sphinx" hreflang="en">sphinx</a></td>
<td><strong>1.4.0-dev</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/sqlsrv">sqlsrv</a><br />
<a href="https://pecl.php.net/package/pdo_sqlsrv">pdo_sqlsrv</a></td>
<td><strong>5.4.0preview</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/ssdeep">ssdeep</a></td>
<td><strong>1.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/stats">stats</a></td>
<td><strong>2.0.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/stomp">stomp</a></td>
<td><strong>2.0.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/swoole" hreflang="en">swoole</a></td>
<td><strong>4.0.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/sync">sync</a></td>
<td><strong>1.1.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/taint">taint</a></td>
<td><strong>2.0.5</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/tcpwrap">tcpwrap</a></td>
<td><strong>1.2.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/termbox">termbox</a></td>
<td><strong>0.1.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/timecop">timecop</a></td>
<td><strong>1.2.10</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/trace">trace</a></td>
<td><strong>1.0.1beta</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/trader">trader</a></td>
<td><strong>0.5.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/translit">translit</a></td>
<td><strong>0.6.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/uopz">uopz</a></td>
<td><strong>5.1.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/uuid">uuid</a></td>
<td><strong>1.0.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/varnish">varnish</a></td>
<td><strong>1.2.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/vips">vips</a></td>
<td><strong>1.0.8</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/vld">vld</a></td>
<td><strong>0.15.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/krakjoe/wkhtmltox">wkhtmltox</a></td>
<td><strong>0.3.2-dev</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/xattr">xattr</a></td>
<td><strong>1.3.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/xdebug">xdebug</a></td>
<td><strong>2.7.0beta1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/xdiff">xdiff</a></td>
<td><strong>2.0.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/xlswriter">xlswriter</a></td>
<td><strong>1.2.1</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/xmldiff">xmldiff</a></td>
<td><strong>1.1.2</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/xxtea">xxtea</a></td>
<td><strong>1.0.11</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/yaf" hreflang="en">yaf</a></td>
<td><strong>3.0.8</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/yaml">yaml</a></td>
<td><strong>2.0.3</strong></td>
<td>OK, was fixed by <a href="https://github.com/php/pecl-file_formats-yaml/pull/33">PR #33</a></td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/yar">yar</a></td>
<td><strong>2.0.4</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/zip" hreflang="en">zip</a></td>
<td><strong>1.15.3</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/zookeeper">zookeeper</a></td>
<td><strong>0.5.0</strong></td>
<td>OK</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/kjdev/php-ext-zstd">zstd</a></td>
<td><strong>0.4.14</strong></td>
<td>OK</td>
</tr>
</tbody>
</table>
<h2> </h2>
<h2>2. Work in progress</h2>
<p>These extensions have been fixed upstream (or PR are available) but no official release.</p>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/cassandra">cassandra</a></td>
<td><strong>1.3.2</strong></td>
<td>Fixed by <a href="https://github.com/datastax/php-driver/pull/126">PR #126</a> awaiting review.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://git.osgeo.org/gogs/geos/php-geos">geos</a></td>
<td><strong>1.0.0</strong></td>
<td>Fixed by <a href="https://git.osgeo.org/gitea/geos/php-geos/issues/20">PR #20</a> awaiting review.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/hprose">hprose</a></td>
<td><strong>1.6.6</strong></td>
<td>Fixed by <a href="https://github.com/hprose/hprose-pecl/pull/14">PR #14</a> merged.</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/mailparse" hreflang="en">mailparse</a></td>
<td><strong>3.0.2</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/memcache">memcache</a></td>
<td><strong>3.0.9-dev </strong></td>
<td>Fixed upstream, despite this extension in unmaintained</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mogilefs">mogilefs</a></td>
<td><strong>0.9.3.1</strong></td>
<td>Fixed by <a href="https://github.com/lstrojny/pecl-mogilefs/pull/25">PR #25</a> merged.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/mysql_xdevapi">mysql_xdevapi</a></td>
<td><strong>8.0.11</strong></td>
<td>Fixed by <a href="https://github.com/php/pecl-database-mysql_xdevapi/pull/5">PR #5</a> awaiting review.</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/oauth">oauth</a></td>
<td><strong>2.0.2 </strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/opencensus">opencensus</a></td>
<td><strong>0.2.2</strong></td>
<td>Fixed by <a href="https://github.com/census-instrumentation/opencensus-php/pull/195">PR #165</a> but won't be merged as I can't sign the fucking google CLA.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/tony2001/pinba_extension">pinba</a></td>
<td><strong>1.1.1</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/rar">rar</a></td>
<td><strong>4.0.0</strong></td>
<td>Fixed by <a href="https://github.com/cataphract/php-rar/pull/4/files">PR #4</a> awaiting review.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/request">request</a></td>
<td><strong>1.0.0b2</strong></td>
<td>Fixed by <a href="https://github.com/pmjones/ext-request/pull/12">PR #12</a> merged and <a href="https://github.com/pmjones/ext-request/pull/12"> awaiting review.</a></td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/solr">solr</a> v2</td>
<td><strong>2.4.0</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/ssh2">ssh2</a></td>
<td><strong>1.1.2</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/uploadprogress" hreflang="en">uploadprogress</a></td>
<td><strong>1.0.3.1</strong></td>
<td>PHP 7+ compatibility fixed upstream, but probably dead.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/uv">uv</a></td>
<td><strong>0.2.2</strong></td>
<td>Fixed upstream and by <a href="https://github.com/bwoebi/php-uv/pull/60/files">PR #60</a> merged.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/v8js">v8js</a></td>
<td><strong>2.1.0</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/laruence/yac">yac</a></td>
<td><strong>2.0.2</strong></td>
<td>Fixed by <a href="https://github.com/laruence/yac/pull/89">PR #89</a> awaiting review.</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/yaconf">yaconf</a></td>
<td><strong>1.0.8-dev</strong></td>
<td>Fixed upstream</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/yaz">yaz</a></td>
<td><strong>1.2.2</strong></td>
<td>Fixed by <a href="https://github.com/indexdata/phpyaz/pull/7">PR #7</a> merged.</td>
</tr>
<tr>
<td>
<p> </p>
</td>
<td><a href="http://pecl.php.net/package/zmq" hreflang="en">zmq</a></td>
<td><strong>1.1.3</strong></td>
<td>Fixed by <a href="https://github.com/mkoppanen/php-zmq/pull/195">PR #195</a> awaiting review.</td>
</tr>
</tbody>
</table>
<h2> </h2>
<h2>3. Not compatible for now</h2>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<th width="3%">#</th>
<th width="15%">Name</th>
<th width="15%">Version</th>
<th width="67%">State</th>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/APM">APM</a></td>
<td><strong>2.1.3</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/ev">ev</a></td>
<td><strong>1.0.4</strong></td>
<td>Segfaults</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/jsond">jsond</a></td>
<td><strong>1.4.0</strong></td>
<td>Don't build, but perhaps unwanted</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/libsodium">libsodium</a></td>
<td><strong>1.0.7</strong></td>
<td>Deprecated version, unmaintained</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/pcs">pcs</a></td>
<td><strong>1.3.3</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/pthreads">pthreads</a></td>
<td><strong>3.1.6</strong></td>
<td>Don't build, broken for a while</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/ref">ref</a></td>
<td><strong>0.6.0</strong></td>
<td>Don't build, but dead project</td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/tarantool/tarantool-php">tarantool</a></td>
<td><strong>0.3.0</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/stackdriver_debugger">stackdriver_debugger</a></td>
<td><strong>0.2.0</strong></td>
<td>Segfaults</td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/swoole_serialize">swoole_serialize</a></td>
<td><strong>0.1.1</strong></td>
<td>Don't build</td>
</tr>
<tr>
<td> </td>
<td><a href="http://pecl.php.net/package/Weakref">Weakref</a></td>
<td><strong>0.3.3 </strong></td>
<td>Don't build</td>
</tr>
</tbody>
</table>
<h2> </h2>
<h2>3. Conclusion</h2>
<p>I think current status is quite good, <s>7.3.0 is only in <em>alpha</em> state, and GA planed for end of year, I hope everything will be fixed in the next weeks.</s></p>
<p>PHP 7.3.0 is now released and most extension are compatible.</p>
<p>Last updated on <strong>February 4th 2019</strong></p>Fedora 27: changes in httpd and phpurn:md5:88b60dd459f756ebdd230ae79f8121f72017-11-17T09:42:00+01:002017-12-09T08:12:12+01:00RemiGeneralApachePHPplanet-php<p>The Apache HTTP server and PHP configuration have changed in <strong>Fedora 27</strong>, here is some explanations.</p> <h2>1. Switch of the Apache HTTP server in <em>event</em> mode</h2>
<p>Since the first days of the distribution, the severs use the <em>prefork</em> <a href="http://httpd.apache.org/docs/2.4/mpm.html">MPM</a><em>.</em></p>
<p>For obvious performance reasons, we choose to follow the upstream project recommandations and to use the <em>event</em> MPM by default.</p>
<p>This change is also required to have the full benefit and feature of the <a href="https://en.wikipedia.org/wiki/HTTP/2">HTTP/2</a> protocol via <a href="http://httpd.apache.org/docs/2.4/mod/mod_http2.html">mod_http2</a>.</p>
<h2>2. The problem of mod_php</h2>
<p>The <em>mod_php</em> module is only supported when the <em>prefork</em> MPM is used</p>
<p>In the <a href="http://php.net/manual/en/install.unix.apache2.php">PHP documentation</a>, we can read:</p>
<blockquote>
<p class="para"><strong class="warning">Warning</strong> We do not recommend using a threaded MPM in production with Apache 2.</p>
</blockquote>
<p class="para">And, indeed, we already have some bug reports about crashes in this configuration.</p>
<p class="para">So it doesn't make sense to keep <em>mod_php</em> by default.</p>
<p class="para">Furthermore, this module have some annoying limitations:</p>
<ul>
<li class="para">integrated in the web server, it shares its memory, which may have some negative security impacts</li>
<li class="para">a single version can be loaded</li>
</ul>
<h2 class="para">3. Using FastCGI</h2>
<p class="para">For many years, we are working to make the PHP execution as much flexible as possible, using various combinations, without configuration change:</p>
<ul>
<li class="para">httpd + mod_php</li>
<li class="para">httpd + php-fpm (when mod_php is disabled or missing and with a running php-fpm server)</li>
<li class="para">nginx + php-fpm</li>
</ul>
<p class="para">The <a href="http://php.net/fpm">FPM</a> way have become the default recommend configuration for a safe PHP execution:</p>
<ul>
<li class="para">support of multiple web servers (httpd, nginx, lighttpd)</li>
<li class="para">frontend isolation for security</li>
<li class="para">multiple backends</li>
<li class="para">micro-services architecture</li>
<li class="para">containers (docker)</li>
<li class="para">multiple versions of PHP</li>
</ul>
<h2 class="para">4. FPM by default</h2>
<p class="para">Since <strong>Fedora 27</strong>, <em>mod_php</em> ZTS (multi-threaded) is still provided, but disabled, so FastCGI is now used by default.</p>
<p class="para">To not break existing configuration during the distribution upgrade, and to have a working server after installation, we choose to implement some solutions, probably temporarily:</p>
<ul>
<li class="para">the <strong>php</strong> package have a optional dependency on the <strong>php-fpm</strong> package, so it is now installed by default</li>
<li class="para">the <strong>httpd</strong> service have a dependency on the <strong>php-fpm</strong> service, so it is started automatically</li>
</ul>
<h2 class="para">5. Known issues</h2>
<h3 class="para">5.1. Configuration change</h3>
<p class="para">After a configuration change, or after a new extension installation, it is now required to restart the <strong>php-fpm</strong> service.</p>
<h3 class="para">5.2. Configuration files</h3>
<p class="para">With <em>mod_php</em>, it is common to to use the <em>php_value</em> or <em>php_flag</em> directives in the Apache HTTP server configuration or in some <em>.htaccess</em> file.</p>
<p class="para">It is now required to use the <em>php_value</em> or <em>php_flag</em> directives in the FPM pool configuration file, or to use some <em><a href="http://php.net/manual/en/configuration.file.per-user.php">.user.ini</a></em> file in the application directory.</p>
<h3 class="para">5.3 Users</h3>
<p class="para">By default httpd and php-fpm run using the <strong>apache</strong> account. If you need to change it for httpd, you also have to change the default pool configuration , in /etc/php-fpm.d/www.conf</p>
<pre>
user = foo
listen.acl_users = foo</pre>
<h3 class="para">5.4 timeout and max_execution_time</h3>
<p>If you have to increase the <em>max_execution_time</em> value in PHP for a few long running scripts, you also have to increase the timeout configuration on the web server side:</p>
<pre>
<code>ProxyTimeout 3000</code></pre>
<h3 class="para">5.5 error_log</h3>
<p>The php errors are now logged in the fpm pool configured path</p>
<pre>
php_admin_value[error_log] = /var/log/php-fpm/www-error.log</pre>
<h2 class="para">6. Switching back to mod_php</h2>
<p class="para">If you really want to keep using (temporarily) <em>mod_php</em>, this is still possible, either way:</p>
<ul>
<li class="para">Switch back to <em>prefork</em> MPM in the /etc/httpd/conf.modules.d/00-mpm.conf file</li>
</ul>
<pre>
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
</pre>
<ul>
<li class="para">Enable the module in the /etc/httpd/conf.modules.d/15-php.conf file. <strong>Warning</strong>, this configuration will not be supported, no bug report will be accepted.</li>
</ul>
<pre>
# ZTS module is not supported, so FPM is preferred
LoadModule php7_module modules/libphp7-zts.so</pre>
<p class="para">After this change, the php-fpm package can be removed.</p>
<h2 class="para">7. Conclusion</h2>
<p class="para"><strong>Fedora 27</strong> now uses a modern configuration, matching the upstream projects recommendations. Security and performance are improved.</p>
<p class="para">Any change may raise some small issues, and lot of gnashing of teeth, but we will try to take care of any difficulties, and to improve what must be in the next updates, or in the next fedora versions.</p>
<p class="para">I plan to update this entry according to feedback.</p>End of PHP 7.2 FTBFS marathonurn:md5:2afdd7578031e564326eb5cd54fc99442017-11-14T11:10:00+01:002017-11-14T13:04:07+01:00RemiDéveloppementContributeurPHPplanet-php<p>QA is a very important part of my daily work, and since <strong>PHP 7.2 is available in Fedora rawhide</strong>, we have to ensure everything works as expected with this new version.</p>
<p> </p> <p>As already explained, <a class="ref-post" href="https://blog.remirepo.net/post/2014/08/12/Koschei-continuous-integration-of-PHP-stack-in-Fedora">Koschei</a> is our QA tool, used to <strong>monitor the full PHP stack</strong>, including ~60 extensions and ~500 libraries.</p>
<p>After the initial build of <strong>PHP 7.2.0RC3</strong> in rawhide (September 29th) we have around one hundred FTBFS packages (Failed To Build From Sources).</p>
<p>Today <a href="https://apps.fedoraproject.org/koschei/groups/php?order_by=state%2C-started&collection=f28">everything is ok</a>, all FTBFS have been fixed.</p>
<h2>1. Extensions</h2>
<p>Most PHP extensions are now compatible with PHP 7.2, excepted</p>
<ul>
<li><a href="https://pecl.php.net/package/xdebug">XDebug</a>, but version 2.6.0-dev works and a beta should be released soon</li>
<li><a href="https://pecl.php.net/package/timecop">Timecop</a>, this have been <a href="https://github.com/hnw/php-timecop/issues/29">reported</a> upstream, searching for a fix.</li>
</ul>
<h2>2. Mcrypt</h2>
<p>Lot of packages were broken because they sadly still rely on the old deprecated <a href="http://php.net/mcrypt">mcrypt</a> extension.</p>
<p>Despite I'm fighting for years to be able to remove it (see <a class="ref-post" href="https://blog.remirepo.net/post/2015/07/07/About-libmcrypt-and-php-mcrypt">about libmcrypt and php-mcrypt</a>), we still need it, so I have created the new <strong>php-pecl-mcrypt</strong> package from the <a href="https://pecl.php.net/package/mcrypt">PECL</a> cemetery. This is obviously only a temporary solution, this extension is deprecated, un-maintained and should die.</p>
<h2>3. Upstream patches</h2>
<p>Most of PHP projects consider fix for new PHP version as standard <em>bugfix</em>, which means, could be done in a simple minor version, without requiring any major change.</p>
<p>So, some projects have already made the few minor changes needed, but have not yet released new version including theses changes. So the work was only about finding these fix, and applying them in the Fedora packages.</p>
<h2>4. Pull Requests</h2>
<p>Most projects are not yet monitoring PHP 7.2 (not enabled in travis) so were not really aware of needed changes.</p>
<p>So, of course, the first work was to report this failure upstream, and usually providing a possible fix (PR).</p>
<p>Some are already merged, some are still waiting for review.</p>
<h2>5. Skip some</h2>
<p>For a very few packages, as no real good fix exists for now, we have to temporarily skip some tests with 7.2. Most are about the session change, which breaks unit tests (session_start() failing) without any real impact on the real usage.</p>
<h2>6. Common errors</h2>
<p>The more common errors, requiring a fix, are :</p>
<ul>
<li><a href="https://wiki.php.net/rfc/counting_non_countables">count</a> on not countable (and NULL is not countable)</li>
<li><strong>stricter</strong> prototype checking, fix for <a href="https://bugs.php.net/bug.php?id=73987">#73987</a>, originally applied in 7.1.2RC1 then reverted as introduce a small BC break.</li>
<li><a href="https://wiki.php.net/rfc/object-typehint">object</a> is a reserved keywork</li>
</ul>
<h2>7. Conclusion</h2>
<p>We are ready for PHP 7.2 in Fedora, and as usually, we done this the Fedora way: <strong>upstream first</strong>.</p>
<p>I also consider that having most extensions / libraries ready is a important criteria for the <strong>new version adoption</strong> by users.</p>Red Hat will provide PHP 7.1 for RHEL (and CentOS)urn:md5:92fe973b9f903c6c8ba0286d5691371a2017-10-05T10:25:00+02:002017-10-05T09:28:54+02:00RemiHowToBetaCentOSPHPplanet-phpRHELSCL<p>Announcement : <a href="https://developers.redhat.com/blog/2017/10/04/red-hat-updates-python-php-node-js-supports-new-arches/" hreflang="en">Red Hat updates Python, PHP, Node.js, more; supports new arches</a> and <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Software_Collections/3-Beta/html/3.0_Release_Notes/index.html">RHSCL 3.0 Beta Release Notes</a>.</p> <p>Stability addicts can keep quiet, PHP <strong>5.3.3</strong> is still the standard version provided with RHEL-6, and PHP <strong>5.4.16</strong> the one in RHEL-7</p>
<p>We'll soon have an official and <strong>supported</strong> way to install <strong>PHP version 5.6, 7.0 or 7.1</strong>, beside the system version, without any effect on installed components. Announcement tells the life cycle will be 3 years. Provided version is <strong>7.1.8</strong>.</p>
<p><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" /> It's a <strong>beta</strong> version, published for evaluation purpose.</p>
<p>For more information about installation and use, you can read my <a href="https://blog.remirepo.net/tag/SCL">previous blog articles</a> about SCL.</p>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />RHEL <strong>clones</strong> (CentOS, Oracle, Scientific Linux, ...) users can use the <a href="https://wiki.centos.org/AdditionalResources/Repositories/SCL">centos-sclo-rh-testing</a> repository (maintained by the <a href="https://wiki.centos.org/SpecialInterestGroup/SCLo">SIG SCLo</a>).</p>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />For users who need <a class="ref-post" href="https://blog.remirepo.net/post/2017/02/23/Additional-PHP-packages-for-RHSCL">more extensions</a>, you can use the <strong>centos-sclo-sclo-testing</strong> repository.</p>
<p>Apart from PHP, RHSCL 3.0 is enhanced by some nice collections, I especially appreciate <strong>Mariadb 10.2</strong>, <strong>MongoDB 3.4 </strong>and<strong> PostgreSQL 9.6</strong>.</p>
<p>I think this is a very important new feature which should help for the adoption of recent PHP version in enterprise environment.</p>
<p><img alt="emblem-question-24.png" src="https://blog.remirepo.net/public/icons/emblem-question-24.png" style="float: left; margin: 0 1em 0 0;" />If you have questions, I have even open a dedicated Forum: <a href="http://forums.famillecollet.com/viewforum.php?id=7">About PHP SCL</a>.</p>PHP on the road to the 7.2.0 releaseurn:md5:1259816c805b1fa5a872a08e3cc64e8c2017-08-31T13:50:00+02:002017-11-30T12:44:20+01:00RemiArchivesBetaPHPplanet-phpRPM<p>Version <a href="https://secure.php.net/archive/2017.php#id2017-08-31-1">7.2.0RC1</a> is released. It's now enter the stabilisation phase for the developpers, and the test phase for the users.</p>
<p>RPM are available in the <strong>remi-php72</strong> repository for <strong>Fedora </strong>≥<strong> 25</strong> and <strong>Enterprise Linux </strong>≥<strong> 6</strong> (RHEL, CentOS) and as <em>Software Collection</em> in the <strong>remi-safe</strong> repository (or remi for Fedora)</p>
<p> </p> <p><img alt="emblem-important-4-24.png" class="media" src="https://blog.remirepo.net/public/icons/emblem-important-4-24.png" style="float: left; margin: 0 1em 0 0;" title="" />The repository provides <strong>developement</strong> versions which are not suitable for production usage.</p>
<p>Also read: <a class="ref-post" href="https://blog.remirepo.net/post/2017/04/13/PHP-7.2-as-Software-Collection">PHP 7.2 as Software Collection</a></p>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />Installation : read the <a href="https://blog.remirepo.net/pages/Config-en">Repository configuration</a> and choose installation mode.</p>
<p><strong>Replacement</strong> of default PHP by version <strong>7.2</strong> installation (<strong>simplest</strong>):</p>
<pre>
yum-config-manager --enable remi-php72
yum update php\*</pre>
<p><strong>Parallel installation</strong> of version <strong>7.2</strong> as <a class="ref-post" href="https://blog.remirepo.net/post/2017/04/13/PHP-7.2-as-Software-Collection">Software Collection</a> (<strong>x86_64</strong> only, <strong>recommended</strong> for tests):</p>
<pre>
yum install php72</pre>
<p><strong><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />To be noticed : </strong></p>
<ul>
<li>EL7 rpm are build using RHEL-<strong>7.3</strong></li>
<li>EL6 rpm are build using RHEL-<strong>6.9</strong></li>
<li>lot of extensions are also available, see the <a href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PECL extension RPM status</a> page</li>
<li>follow the comments on this page for update until final version.</li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" /><strong>Information</strong>, read:</p>
<ul><!-- <li><a href="http://php.net/manual/en/migration70.php">Migrating from PHP 5.6.x to PHP 7.0.x</a></li> -->
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-7.2/UPGRADING">UPGRADING</a></li>
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-7.2/UPGRADING.INTERNALS">UPGRADING.INTERNALS</a></li>
</ul>
<p align="center"><strong>Base</strong> packages (php)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php-common&version=7.2.0~RC1&lang=en" style="margin: 1em auto; display: block;" /></p>
<p align="center"><strong>Software Collections </strong>(php72)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php72-php-common&version=7.2.0&lang=en&beta=RC1" style="margin: 1em auto; display: block;" /></p>PHP 7.2 as Software Collectionurn:md5:e17bc2f25ef2ef4d45bdb7be13e5885a2017-04-13T10:17:00+02:002017-08-30T08:46:48+02:00RemiRPMBetaPHPplanet-phpRPMSCL<p>No version published yet, version 7.2.0-dev is still under development, but I think it is useful to be able to start testing.</p>
<p>RPM of this upcoming version of <strong>PHP 7.2</strong>, are available in <strong>remi</strong> repository for <strong>Fedora</strong> 24, 25, 26, 27 and <strong>Enterprise Linux </strong>6, 7 (RHEL, CentOS, ...) in a fresh new <a href="https://www.softwarecollections.org/"><em>Software Collection</em></a> (<strong>php72</strong>) allowing its installation beside the system version.</p> <p>As I strongly believe in SCL potential to provide a simple way to allow installation of various versions simultaneously, and as I think it is useful to offer this feature to allow developers to test their applications, to allow sysadmin to prepare a migration or simply to use this version for some specific application, I decide to create this new SCL.</p>
<p><img alt="" class="media" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="{figureStyle}" /> I will have the honor to share the <em><strong>Release Manager</strong></em> rôle for this version with <a href="https://github.com/sgolemon">Sara Golemon</a>.</p>
<p>I also plan to propose this new version as a <strong>Fedora </strong><s>27</s><strong> 28</strong> change.</p>
<p><strong>Installation</strong> :</p>
<pre>
yum install php72</pre>
<p><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />To be noticed:</p>
<ul>
<li>the SCL is independant from the system, and doesn't alter it</li>
<li>this SCL is available in <strong>remi-safe</strong> repository (or remi for Fedora)</li>
<li>installation is under the<strong> /opt/remi/php72</strong> tree, configuration under the <strong>/etc/opt/remi/php72</strong> tree</li>
<li>the <strong>Apache</strong> module, php72-php, is available, but of course, only one <em>mod_php</em> can be used (so you have to disable or uninstall any other, the one provided by the default "php" package still have priority)</li>
<li>the <strong>FPM</strong> service (php72-php-fpm) is available, it listens on default port 9000, so you have to change the configuration if you want to use various FPM services simultaneously.</li>
<li>the <strong>php72</strong> command give a simple access to this new version, however the <strong>scl</strong> command is still the recommended way (or the <strong>module</strong> command).</li>
<li>for now, the collection provides <strong>7.2.0-dev</strong>, but alpha/beta version should be released in the next weeks</li>
<li>some of the PECL extensions are already available, see the <a class="ref-post" href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">extensions status</a> page</li>
<li>only <strong>x86_64</strong>, no plan for other arch.</li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />Also read other entries about <a href="https://blog.remirepo.net/tag/SCL">SCL</a>. especially description of my <a class="ref-post" href="https://blog.remirepo.net/post/2016/04/16/My-PHP-Workstation">My PHP workstation</a>.</p>
<pre>
$ module load php72
$ php --version
PHP 7.2.0-dev (cli) (built: Apr 12 2017 09:48:21) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0-dev, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.2.0-dev, Copyright (c) 1999-2017, by Zend Technologies</pre>
<p>As always, your feedback is welcome, a SCL dedicated <a href="https://forum.remirepo.net/viewforum.php?id=7">forum</a> is open.</p>
<p align="center"><strong>Software Collections</strong> (php72)</p>
<p><img alt="" src="https://blog.remirepo.net/downcpt.php?name=php72-php-common&version=7.2.0&lang=en&beta=20170412" style="margin: 1em auto; display: block;" /></p>ZipArchive with encryptionurn:md5:ac1718ca0f5ddbbe42358d22c3c2ed502017-03-01T11:16:00+01:002017-03-01T15:17:01+01:00RemiDéveloppementPHPplanet-phpZip<p>Point of the situation with the development of <a href="https://pecl.php.net/package/zip">zip</a> extension version <strong>1.14.0</strong> which implements support of encrypted archives.</p> <p>This new feature implementation rely on <a href="https://nih.at/libzip/">libzip</a> library new version <strong>1.2.0</strong>.</p>
<p>For now, only build using system library is supported for this new feature, but an update of the bundled library is planed.</p>
<p>When everything will be validated, version will be released and merged in php sources (ext/zip), probably in PHP 7.2.</p>
<p><img alt="" class="media" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="{figureStyle}" /> this development is in progress, nothing final, proposed methods still can change.</p>
<h2>RPM installation</h2>
<p>The <strong>php-pecl-zip</strong>-1.4.0.0-0.2.20170301dev package is available in <strong>remi-test</strong> repository (and remi-php70-test, remi-php71-test).</p>
<h2>Installation from sources</h2>
<p>From a clone of the sources, available in <a href="https://github.com/pierrejoye/php_zip">github</a> :</p>
<pre>
$ phpize
$ ./configure --with-libzip
...
checking for libzip... from pkgconfig: version 1.2.0 found in /usr/lib64
checking for zip_open in -lzip... yes
checking for zip_file_set_encryption in -lzip... yes
...
$ make
...
Build complete.
Don't forget to run 'make test'.
$ make test
...
PASS ZipArchive::setEncryption*() functions [tests/oo_encryption.phpt]
</pre>
<h2>Encrypted archive creation</h2>
<p>Three methods are available to manage encryption :</p>
<pre>
ZipArchive::setEncryptionName($name, $method [, $password]);
ZipArchive::setEncryptionIndex($index, $method [, $password]);
ZipArchive::setPassword($password);
</pre>
<p>Encryption method being one of the new constants: ZipArchive::EM_NONE, ZipArchive::EM_AES_128, ZipArchive::EM_AES_192 or ZipArchive::EM_AES_256.</p>
<p><strong>Example 1:</strong></p>
<p>Using per file password</p>
<pre>
$zip = new ZipArchive;
$zip->open(__DIR__ . '/encrypted.zip', ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE);
$zip->addFile(__FILE__, 'foo.php');
$zip->setEncryptionName('foo.php', ZipArchive::EM_AES_256, 'secret');
$zip->close();</pre>
<p><strong>Example 2:</strong></p>
<p>Using default (global) password</p>
<pre>
$zip = new ZipArchive;
$zip->open(__DIR__ . '/encrypted.zip', ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE);
$zip->setPassword('secret');
$zip->addFile(__FILE__, 'foo.php');
$zip->setEncryptionName('foo.php', ZipArchive::EM_AES_256);
$zip->close();</pre>
<h2>Encrypted archive reading</h2>
<p><strong>Example</strong> :</p>
<pre>
$zip = new ZipArchive;
$zip->open(__DIR__ . '/encrypted.zip');
print_r($zip->statName($file));
$zip->setPassword('secret');
$text = $zip->getFromName('foo.php');
$zip->close();</pre>
<p>To be noticed :</p>
<ul>
<li>the <em>setPassword</em> method call, which set the default password</li>
<li>the <em>statName</em> method output now includes a new information field: <em>encryption_method</em> (259 is ZipArchive::EM_AES_256)</li>
</ul>
<h2>Encrypted archive reading using stream</h2>
<p>The password need to be given using a stream <a href="http://php.net/context">context</a>.</p>
<p><strong>Exemple</strong> :</p>
<pre>
$ctx = stream_context_create(array(
'zip' => array(
'password' => 'secret'
)
));
$text = file_get_contents('zip://' . __DIR__ . '/encrypted.zip#foo.php', false, $ctx);</pre>
<h2>Conclusion</h2>
<p>Full script used in above examples is available in the extension sources: <a href="https://raw.githubusercontent.com/pierrejoye/php_zip/master/examples/encryption.php">encryption.php</a></p>
<p>This new feature seems really useful and will improve compatibility with other tools, such as <strong>WinZip</strong> for Windows or <strong>7za</strong> for Linux.</p>
<p>This change should be available in <strong>Fedora 26</strong> which already have libzip 1.2.0.</p>Additional PHP packages for RHSCLurn:md5:0849164aeafa5f17fd22bb3685fc3b9a2017-02-23T13:38:00+01:002020-12-02T09:52:34+01:00RemiGeneralCentOSPHPplanet-phpRHELSCL<p>Current situation about official repositories providing <a href="http://php.net/">PHP</a> Software Collections for <a href="https://access.redhat.com/products/red-hat-enterprise-linux/">RHEL</a> and <a href="https://www.centos.org/">CentOS</a> users.</p> <p>Since <a href="https://access.redhat.com/documentation/en-us/red_hat_software_collections/3/html/3.4_release_notes/">RHSCL 3.4</a> was released, <strong>RHEL</strong> users can install <strong>PHP 7.2</strong> or <strong>PHP 7.3</strong> without base système alteration, using the appropriate channel.</p>
<p>These packages are also available for <strong>CentOS</strong> users in the <a href="https://wiki.centos.org/AdditionalResources/Repositories/SCL">SCL</a> repositories, managed by the <a href="https://wiki.centos.org/SpecialInterestGroup/SCLo">SCLo SIG</a>:</p>
<pre>
# yum --enablerepo=extras install centos-release-scl</pre>
<p>So the <strong>CentOS</strong> project provides the infrastructure and hosting for 4 repositories:</p>
<ul>
<li><strong>centos-sclo-rh</strong> : same content than upstream RHSCL</li>
<li><strong>centos-sclo-sclo</strong> : additional collections maintained by the community</li>
<li><strong>centos-sclo-rh-testing</strong> : packages to be tested (RHSCL <em>beta</em> version)</li>
<li><strong>centos-scl-sclo-testing</strong> : package to be tested, maintained by the community</li>
</ul>
<p><strong>RHSCL</strong> users wishing to use these additional packages can configure the <strong>centos-sclo-sclo</strong> repository by using the <a href="https://copr.fedorainfracloud.org/coprs/rhscl/centos-release-scl/">centos-release-scl</a> Copr repository:</p>
<pre>
# cd /etc/yum.repos.d/# wget https://copr.fedorainfracloud.org/coprs/rhscl/centos-release-scl/repo/epel-7/rhscl-centos-release-scl-epel-7.repo# yum install centos-release-scl</pre>
<p>If you are interested by these packages, I recommend to follow the <a href="https://www.redhat.com/mailman/listinfo/sclorg">sclorg@redhat.com</a> <strong>mailing list</strong> where possible issues are discussed, and changes announced. Thanks for using this list for your feedback (testing packages) or any other request. New contributor are also welcome.</p>
<p>Information and documentation on <a href="https://www.softwarecollections.org/">https://www.softwarecollections.org/</a>.</p>
<p><strong>Development</strong> is tracked on <a href="https://github.com/sclorg-distgit">sclorg-distgit</a>.</p>
<p>Here is the list of available additional packages in <strong>centos-sclo-sclo</strong> on December 2nd 2020:</p>
<table border="1" cellpadding="1" cellspacing="1" class="pkg_list">
<thead>
<tr class="first">
<td>#</td>
<td> </td>
<td><strong>Paquet</strong></td>
<td><strong>Version</strong></td>
<td><strong>Distribution</strong></td>
<td><strong>Remarques</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/amqp">amqp</a></td>
<td>sclo-php72-php-pecl-amqp<br />
sclo-php73-php-pecl-amqp</td>
<td>1.9.4</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/apcu_bc">apcu_bc</a></td>
<td>sclo-php72-php-pecl-apcu-bc<br />
sclo-php73-php-pecl-apcu-bc</td>
<td>1.0.5</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/apfd">apfd</a></td>
<td>sclo-php72-php-pecl-apfd<br />
sclo-php73-php-pecl-apfd</td>
<td>1.0.1</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/ast">ast</a></td>
<td>sclo-php72-php-ast<br />
sclo-php73-php-ast</td>
<td>1.0.10</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/geoip">geoip</a></td>
<td>sclo-php72-php-pecl-geoip<br />
sclo-php73-php-pecl-geoip</td>
<td>1.1.1</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/pecl_http">http</a></td>
<td>sclo-php72-php-pecl-http<br />
sclo-php73-php-pecl-http</td>
<td>3.2.2</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/igbinary">igbinary</a></td>
<td>sclo-php72-php-pecl-igbinary<br />
sclo-php73-php-pecl-igbinary</td>
<td>2.0.8</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/imagick">imagick</a></td>
<td>sclo-php72-php-pecl-imagick<br />
sclo-php73-php-pecl-imagick</td>
<td>3.4.4</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="http://php.net/imap">imap</a></td>
<td>sclo-php72-php-imap<br />
sclo-php73-php-imap</td>
<td>7.2.24<br />
7.3.11</td>
<td>7<br />
7</td>
<td>requires <strong>libc-client</strong> from EPEL<br />
<strong>7.3.11</strong> in <em>testing</em></td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/lzf">lzf</a></td>
<td>sclo-php72-php-pecl-lzf<br />
sclo-php73-php-pecl-lzf</td>
<td>1.6.8</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/memcached">memcached</a></td>
<td>sclo-php72-php-pecl-memcached<br />
sclo-php73-php-pecl-memcached</td>
<td>3.1.4</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/mongodb">mongodb</a></td>
<td>sclo-php72-php-pecl-mongodb<br />
sclo-php73-php-pecl-mongodb</td>
<td>1.8.2</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/msgpack">msgpack</a></td>
<td>sclo-php72-php-pecl-msgpack<br />
sclo-php73-php-pecl-msgpack</td>
<td>2.1.1</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://github.com/nrk/phpiredis">phpiredis</a></td>
<td>sclo-php72-php-phpiredis<br />
sclo-php73-php-phpiredis</td>
<td>1.0.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/propro">propro</a></td>
<td>sclo-php72-php-pecl-propro<br />
sclo-php73-php-pecl-propro</td>
<td>2.1.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/raphf">raphf</a></td>
<td>sclo-php72-php-pecl-raphf<br />
sclo-php73-php-pecl-raphf</td>
<td>2.0.1</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/redis">redis</a> v4</td>
<td>sclo-php72-php-pecl-redis4</td>
<td>4.3.0</td>
<td>7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/redis">redis</a> v5</td>
<td>sclo-php72-php-pecl-redis5<br />
sclo-php73-php-pecl-redis5</td>
<td>5.3.2</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/rrd">rrd</a></td>
<td>sclo-php72-php-pecl-rrd<br />
sclo-php73-php-pecl-rrd</td>
<td>2.0.1</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/selinux">selinux</a></td>
<td>sclo-php72-php-pecl-selinux<br />
sclo-php73-php-pecl-selinux</td>
<td>0.5.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/smbclient">smbclient</a></td>
<td>sclo-php72-php-smbclient<br />
sclo-php73-php-smbclient</td>
<td>1.0.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="http://php.net/sodium">sodium</a></td>
<td>sclo-php72-php-sodium<br />
sclo-php73-php-sodium</td>
<td>7.2.24<br />
7.3.11</td>
<td>7<br />
7</td>
<td>requires <strong>libsodium</strong> from EPEL<br />
<strong>7.3.11</strong> in <em>testing</em></td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/solr">solr</a></td>
<td>sclo-php72-php-pecl-solr2<br />
sclo-php73-php-pecl-solr2</td>
<td>2.5.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/ssh2">ssh2</a></td>
<td>sclo-php72-php-pecl-ssh2<br />
sclo-php73-php-pecl-ssh2</td>
<td>1.2</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="http://php.net/tidy">tidy</a></td>
<td>sclo-php72-php-tidy<br />
sclo-php73-php-tidy</td>
<td>7.2.24<br />
7.3.11</td>
<td>7<br />
7</td>
<td><br />
<strong>7.3.11</strong> in <em>testing</em></td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/uploadprogress">uploadprogress</a></td>
<td>sclo-php72-php-pecl-uploadprogress<br />
sclo-php73-php-pecl-uploadprogress</td>
<td>1.1.3</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/uuid">uuid</a></td>
<td>sclo-php72-php-pecl-uuid<br />
sclo-php73-php-pecl-uuid</td>
<td>1.1.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr class="line">
<td> </td>
<td><a href="https://pecl.php.net/package/xattr">xattr</a></td>
<td>sclo-php72-php-pecl-xattr<br />
sclo-php73-php-pecl-xattr</td>
<td>1.4.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><a href="https://pecl.php.net/package/xdebug">xdebug</a></td>
<td>sclo-php72-php-pecl-xdebug</td>
<td>2.7.2</td>
<td>7</td>
<td>rh-php73-php-pecl-xdebug exists</td>
</tr>
<tr>
<td> </td>
<td><a href="https://unit.nginx.org/">unit-php</a></td>
<td>sclo-php72-unit-php<br />
sclo-php73-unit-php</td>
<td>1.19.0</td>
<td>7<br />
7</td>
<td> </td>
</tr>
</tbody>
</table>
<p><img alt="" class="media" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="{figureStyle}" /> for now, all dependencies must be available in base repository (EPEL is excluded), this explain why some extensions cannot be added.</p>
<p><strong>Waiting for often requested packages:</strong></p>
<p>None for now</p>
<!--<table border="1" cellpadding="1" cellspacing="1" class="pkg_list"> <thead> <tr class="first"> <td>#</td> <td><strong>Paquet</strong></td> <td><strong>Version</strong></td> <td><strong>Distribution</strong></td> <td><strong>Remarques</strong></td> </tr> </thead> <tbody> </tbody></table>-->PHP version 7.1.0 is released!urn:md5:945c66083837af4e7b7a30e4b6082a9b2016-12-02T06:00:00+01:002017-01-20T07:10:44+01:00RemiArchivesPHPplanet-phpRPM<p>RC6 was GOLD, so version <a href="http://php.net/archive/2016.php#id2016-12-01-3">7.1.0 GA</a> is just released, at planed date.</p>
<p>A great thanks to all developers who have contributed to this new major and long awaiting version of PHP and thanks to all testers of the RC versions who have allowed us to deliver a good quality version.</p>
<p>RPM are available in the <strong>remi-php71</strong> repository for <strong>Fedora </strong>≥<strong> 23</strong> and <strong>Enterprise Linux </strong>≥<strong> 6</strong> (RHEL, CentOS) and as <em>Software Collection</em> in the <strong>remi-safe</strong> repository.</p> <p>Read the <a href="http://php.net/releases/7_1_0.php">PHP 7.1.0 Release Announcement</a>.</p>
<p>So the tribe get a new member:</p>
<p><a class="media-link" href="https://blog.remirepo.net/public/Photos/Tribe.jpg"><img alt="Tribe.jpg" class="media" src="https://blog.remirepo.net/public/Photos/.Tribe_m.jpg" /></a></p>
<p>Also read:</p>
<ul>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2016/07/23/New-remi-php71-repository">New "remi-php71" repository</a></li>
<li><a class="ref-post" href="https://blog.remirepo.net/post/2016/06/10/PHP-7.1-as-Software-Collection">PHP 7.1 as Software Collection</a></li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" />Installation : read the <a href="https://blog.remirepo.net/pages/Config-en">Repository configuration</a> and choose installation mode, or follow the <a href="https://rpms.remirepo.net/wizard/">Configuration Wizard</a> instructions.</p>
<p><strong>Replacement</strong> of default PHP by version <strong>7.1</strong> installation (<strong>simplest</strong>):</p>
<pre>
yum-config-manager --enable remi-php71
yum update php\*</pre>
<p><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />The update may fail if some installed extensions are not yet available for PHP 7, thus avoid breaking your configuration without information, thanks to ABI compatibility protection (php(zend-abi)). After checking, you may have to remove these extensions before running the update. All the extensions compatible with PHP 7 are also available for PHP 7.1 (excepted phalcon).</p>
<p><strong>Parallel installation</strong> of version <strong>7.1</strong> as <a href="https://blog.remirepo.net/post/2016/06/10/PHP-7.1-as-Software-Collection">Software Collection</a> (<strong>x86_64</strong> only, <strong>recommended</strong> for tests):</p>
<pre>
yum install php71</pre>
<p><strong><img alt="emblem-important-2-24.png" src="https://blog.remirepo.net/public/icons/emblem-important-2-24.png" style="float: left; margin: 0 1em 0 0;" />To be noticed : </strong></p>
<ul>
<li>EL7 rpm are build using RHEL-<strong>7.2</strong></li>
<li>EL6 rpm are build using RHEL-<strong>6.8</strong></li>
<li>this version will be the default version in Fedora 26, see <a href="https://fedoraproject.org/wiki/Changes/php71">PHP 7.1</a></li>
<li>various extensions are already available, see the <a href="https://blog.remirepo.net/pages/PECL-extensions-RPM-status">PECL extension RPM status</a> page</li>
</ul>
<p><img alt="emblem-notice-24.png" src="https://blog.remirepo.net/public/icons/emblem-notice-24.png" style="float: left; margin: 0 1em 0 0;" /><strong>Information</strong>, read:</p>
<ul>
<li><a href="http://php.net/manual/en/migration71.php">Migrating from PHP 7.0.x to PHP 7.1.x</a></li>
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-7.1.0/UPGRADING">UPGRADING</a></li>
<li><a href="https://raw.githubusercontent.com/php/php-src/PHP-7.1.0/UPGRADING.INTERNALS">UPGRADING.INTERNALS</a></li>
</ul>
<p align="center"><strong>Base</strong> packages (php)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php-common&version=7.1.0&lang=en&release=1" style="margin: 1em auto; display: block;" /></p>
<p align="center"><strong>Software Collections </strong>(php70)<br />
<img alt="" src="https://blog.remirepo.net/downcpt.php?name=php71-php-common&version=7.1.0&lang=en&release=1" style="margin: 1em auto; display: block;" /></p>Redis from PHPurn:md5:8d8071dc6c23d1a7a1fb0be37ad90a5b2016-11-13T09:29:00+01:002016-12-05T13:03:38+01:00RemiHowToPHPplanet-phpRedis<p>Here is a small comparison of the various solutions to use a <a href="http://redis.io/">Redis</a> database from PHP on Linux</p>
<p>All the tests have be run on <strong>Fedora</strong> 25 but should work on <strong>RHEL</strong>, <strong>CentOS</strong> or any other distribution.</p>
<p>Tested solutions:</p>
<ul>
<li><a href="https://pecl.php.net/package/redis">redis</a> extension (see <a href="https://blog.remirepo.net/post/2016/11/13/Redis-from-PHP#sec1">#1</a>)</li>
<li><a href="https://github.com/nrk/predis">Predis</a> library (see <a href="https://blog.remirepo.net/post/2016/11/13/Redis-from-PHP#sec2">#2</a>)</li>
<li><a href="https://github.com/nrk/phpiredis">phpiredis</a> extension (see <a href="https://blog.remirepo.net/post/2016/11/13/Redis-from-PHP#sec3">#3</a>)</li>
<li><a href="https://github.com/nrk/predis">Predis</a> library with <a href="https://github.com/nrk/phpiredis">phpiredis</a> extension (see <a href="https://blog.remirepo.net/post/2016/11/13/Redis-from-PHP#sec4">#4</a>)</li>
</ul>
<p> </p> <p>For each solution, I used 3 set of tests (each run 10 times, to get an average result) :</p>
<ul>
<li>connection and increment of a simple value, only to compute the connection cost</li>
<li>connection and set / get of 10000 numerical values</li>
<li>connection and set / strlen of ~2700 big values (all the man pages, section 1)</li>
</ul>
<h2 id="sec1">1. redis extension</h2>
<h3>Required components:</h3>
<ul>
<li><a href="https://pecl.php.net/package/redis">redis </a>extension</li>
<li>RPM package: php-pecl-redis</li>
</ul>
<h3>Code sample:</h3>
<pre>
<?php
$time = microtime(true);
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
printf("Value = %d\n", $redis->incr("foo"));
$time = microtime(true)-$time;
printf("Done in %.6f\n", $time);</pre>
<p>Full tests source code used: <a href="https://blog.remirepo.net/public/php/redis.txt">redis.txt</a>.</p>
<h3>Results :</h3>
<ul>
<li>Connection: 0.000299</li>
<li>Set / get: 0.277000</li>
<li>Set / strlen: 0.110900</li>
</ul>
<p>This the most known and used solution, sadly, I have some doubts about the code quality of this extension.</p>
<h2 id="sec2">2. Predis library</h2>
<h3>Required components</h3>
<ul>
<li><a href="https://github.com/nrk/predis">Predis</a> library</li>
<li>RPM package: php-nrk-Predis</li>
</ul>
<h3>Code sample:</h3>
<pre>
<?php
require 'Predis/Autoloader.php';
Predis\Autoloader::register();
$time = microtime(true);
$redis = new Predis\Client(['host' => '127.0.0.1', 'port' => 6379]);
printf("Value = %d\n", $redis->incr("foo"));
$time = microtime(true)-$time;
printf("Done in %.6f\n", $time);</pre>
<p>Full tests source code used: <a href="https://blog.remirepo.net/public/php/predis.txt">predis.txt</a> (need to comment out the constructeur call).</p>
<h3>Results :</h3>
<ul>
<li>Connection: 0.001890</li>
<li>Set / get: 0.375500</li>
<li>Set / strlen: 11.445000</li>
</ul>
<p>No surprise, a pure PHP implementation is much slower. Of course this is related to library loading which penalizes the connection, then the simple requests execution (get/set) is rather acceptable.</p>
<h2 id="sec3">3. phpiredis extension</h2>
<h3>Required components:</h3>
<ul>
<li><a href="https://github.com/nrk/phpiredis">phpiredis </a>extension</li>
<li>RPM packages: php-phpiredis, hiredis</li>
</ul>
<h3>Code sample:</h3>
<pre>
<?php
$time = microtime(true);
$redis = phpiredis_connect('127.0.0.1', 6379);
printf("Value = %d\n", phpiredis_command($redis, "INCR foo"));
$time = microtime(true)-$time;
printf("Done in %.6f\n", $time);</pre>
<p>Full tests source code used: <a href="https://blog.remirepo.net/public/php/phpiredis.txt">phpiredis.txt</a>.</p>
<h3>Results:</h3>
<ul>
<li>Connection: 0.000241</li>
<li>Set / get: 0.288100</li>
<li>Set / strlen: 0.105000</li>
</ul>
<p>Results are close to the <strong>redis</strong> extension ones.</p>
<p>Sadly this extension, however already old, is still under development (beta). Its code is very simple (~1000 lines vs ~20000 for redis). and using the <strong>hiredis</strong> library seems (to me) far more sane and simple to maintain for a long term.</p>
<h2 id="sec4">4. Predis library with the phpiredis extension</h2>
<h3>Required components</h3>
<ul>
<li><a href="https://github.com/nrk/predis">Predis</a> library</li>
<li><a href="https://github.com/nrk/phpiredis">phpiredis</a> extension</li>
<li>RPM packages: php-nrk-Predis, php-phpiredis, hiredis</li>
</ul>
<h3>Code sample:</h3>
<pre>
<?php
require 'Predis/Autoloader.php';
Predis\Autoloader::register();
$time = microtime(true);
$redis = new Predis\Client(['host' => '127.0.0.1', 'port' => 6379], ['connections' => ['tcp' => 'Predis\\Connection\\PhpiredisSocketConnection']]);
printf("Value = %d\n", $redis->incr("foo"));
$time = microtime(true)-$time;
printf("Done in %.6f\n", $time);</pre>
<p>Full tests source code used: <a href="https://blog.remirepo.net/public/php/predis.txt">predis.txt</a>.</p>
<h3>Results:</h3>
<ul>
<li>Connection: 0.001795</li>
<li>Set / get : 0.378900</li>
<li>Set / strlen : 0.145300</li>
</ul>
<p>As stated in the documentation, the <strong>Predis</strong> library take a huge benefit when <strong>phpiredis</strong> extension is used for big data sets. The tests results are very acceptable.</p>
<h2 id="sec5">5. Conclusion</h2>
<p>Up to you for a choice reading the results.</p>
<p>I will be tempted to prefer the <strong>phpiredis</strong> extension when speed is the main priority, and the <strong>Predis</strong> library for code beauty. This association seems rational, also followed by some other projects (e.g. mongo => mongodb) the extension is reduce to a minimal code, using a dedicated system library (<strong>hiredis</strong> here) and only take care of low level part (protocol), where performance is needed, and the library provides the high level part to the developer.</p>
<p>I plan to try to give some help to the <strong>phpiredis</strong> extension author so a version can be published soon, preferably on PECL forge, to give it more visibility. And then I will probably submit a review for official Fedora/EPEL repositories.</p>
<p> </p>