Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : Fiches explicatives

Installer PHP 7.1 sur CentOS, RHEL ou Fedora

Remi Collet

Voici un guide rapide pour mettre à jour le PHP fournit par Fedora, RHEL ou CentOS par la dernière version 7.1.

 

Configuration des dépôts:

Sur Fedora, les dépôts standards sont suffisant, sur Enterprise Linux (RHEL, CentOS) il est aussi nécessaire de configurer le dépôt Extra Packages for Enterprise Linux (EPEL), et sur RHEL d'activer le canal optional.

Fedora 25

wget http://rpms.remirepo.net/fedora/remi-release-25.rpm
dnf install remi-release-25.rpm

Fedora 24

wget http://rpms.remirepo.net/fedora/remi-release-24.rpm
dnf install remi-release-24.rpm

RHEL version 7.2 ou 7.3

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

RHEL version 6.8

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

CentOS version 7.2 (ou 7.3)

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

CentOS version 6.8

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

 

Activation du dépôt remi-php71

Les paquets sont dans les dépôts remi-safe (activé par défaut) et remi-php71 qui n'est pas activé par défaut (choix de l'administrateur en fonction de la version de PHP souhaitée).

RHEL et CentOS

yum-config-manager --enable remi-php71

Fedora

dnf config-manager --set-enabled remi-php71

 

Mise à jour de PHP

Par choix, les paquets ont le même nom que les paquets fournit par défaut avec le système, une simple mise à jour est donc suffisante :

yum update

Et c'est tout :)

$ php -v
PHP 7.1.0 (cli) (built: Dec  1 2016 06:23:20) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.1.0, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans

 

Problèmes connus

La mise à jour peut échouer (c'est voulu) lorsque certaines extensions présentes ne sont pas encore compatibles avec PHP 7.

Voir la liste des compatibilité : PECL extensions RPM status

Si elles ne sont pas indispensables, vous pouvez les désinstaller avant la mise à  jour, sinon, il faudra patienter.

Attention : quelques extensions sont encore en phase de développement (memcache, redis...), mais il m'a semblait utile de les fournir afin de permettre la mise à jour au plus grand nombre, et aussi permettre leur test et des retours vers les auteurs.

 

Plus d'informations

Si vous souhaitez une installation en parallèle de PHP 5, cela est possible en utilisant les paquets préfixés php71 Voir le billet PHP 7.1 en Software Collection.

Vous pouvez aussi utiliser le nouvel assistant de configuration.

Les paquets présents dans le dépôt seront utilisés comme source pour Fedora 26 (la proposition de changement a déjà été acceptée).

En fournissant une pile complète, environ 150 extensions disponibles, 4 versions de PHP, paquets de base et SCL, pour Fedora et Enterprise Linux, et avec 100 000 téléchargements par jour, le dépôt remi est devenu en 10 ans une référence pour les utilisateurs de PHP sur les distributions RPM, maintenu par un contributeur actif aux différents projets (Fedora, PHP, PECL...).

Et aussi :

Redis depuis PHP

Remi Collet

Voici un petit récapitulatif des différents moyens d'utiliser une base de données Redis depuis PHP sous Linux

L'ensemble des tests ont été réalisés sous Fedora 25 mais devrait fonctionner avec RHEL, CentOS ou une autre distribution.

Solution testées:

 

Pour chaque solution, j'ai utilisé 3 jeux d'essai (lancé une dizaine de fois pour avoir une valeur moyenne)

  • connexion et incrément d'une valeur, uniquement pour mesurer le coût de la connexion
  • connexion et set / get de 10000 valeurs numériques
  • connexion et set / strlen de ~2700 valeurs importantes (l'ensemble des pages de man 1)

1. Extension redis

Composants nécessaires :

  • Extension redis
  • Paquets RPM: php-pecl-redis

Exemple de code :

<?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);

Résultats :

  • Connexion : 0.000299
  • Set / get : 0.277000
  • Set / strlen : 0.110900

C'est la solution la plus connue est la plus utilisée, j'ai malheureusement de gros doute sur la qualité du code actuel de l'extension.

2. Bibliothèque Predis

Composants nécessaires:

  • Bibliothèque Predis
  • Paquets RPM: php-nrk-Predis

Exemple de code :

<?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);

Résultats :

  • Connexion : 0.001890
  • Set / get : 0.375500
  • Set / strlen : 11.445000

Rien d'étonnant à ce qu'une implémentation pure PHP soit nettement plus lente. C'est évidement le chargement de la bibliothèque qui pénalise la connexion, ensuite l'exécution de requêtes simples (get/set) reste très acceptable.

3. Extension phpiredis

Composants nécessaires:

  • Extension phpiredis
  • Paquets RPM: php-phpiredis, hiredis

Exemple de code :

<?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);

Résultats :

  • Connexion : 0.000241
  • Set / get : 0.288100
  • Set / strlen : 0.105000

Les résultats sont comparables à ceux de l'extension redis.

Il est dommage que cette extension, pourtant ancienne, soit toujours en phase de développement (beta). Le code très simple (~1000 lignes contre ~20000 pour redis), et utiliser la bibliothèque hiredis me semble beaucoup plus sain et maintenable à long terme.

4. Bibliothèque Predis avec l'extension phpiredis

Composants nécessaires:

  • Bibliothèque Predis
  • Extension phpiredis
  • Paquets RPM: php-nrk-Predis, php-phpiredis, hiredis

Exemple de code :

<?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);

Résultats :

  • Connexion : 0.001795
  • Set / get : 0.378900
  • Set / strlen : 0.145300

Comme indiqué dans la documentation, la bibliothèque Predis est largement optimisée en utilisant l'extension phpiredis pour les données importantes. Les résultats des tests sont donc très acceptables.

5. Conclusion

À vous de faire votre choix à la lecture des résultats.

J'aurais tendance à privilégier l'extension phpiredis lorsque la vitesse est une priorité absolue, et la bibliothèque Predis pour la beauté du code. Ce couple suivant une rationalisation aussi suivi par d'autres projets (e.g. mongo => mongodb) ou l'extension est réduite au minimum en utilisant une bibliothèque dédiée (ici hiredis) et se charge uniquement de la partie bas niveau, là où les perfornances sont nécessaires, la bibliothèque fournissant la partie haut niveau au développeur.

Je prévois d'aider l'auteur de l'extension phpiredis pour qu'une version soit publié, et si possible sur la forge PECL afin de lui donner la visiblité qu'elle me semble mériter. Alors je soumettrais probablement une revue pour les dépôts officiels de Fedora/EPEL.

 

P.S. le code complet utilisé pour les tests : redis.txt, predis.txt, phpiredis.txt

Red Hat va fournir PHP 7.0 pour RHEL

Remi Collet

Annonce : Red Hat Software Collections 2.3 now beta

Que les accrocs de la stabilité se rassurent, PHP 5.3.3 reste la version standard fournit avec RHEL-6 et PHP 5.4.16 celle de RHEL-7.

Comme indiqué dans RHSCL product life cycle, les collections php54 et php55 ont atteint leur fin de vie. La collection rh-php56 est toujours maintenue est a été mise à jour en version 5.6.25

Nous disposerons donc bientôt d'un moyen officiel et supporté d'installer PHP version 5.6 ou 7.0, en parallèle  de la version système, sans affecter les composants standards. L'annonce prévoit un cycle de vie de 3 ans. La version fournit est la 7.0.10.

emblem-important-2-24.png Il s'agit pour l'instant uniquement d'une version Beta destinée à l'évaluation.

Pour plus d'informations sur l'installation et l'utilisation des SCL, vous pouvez consulter les autres billets déjà publiés à ce sujet :

emblem-notice-24.pngPour les utilisateurs des clones de RHEL (CentOS, Oracle, Scientific Linux, ...) vous pouvez utiliser le dépôt centos-sclo-rh-testing (maintenu par le SIG SCLo).

emblem-notice-24.pngPour ceux qui souhaitent plus d'extensions, vous pouvez utiliser la dépôt centos-sclo-sclo-testing.

En dehors de PHP, RHSCL 2.3 senrichit de plusieurs morceaux de choix, je retiendrais Redis 3.2 et MongoDB 3.2.

Il me semble que c'est une excellent nouvelle qui devrait aider à l'adoption des versions récentes de PHP dans le monde de l'entreprise.

emblem-question-24.pngSi vous avez des questions, j'ai même ouvert un nouveau Forum dédié : About PHP SCL.

Microsoft SQL Server depuis PHP

Remi Collet

Voici un petit récapitulatif des différents moyens d'utiliser une base de données Microsoft SQL Server depuis PHP, sous Linux.

L'ensemble des tests ont été réalisés sous Fedora 23 mais devrait fonctionner avec RHEL ou CentOS version 7.

1. Utilisation de PDO, ODBC et FreeTDS

Composants nécessaires:

  • Bibliothèque freetds et extension pdo_odbc
  • PHP version 5 ou 7
  • Paquets RPM: freetds (EPEL), unixODBC, php-pdo, php-odbc

Configuration du pilote ODBC

Le fichier /etc/odbcinst.ini doit contenir la déclaration du pilote:

[FreeTDS]
Description=FreeTDS version 0.95
Driver=/usr/lib64/libtdsodbc.so.0.0.0

Configuration de la source de données

Le fichier /etc/odbc.ini (système) ou le fichier ~/.odbc.ini (utilisateur) doit contenir la déclaration du serveur utilisé

[sqlsrv_freetds]
Driver=FreeTDS
Description=SQL via FreeTds
Server=sqlserver.domain.tld
Port=1433

Vérification de la connexion en ligne de commande

$ isql sqlsrv_freetds user secret
SQL> SELECT @@version
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
SQLRowCount returns 1
1 rows fetched
SQL> quit

Connexion depuis PHP

$ php -r '
echo "+ Connection\n";
$pdo = new PDO("odbc:sqlsrv_freetds", "user", "secret");
echo "+ Query\n";
$query = $pdo->query("SELECT @@version");
if ($query) {
    echo "+ Result\n";
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($row) {
        print_r($row);
    }
}
'
+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution est souvent la plus simple car tous les paquets nécessaires sont libres et présents dans les distributions Linux.

2. Utilisation de PDO, mssql et FreeTDS

Composants nécessaires:

  • Bibliothèque freetds et extension mssql
  • PHP version 5 (extension dépréciée et supprimée de PHP 7)
  • Paquets RPM: freetds (EPEL), php-mssql

Connexion depuis PHP

$ php -r '
echo"+ Connection:\n";
$conn = mssql_connect("sqlserver.domain.tld", "user", "secret");
if ($conn) {
    echo"+ Query:\n";
    $query = mssql_query("SELECT @@version", $conn);
    if ($query) {
        echo"+ Result:\n";
        print_r($row = mssql_fetch_array($query, MSSQL_NUM));
    }
}
'
+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution reste simple car tous les paquets nécessaires sont également libres et présents dans les distributions Linux. Cependant elle utilise une extension dépréciée, et sans utiliser la couche d'abstraction PDO.

3. Utilisation de PDO, ODBC et des pilotes ODBC Microsoft®

Composants nécessaires:

Configuration du pilote ODBC

Le fichier /etc/odbcinst.ini doit contenir la déclaration du pilote (ajouté automatiquement lors de l'installation) :

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0
Threading=1

Configuration de la source de données

Le fichier /etc/odbc.ini (système) ou le fichier ~/.odbc.ini (utilisateur) doit contenir la déclaration du serveur utilisé

[sqlsrv_msodbc]
Driver=ODBC Driver 13 for SQL Server
Description=SQL via Microsoft Drivers
Server=sqlserver.domain.tld

Vérification de la connexion en ligne de commande

$ isql sqlsrv_msodbc user secret
SQL> SELECT @@version
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
SQLRowCount returns 1
1 rows fetched
SQL> quit

Connexion depuis PHP

$ php -r '
echo "+ Connection\n";
$pdo = new PDO("odbc:sqlsrv_msodbc", "user", "secret");
echo "+ Query\n";
$query = $pdo->query("SELECT @@version");
if ($query) {
    echo "+ Result\n";
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($row) {
        print_r($row);
    }
}
'
+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution très proche de la 1 nécessite l'installation des pilotes propriétaires.

4. Utilisation des pilotes Microsoft®

Composants nécessaires :

Vérification de la connexion en ligne de commande

$ sqlcmd -S sqlserver.domain.tld -U user -P secret -Q "SELECT @@version"
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
(1 rows affected)

Connexion depuis PHP

$ php -r '
echo"+ Connection:\n";
$conn = sqlsrv_connect("sqlserver.domain.tld", array("UID" => "user", "PWD" => "secret"));
if ($conn) {
    echo"+ Query: \n";
    $query = sqlsrv_query($conn, "SELECT @@version");
    if ($query) {
        echo"+ Result:\n";
        print_r($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_NUMERIC));
    }
}
'
+ Connection:
+ Query:
+ Result:
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution très proche de la 2  nécessite l'installation des pilotes propriétaires et n'utilise pas la couche d'abstraction PDO.

5. Utilisation de PDO et des pilotes Microsoft®

Composants nécessaires :

Connexion depuis PHP

$ php -r '
echo "+ Connection\n";
$pdo = new PDO("sqlsrv:Server=sqlserver.domain.tld", "user", "secret");
echo "+ Query\n";
$query = $pdo->query("SELECT @@version");
if ($query) {
    echo "+ Result\n";
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($row) {
        print_r($row);
    }
}
'

+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution très proche des 1 et 3 et nécessite aussi l'installation des pilotes propriétaires.

6. Conclusion

Il me semble qu'utiliser PDO reste préférable afin d'éviter l'adhérence à un serveur de base de données particulier.

L'utilisation de FreeTDS a rendu de nombreux services, et était la seule disponible avec PHP 5. L'utilisation des extensions sqlsrv ou pdo_sqlsrv me semble donc plus pertinente avec PHP 7, mais nécessite malheureusement l'utilisation des pilotes propriétaires (mais bon, si vous utilisez Microsoft SQL server, vous avez déjà quitté le monde du libre).

A vous de vous faire votre idée.

Microsoft SQL Server depuis PHP

Remi Collet

Voici un petit récapitulatif des différents moyens d'utiliser une base de données Microsoft SQL Server depuis PHP, sous Linux.

L'ensemble des tests ont été réalisés sous Fedora 23 mais devrait fonctionner avec RHEL ou CentOS version 7.

Extensions testées:

 

1. Utilisation de PDO, ODBC et FreeTDS

Composants nécessaires:

  • Bibliothèque freetds et extension pdo_odbc
  • PHP version 5 ou 7
  • Paquets RPM: freetds (EPEL), unixODBC, php-pdo, php-odbc

Configuration du pilote ODBC

Le fichier /etc/odbcinst.ini doit contenir la déclaration du pilote:

[FreeTDS]
Description=FreeTDS version 0.95
Driver=/usr/lib64/libtdsodbc.so.0.0.0

Configuration de la source de données

Le fichier /etc/odbc.ini (système) ou le fichier ~/.odbc.ini (utilisateur) doit contenir la déclaration du serveur utilisé

[sqlsrv_freetds]
Driver=FreeTDS
Description=SQL via FreeTds
Server=sqlserver.domain.tld
Port=1433

Vérification de la connexion en ligne de commande

$ isql sqlsrv_freetds user secret
SQL> SELECT @@version
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
SQLRowCount returns 1
1 rows fetched
SQL> quit

Connexion depuis PHP

$ php -r '
echo "+ Connection\n";
$pdo = new PDO("odbc:sqlsrv_freetds", "user", "secret");
echo "+ Query\n";
$query = $pdo->query("SELECT @@version");
if ($query) {
    echo "+ Result\n";
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($row) {
        print_r($row);
    }
}
'
+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution est souvent la plus simple car tous les paquets nécessaires sont libres et présents dans les distributions Linux.

2. Utilisation de PDO, mssql et FreeTDS

Composants nécessaires:

  • Bibliothèque freetds et extension mssql
  • PHP version 5 (extension dépréciée et supprimée de PHP 7)
  • Paquets RPM: freetds (EPEL), php-mssql

Connexion depuis PHP

$ php -r '
echo"+ Connection:\n";
$conn = mssql_connect("sqlserver.domain.tld", "user", "secret");
if ($conn) {
    echo"+ Query:\n";
    $query = mssql_query("SELECT @@version", $conn);
    if ($query) {
        echo"+ Result:\n";
        print_r($row = mssql_fetch_array($query, MSSQL_NUM));
    }
}
'
+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution reste simple car tous les paquets nécessaires sont également libres et présents dans les distributions Linux. Cependant elle utilise une extension dépréciée, et sans utiliser la couche d'abstraction PDO.

3. Utilisation de PDO, ODBC et des pilotes ODBC Microsoft®

Composants nécessaires:

Configuration du pilote ODBC

Le fichier /etc/odbcinst.ini doit contenir la déclaration du pilote (ajouté automatiquement lors de l'installation) :

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0
Threading=1

Configuration de la source de données

Le fichier /etc/odbc.ini (système) ou le fichier ~/.odbc.ini (utilisateur) doit contenir la déclaration du serveur utilisé

[sqlsrv_msodbc]
Driver=ODBC Driver 13 for SQL Server
Description=SQL via Microsoft Drivers
Server=sqlserver.domain.tld

Vérification de la connexion en ligne de commande

$ isql sqlsrv_msodbc user secret
SQL> SELECT @@version
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
SQLRowCount returns 1
1 rows fetched
SQL> quit

Connexion depuis PHP

$ php -r '
echo "+ Connection\n";
$pdo = new PDO("odbc:sqlsrv_msodbc", "user", "secret");
echo "+ Query\n";
$query = $pdo->query("SELECT @@version");
if ($query) {
    echo "+ Result\n";
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($row) {
        print_r($row);
    }
}
'
+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution très proche de la 1 nécessite l'installation des pilotes propriétaires.

4. Utilisation des pilotes Microsoft®

Composants nécessaires :

Vérification de la connexion en ligne de commande

$ sqlcmd -S sqlserver.domain.tld -U user -P secret -Q "SELECT @@version"
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
(1 rows affected)

Connexion depuis PHP

$ php -r '
echo"+ Connection:\n";
$conn = sqlsrv_connect("sqlserver.domain.tld", array("UID" => "user", "PWD" => "secret"));
if ($conn) {
    echo"+ Query: \n";
    $query = sqlsrv_query($conn, "SELECT @@version");
    if ($query) {
        echo"+ Result:\n";
        print_r($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_NUMERIC));
    }
}
'
+ Connection:
+ Query:
+ Result:
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution très proche de la 2  nécessite l'installation des pilotes propriétaires et n'utilise pas la couche d'abstraction PDO.

5. Utilisation de PDO et des pilotes Microsoft®

Composants nécessaires :

Connexion depuis PHP

$ php -r '
echo "+ Connection\n";
$pdo = new PDO("sqlsrv:Server=sqlserver.domain.tld", "user", "secret");
echo "+ Query\n";
$query = $pdo->query("SELECT @@version");
if ($query) {
    echo "+ Result\n";
    $row = $query->fetch(PDO::FETCH_NUM);
    if ($row) {
        print_r($row);
    }
}
'

+ Connection
+ Query
+ Result
Array
(
    [0] => Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
    Jun 28 2012 08:36:30
    Copyright (c) Microsoft Corporation
    Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
)

Cette solution très proche des 1 et 3 et nécessite aussi l'installation des pilotes propriétaires.

6. Conclusion

Il me semble qu'utiliser PDO reste préférable afin d'éviter l'adhérence à un serveur de base de données particulier.

L'utilisation de FreeTDS a rendu de nombreux services, et était la seule disponible avec PHP 5. L'utilisation des extensions sqlsrv ou pdo_sqlsrv me semble donc plus pertinente avec PHP 7, mais nécessite malheureusement l'utilisation des pilotes propriétaires (mais bon, si vous utilisez Microsoft SQL server, vous avez déjà quitté le monde du libre).

A vous de vous faire votre idée.

PHP 5.5 est mort

Remi Collet

Après PHP 5.4, et comme annoncé, PHP version 5.5.38 était la dernière version officielle de PHP 5.5

Ce qui signifie que depuis la publication des versions 5.6.25 et 7.0.10, quelques failles de sécurité publiques ne sont pas, et ne seront pas corrigées par le projet PHP.

Pour maintenir une installation sécurisée, la mise à jour vers une version maintenue est fortement conseillée :

  • PHP 5.6 est en mode maintenance active, et sera maitenu jusqu'en décembre 2018.
  • PHP 7.0 est en mode maintenance active, et sera maitenu jusqu'en décembre 2018.
  • PHP 7.1 est en phase de stabilisation (Release Candidate) et devrait être bientôt publiée en version stable.

Voir :

Cependant, compte tenu du nombre important de téléchargements par les utilisateurs de mon dépôt (~20%)  la version présente dans le dépôt remi pour Enterprise Linux (RHEL, CentOS...) et Fedora (Software Collections) a été conservée et intègre les derniers correctifs de sécurité.

Attention : il s'agit d'un action réalisée avec la meilleure volonté, en fonction de mon temps disponible, sans aucune garantie, afin de donner plus de temps aux utilisateurs pour migrer. Cela ne peut être que temporaire et la migration doit rester la priorité.

La version 5.5.38-2 intègre les correctifs pour les bugs rétro-portés depuis 5.6.25.

Paquets de base (php)

Software Collections (php55)

PHP 5.5 est mort

Remi Collet

Après PHP 5.4, et comme annoncé, PHP version 5.5.38 était la dernière version officielle de PHP 5.5

Ce qui signifie que depuis la publication des versions 5.6.25 et 7.0.10, quelques failles de sécurité publiques ne sont pas, et ne seront pas corrigées par le projet PHP.

Pour maintenir une installation sécurisée, la mise à jour vers une version maintenue est fortement conseillée :

  • PHP 5.6 est en mode maintenance active, et sera maitenu jusqu'en décembre 2018.
  • PHP 7.0 est en mode maintenance active, et sera maitenu jusqu'en décembre 2018.
  • PHP 7.1 est en phase de stabilisation (Release Candidate) et devrait être bientôt publiée en version stable.

Voir :

Cependant, compte tenu du nombre important de téléchargements par les utilisateurs de mon dépôt (~20%)  la version présente dans le dépôt remi pour Enterprise Linux (RHEL, CentOS...) et Fedora (Software Collections) a été conservée et intègre les derniers correctifs de sécurité.

Attention : il s'agit d'un action réalisée avec la meilleure volonté, en fonction de mon temps disponible, sans aucune garantie, afin de donner plus de temps aux utilisateurs pour migrer. Cela ne peut être que temporaire et la migration doit rester la priorité.

La version 5.5.38-2 intègre les correctifs pour les bugs rétro-portés depuis 5.6.25.

Paquets de base (php)

Software Collections (php55)

aspell vs hunspell en PHP

Remi Collet

Comparatif des extensions de correction orthographique en PHP.

Pspell (aspell)

L'extension pspell est souvent la première trouvée. Elle utilise la bibliothèque aspell et ses dictionnaires. Son utilisation est simple :

$dict2 = pspell_new('fr');
$word  = $_SERVER['argc'] > 1 ? $_SERVER['argv'][1] : 'France';
if (pspell_check($dict2, $word)) {
    printf("Aspell   checks '%s': OK\n", $word);
} else {
    printf("Aspell   suggests for '%s': %s\n", $word, implode(', ', pspell_suggest($dict2, $word)));
}

Malheureusement, cette bibliothèque n'est plus maintenue (depuis 2011) et si elle est encore présente dans RHEL et CentOS, ses dictionnaires ne sont plus disponible dans les dépôts, ce qui rend son utilisation quasi impossible.

Enchant (hunspell)

L'extension enchant est aussi disponible. Elle utilise la bibliothèque enchant et les dictionnaires hunspell. Son utilisation est tout aussi simple :

$broker = enchant_broker_init();
$dict1  = enchant_broker_request_dict($broker, 'fr_FR');
$word   = $_SERVER['argc'] > 1 ? $_SERVER['argv'][1] : 'France';
if (enchant_dict_check($dict1, $word)) {
    printf("Hunspell checks '%s': OK\n", $word);
} else {
    printf("Hunspell suggests for '%s': %s\n", $word, implode(', ', enchant_dict_suggest($dict1, $word)));
}

Les dictionnaires, notamment utilisés par LibreOffice ou Firefox sont complets et disponibles dans les dépôts officiels.

Conclusion

Pour faciliter l'utilisation d'anciennes applications qui utiliseraient encore pspell, et comme la question est régulièrement posée, j'ai ajouté l'ensemble des dictionnaires dans le dépôt remi-safe (aspell-* )

L'utilisation d'enchant me semble cependant préférable, et, si besoin, l'adaptation du code très simple.

Ma station de travail PHP

Remi Collet

Je vois régulièrement passer des questions sur l'utilisation d'anciennes versions de PHP sur Fedora (qui fournit la 5.6) ou de versions plus récentes sur RHEL / CentOS (qui fournit la 5.4).

Un développeur utilisant PHP a souvent besoin de tester son travail avec plusieurs versions. Donc voici un petit descriptif de la station de travail que j'utilise quotidiennement

Système d'exploitation : Fedora 23 Workstation x86_64 (mais les exemples fonctionnent aussi sur RHEL ou CentOS 7)

Dépôts tiers : rpmfusion (pour écouter de la musique en travaillant) et évidement remi

# wget http://rpms.remirepo.net/fedora/remi-release-23.rpm
# dnf install remi-release-23.rpm
# dnf config-manager --set-enabled remi

 

Installation des versions de PHP

J'utilise les Software Collections qui permettent d'installer plusieurs versions en parallèle sans toucher au système de base, les versions de PHP 5.4, 5.5, 5.6 et 7.0 sont disponibles dans mon dépôt, donc:

# yum install  php54 php54-fpm php54-php-mbstring php54-php-mysqlnd ...
# yum install  php55 php55-fpm php55-php-mbstring php55-php-mysqlnd ...
# yum install  php56 php56-fpm php56-php-mbstring php56-php-mysqlnd ...
# yum install  php70 php70-fpm php70-php-mbstring php70-php-mysqlnd ...

 

Configuration de l'environnement Web

PHP FastCGI Process Manager

Je n'utilise pas mod_php qui n'autorise qu'une seule version du module, mais FPM.

Je ne suis pas en production mais sur une station de développement, donc afin de limiter la charge, je modifie la configuration de chaque FPM pour utiliser le mode "ondemand". J'utilise aussi un port réseau différent pour chaque version

Example, pour PHP 7.0, dans le fichier /etc/opt/remi/php70/php-fpm.d/www.conf

listen = 127.0.0.1:9070
pm = ondemand

Je configure le port pour SELinux

# semanage port -a -t http_port_t -p tcp 9070

Et ensuite j'active le service

# systemctl start php70-php-fpm
# systemctl enable php70-php-fpm

Et j'applique pour chaque version.

Apache

Je crée 1 hôte virtuel pour chaque version de PHP

Dans le fichier /etc/hosts, déclaration des alias IP

192.168.0.15    myip php70scl php56scl php55scl php54scl

Création d'un fichier de configuration, avec les alias vers les dépôts git dans lesquels je travaille, ainsi que les hôtes virtuels: /etc/httpd/conf.d/remi.conf

    Alias /glpi090    "/work/GIT/GLPI/090-bugfixes"
    Alias /glpimaster "/work/GIT/GLPI/master"
    Alias /galette    "/work/GIT/galette/galette"

    <Directory "/work/GIT">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <VirtualHost *:80>
        ServerName php70scl
        <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9070"
        </FilesMatch>
    </VirtualHost>

    <VirtualHost *:80>
        ServerName php56scl
        <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9056"
        </FilesMatch>
    </VirtualHost>

    <VirtualHost *:80>
        ServerName php55scl
        <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9055"
        </FilesMatch>
    </VirtualHost>

    <VirtualHost *:80>
        ServerName php54scl
        <FilesMatch \.php$>
            SetHandler "proxy:fcgi://127.0.0.1:9054"
        </FilesMatch>
    </VirtualHost>

Et j'utilise donc les adresses http://php70scl/, http://php56scl/, http://php55scl/ et http://php54scl/ dans mon navigateur.

 

Ligne de commande

Pour passer d'une version à l'autre, je choisi simplement la version voulue en utilisant les modules d'environnements

$ module load php70
$ ...
$ module unload php70

Développement sur du code PHP

J'utilise évidement les outils disponibles dans le dépôt, et qui sont prévus pour fonctionner avec le PHP disponible.

# yum install atoum composer phpunit phpcompatinfo phpcs apigen ...

Par exemple :

$ git clone https://github.com/vendor/project.git
$ cd project
$ composer install
$ phpunit --verbose
$ ...

Développement des extensions PHP

Il faut évidement installer les outils de développement

# yum install php70-php-devel php56-php-devel php55-php-devel php54-php-devel

Par exemple :

$ cd /work/GIT/uopz
$ module load php70
$ phpize
$ ./configure
$ make
$ make test

 

Conclusion

Cette configuration, qui me parait simple, me semble idéale pour un développeur qui a besoin de plusieurs versions de PHP mais veut se concentrer sur son travail, et bénéficier de l'ensemble des paquets disponibles dans une distribution assez complète, avec le bénéfice des Software Collections disponibles dans mon dépôt.

J'aurais aussi pu utiliser Docker... mais cette solution me semble bien plus simple, enfin j'utilise quand même Docker pour PHP 5.3.

Installer PHP 7 sur CentOS, RHEL ou Fedora

Remi Collet

Voici un guide rapide pour mettre à jour le PHP fournit par Fedora, RHEL ou CentOS par la dernière version 7.0.

 

Configuration des dépôts:

Sur Fedora, les dépôts standards sont suffisant, sur Enterprise Linux (RHEL, CentOS) il est aussi nécessaire de configurer le dépôt Extra Packages for Enterprise Linux (EPEL), et sur RHEL d'activer le canal optional.

Fedora 23

wget http://rpms.remirepo.net/fedora/remi-release-23.rpm
dnf install remi-release-23.rpm

RHEL version 7.2

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

RHEL version 6.7

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

CentOS version 7.2

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

CentOS version 6.7

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

 

Activation du dépôt remi-php70

Les paquets sont dans les dépôts remi-safe (activé par défaut) et remi-php70 qui n'est pas activé par défaut (choix de l'administrateur en fonction de la version de PHP souhaitée).

RHEL et CentOS

yum-config-manager --enable remi-php70

Fedora

dnf config-manager --enable remi-php70

 

Mise à jour de PHP

Par choix, les paquets ont le même nom que les paquets fournit par défaut avec le système, une simple mise à jour est donc suffisante :

yum update

Et c'est tout :)

$ php -v
PHP 7.0.3 (cli) (built: Feb  3 2016 10:09:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.4.0RC4, Copyright (c) 2002-2016, by Derick Rethans

 

Problèmes connus

La mise à jour peut échouer lorsque certaines extensions présentes ne sont pas encore compatibles avec PHP 7.

Voir la liste des compatibilité : PECL extensions RPM status

Si elles ne sont pas indispensables, vous pouvez les désinstaller avant la mise à  jour, sinon, il faudra patienter.

Attention : quelques extensions sont encore en phase de développement (memcache, redis...), mais il m'a semblait utile de les fournir afin de permettre la mise à jour au plus grand nombre, et aussi permettre leur test et des retours vers les auteurs.

 

Plus d'informations

Si vous souhaitez une installation en parallèle de PHP 5, cela est possible en utilisant les paquets préfixés php70. Voir le billet PHP 7.0 en Software Collection.

Vous pouvez aussi utiliser le nouvel assistant de configuration.

Les paquets présents dans le dépôt seront utilisés comme source pour Fedora 25 (la proposition de changement n'a pas encore était enregistrée).

En fournissant une pile complète, environ 150 extensions disponibles, et avec 100 000 téléchargements par jour, le dépôt remi est devenu en 10 ans une référence pour les utilisateurs de PHP sur les distributions RPM, maintenu par un contributeur actif aux différents projets (Fedora, PHP, PECL...).

PHP 5.4 est mort

Remi Collet

Comme annoncé, PHP version 5.4.45 est la dernière version officielle de PHP 5.4

Ce qui signifie que depuis la publication des versions 5.5.30 et 5.6.14, quelques failles de sécurité publiques ne sont pas, et ne seront pas corrigées par le projet PHP.

Pour maintenir une installation sécurisée, la mise à jour vers une version maintenue est fortement conseillée :

  • PHP 5.5 est en mode maintenance de sécurité (aucun autre bug ne sera corrigé) jusqu'à juillet 2016.
  • PHP 5.6 est en mode maintenance active, et sera maitenu jusqu'à août 2017.
  • PHP 7.0 est en phase de stabilisation (Release Candidate) et devrait être bientôt publiée en version stable.

Voir :

Cependant, compte tenu du nombre important de téléchargements par les utilisateurs de mon dépôt (~47%)  la version présente dans le dépôt remi pour Enterprise Linux (RHEL, CentOS...) et Fedora (Software Collections) a été conservée et intègre les derniers correctifs de sécurité.

Attention : il s'agit d'un action réalisée avec la meilleure volonté, en fonction de mon temps disponible, sans aucune garantie, afin de donner plus de temps aux utilisateurs pour migrer. Cela ne peut être que temporaire et la migration doit rester la priorité.

Apache HTTP Server et répartiteur de charge vers PHP FPM

Remi Collet

L'un des avantages de FPM et de séparer et d'isoler proprement le frontal web du serveur d'application.

Voici un exemple de configuration utilisant Apache en répartiteur de charge entre plusieurs instances FPM.

 

La configuration de base est vraiment (trop) simple

    # Creation du repartiteur et de ces membres
    <Proxy balancer://phpfpmlb/>
        BalancerMember fcgi://10.0.0.12:9000
        BalancerMember fcgi://10.0.0.34:9000
    </Proxy>
    # Redirection de l'execution PHP vers le repartiteur
    <FilesMatch \.php$>
        SetHandler "proxy:balancer://phpfpmlb/"
    </FilesMatch>

Pour aller plus loin, voir la documentation :

 

À propos de libmcrypt et php-mcrypt

Remi Collet

Je ne compte plus les fois où j'ai du expliquer pourquoi utiliser cette bibliothèque ou cette extension est une grave erreur. Il est donc temps d'en faire un article.

 

libmcrypt est un projet mort, non maintenu depuis plus ~8 ans, la dernière version 2.5.8 a été publiée en février 2007 !... et malgré les nombreux tickets ouverts, aucune activité.

La cryptographie est un élément essentiel de la gestion de la sécurité. Si on regarde en arrière, les failles découvertes et corrigées dans divers logiciels, la nécessite d'augmenter les standards de sécurités et d'abandonner les vieux algorithmes, comment peut-on imaginer utiliser une vieillerie de plus de 8 ans ?

Il existe plusieurs bibliothèques alternatives bien maintenues :

Et, pour PHP, plusieurs autres solutions sont disponibles:

Une RFC a été proposée pour retirer l'extension mcrypt de PHP 7, mais, honte à nous, elle n'a pas été acceptée (15-18), elle restera donc disponible.

L'oeuf ou la poule ? L'extension est utilisée car elle est disponible, et elle est conservée parce qu'elle est utilisée.

Nous devons vraiment communiquer sur ce problème, et c'est ce que nous faisons déjà depuis longtemps chez Fedora, la plupart des projets comprennent le problème et acceptent de le corriger en basculant sur une implémentation plus sécurisées, quelques exemples :

Certain framework continuent de proposer une interface pour utiliser mcrypt (ex Zend\Crypt\Symmetric\MCrypt, ticket #3), encore une fois, c'est l'oeuf ou la poule,les applications utilisent cette fonction parce qu'elle existe.

Ceci explique pourquoi certaines distributions linux professionnelles, comme RHEL, ne fournissent ni libmcrypt ni php-mcrypt. On devrait sans doute en discuter avec les autres distributions Linux (Debian, Fedora...) pour arrêter de fournir cette bibliothèque.

Utilisez vous mcrypt ? Comprenez vous que vous DEVEZ basculer dès que possible ? ou, au moins, rapporter ce problème au fournisseur des logiciels que vous utilisez.

 

Red Hat fournit PHP 5.6 pour RHEL (et CentOS)

Remi Collet

Annonce : Red Hat Software Collections 2 – now generally available

Et pour CentOS : Software Collections 2.0 available

Que les accrocs de la stabilité se rassurent, PHP 5.3.3 reste la version standard fournit avec RHEL-6 et PHP 5.4.16 celle pour RHEL-7.

Que les utilisateurs de RHSCL 1.x se rassurent, les collections php54 et php55 sont toujours là. Elles ont même été mise à jour en 5.4.40 et 5.5.21.

La nouvelle collection rh-php56 fournit la version 5.6.5.

Nous disposons donc désormais d'un moyen officiel et supporté d'installer PHP version 5.4 ou 5.5 ou 5.6, en parallèle  de la version système, sans affecter les composants standards. L'annonce prévoit un cycle de vie de 3 ans.

Pour plus d'informations sur l'installation et l'utilisation des SCL, vous pouvez consulter les autres billets déjà publiés à ce sujet :

emblem-notice-24.png Pour ceux qui souhaitent plus d'extensions, je maintiens 3 dépôts sur softwarecollections.org avec toutes celles qui sont déjà prêtes (d'autres devraient suivre).

En dehors de PHP, RHSCL 2.0 senrichit de plusieurs morceaux de choix, je retiendrais MariaDB 10 et PostgreSQL 9.4.

Il me semble que c'est une excellent nouvelle qui devrait aider à l'adoption des versions récentes de PHP dans le monde de l'entreprise. Quelle autre distribution "entreprise" en fait autant ?

emblem-question-24.png Si vous avez des questions, j'ai même ouvert un nouveau Forum dédié : About PHP SCL.

PHP 7.0 en Software Collection

Remi Collet

Les RPM de la prochaine version majeure de PHP 7.0, sont disponibles dans le dépôt remi-test pour Fedora 20, 21, 22 et Enterprise Linux 6, 7 (RHEL, CentOS, ...) dans une nouvelle Software Collection (php70) permettant son installation en parallèle de la version système.

Comme je crois fortement au potentiel des SCL pour fournir un moyen simple d'installer plusieurs versions en parallèle, et qu'il me semble utile d'offrir cette possibilité pour PHP 5.6 afin de permettre aux développeurs de tester leur application, aux sysadmin de préparer une migration, ou simplement d'utiliser cette version pour une application spécifique, j'ai décidé de créer cette nouvelle SCL.

Installation :

yum --enablerepo=remi,remi-test install php70

emblem-important-2-24.pngA noter :

  • la SCL est totalement indépendante du système, et ne le modifie pas
  • cette SCL est dans le dépôt remi-test
  • l'installation est dans le dossier /opt/remi
  • le module pour Apache, php70-php, est disponible, mais évidement un seul mod_php peut être utiliser (il faudrait donc désactiver ou désinstaller tout autre module afin de l'utiliser, celui fournit par le paquet "php" reste prioritaire)
  • le service FPM (php70-php-fpm) est disponible, il écoute par défaut sur le port 9000, il faudrait donc adapter la configuration si vous souhaitez utiliser plusieurs services FPM en même temps.
  • la commande php70 permet d'accéder simplement à cette version, cependant l'utilisation de la commande scl reste la meilleure méthode (ou module)
  • Il s'agit pour l'instant de la version 7.0.0-dev, mais les versions alpha/beta devrait être rapidement disponibles.
  • les extensions PECL seront aussi progressivement disponibles dans la collection.
  • seulement pour  x86_64, pas de plan pour les autres architectures.

emblem-notice-24.pngLire aussi les autres articles concernant les SCL.

$ scl enable php70 'php -v'
PHP 7.0.0-dev (cli) (built: Mar 25 2015 14:40:01) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies

Comme d'habitude, vos retours sont les bienvenus, un forum dédié aux SCL est ouvert.

PHP 7.0 en Software Collection

Remi Collet

Les RPM de la prochaine version majeure de PHP 7.0, sont disponibles dans le dépôt remi-test pour Fedora 20, 21, 22 et Enterprise Linux 6, 7 (RHEL, CentOS, ...) dans une nouvelle Software Collection (php70) permettant son installation en parallèle de la version système.

Comme je crois fortement au potentiel des SCL pour fournir un moyen simple d'installer plusieurs versions en parallèle, et qu'il me semble utile d'offrir cette possibilité pour PHP 7.0 afin de permettre aux développeurs de tester leur application, aux sysadmin de préparer une migration, ou simplement d'utiliser cette version pour une application spécifique, j'ai décidé de créer cette nouvelle SCL.

Installation :

yum --enablerepo=remi,remi-test install php70

emblem-important-2-24.pngA noter :

  • la SCL est totalement indépendante du système, et ne le modifie pas
  • cette SCL est dans le dépôt remi-test
  • l'installation est dans le dossier /opt/remi
  • le module pour Apache, php70-php, est disponible, mais évidement un seul mod_php peut être utiliser (il faudrait donc désactiver ou désinstaller tout autre module afin de l'utiliser, celui fournit par le paquet "php" reste prioritaire)
  • le service FPM (php70-php-fpm) est disponible, il écoute par défaut sur le port 9000, il faudrait donc adapter la configuration si vous souhaitez utiliser plusieurs services FPM en même temps.
  • la commande php70 permet d'accéder simplement à cette version, cependant l'utilisation de la commande scl reste la meilleure méthode (ou module)
  • Il s'agit pour l'instant de la version 7.0.0-dev, mais les versions alpha/beta devrait être rapidement disponibles.
  • les extensions PECL seront aussi progressivement disponibles dans la collection.
  • seulement pour  x86_64, pas de plan pour les autres architectures.

emblem-notice-24.pngLire aussi les autres articles concernant les SCL.

$ scl enable php70 'php -v'
PHP 7.0.0-dev (cli) (built: Mar 25 2015 14:40:01) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies

Comme d'habitude, vos retours sont les bienvenus, un forum dédié aux SCL est ouvert.

PHP-FPM dans Docker

Remi Collet

Cas d'utilisation : faire tourner php 5.3.3 sur une machine de développement en Fedora 20 / 21, pour déploiement en production sur RHEL-6 (et aucune SCL de php 5.3 n'est actuellement disponible).

Cet exemple peut facilement d'adapter pour toutes les versions disponibles sous forme de RPM (5.3.3 dans RHEL-6, 5.4.16 dans RHEL-7, 5.4.16 et 5.5.6 dans RHSCL 1.2 ou en utilisant un dépôt tiers).

J'utilise le Dockerfile suivant :

FROM centos:6
RUN yum install -y php-fpm php-mbstring php-mysql php-gd && yum clean all
RUN sed -e 's/127.0.0.1:9000/9000/' \
-e '/allowed_clients/d' \
-e '/catch_workers_output/s/^;//' \
-e '/error_log/d' \
-i /etc/php-fpm.d/www.conf
RUN mkdir -p /var/www/html
EXPOSE 9000
ENTRYPOINT /usr/sbin/php-fpm --nodaemonize

Installation :

  • yum install permet de récupérer les paquets binaires disponibles, la liste des extensions est à adapter aux besoins
Dossier des scripts :
  • le dossier /var/www/html utilisé dans l'exemple est à adapté en fonction de l'emplacement des applications

Description des changements de la configuration du pool fpm :

  • listen = 9000 pour écouter sur toutes les interfaces
  • suppression de listen.allowed_clients pour autoriser les connexions depuis l'extérieur du container
  • suppression de l'error_log pour utiliser la journalisation globale
  • activation de catch_workers_ouput pour que le server principal récupère et trace les erreurs des pools

Création du container :

docker build -f fpm53 .

Lancement du container :

docker run -v /var/www/html:/var/www/html -p 127.0.0.1:9003:9000 fpm53

A noter : mappage du dossier /var/www/html et du port 9000 (du container) sur le port 9003 (de l'hote)

Conclusion :

Même si je suis un fervent adepte des Software Collections, en leur absence, on dispose très simplement d'une version opérationnelle de PHP 5.3.3 sur une distribution récente (testé sous Fedora 20) en bénéficiant de l'utilisation des dépôts officiels.

PHP-FPM dans Docker

Remi Collet

Cas d'utilisation : faire tourner php 5.3.3 sur une machine de développement en Fedora 20 / 21, pour déploiement en production sur RHEL-6 (et aucune SCL de php 5.3 n'est actuellement disponible).

Cet exemple peut facilement s'adapter pour toutes les versions disponibles sous forme de RPM (5.3.3 dans RHEL-6, 5.4.16 dans RHEL-7, 5.4.16 et 5.5.6 dans RHSCL 1.2 ou en utilisant un dépôt tiers).

J'utilise le Dockerfile suivant :

FROM centos:6
RUN yum -y update && yum clean all
RUN yum -y install php-fpm php-mbstring php-mysql php-gd && yum clean all
RUN sed -e 's/127.0.0.1:9000/9000/' \
-e '/allowed_clients/d' \
-e '/catch_workers_output/s/^;//' \
-e '/error_log/d' \
-i /etc/php-fpm.d/www.conf
RUN mkdir -p /var/www/html
EXPOSE 9000
ENTRYPOINT /usr/sbin/php-fpm --nodaemonize

Installation :

  • yum install permet de récupérer les paquets binaires disponibles, la liste des extensions est à adapter aux besoins
Dossier des scripts :
  • le dossier /var/www/html utilisé dans l'exemple est à adapté en fonction de l'emplacement des applications

Description des changements de la configuration du pool fpm :

  • listen = 9000 pour écouter sur toutes les interfaces
  • suppression de listen.allowed_clients pour autoriser les connexions depuis l'extérieur du container
  • suppression de l'error_log pour utiliser la journalisation globale
  • activation de catch_workers_ouput pour que le server principal récupère et trace les erreurs des pools

Création du container :

docker build -t fpm53 .

Lancement du container :

docker run -v /var/www/html:/var/www/html -p 127.0.0.1:9003:9000 fpm53

A noter : mappage du dossier /var/www/html et du port 9000 (du container) sur le port 9003 (de l'hote)

Conclusion :

Même si je suis un fervent adepte des Software Collections, en leur absence, on dispose très simplement d'une version opérationnelle de PHP 5.3.3 sur une distribution récente (testé sous Fedora 20) en bénéficiant de l'utilisation des dépôts officiels.

PHP 5.5 en Software Collection

Remi Collet

Les RPM de PHP 5.5, sont disponibles dans le dépôt remi pour Fedora 21 et Enterprise Linux 6, 7 (RHEL, CentOS, ...) dans une nouvelle Software Collection (php55) permettant son installation en parallèle de la version système.

Comme je crois fortement au potentiel des SCL pour fournir un moyen simple d'installer plusieurs versions en parallèle, et qu'il me semble utile d'offrir cette possibilité pour PHP 5.5 afin de permettre aux développeurs de tester leur application, en particulier de la compatibilité avec cette version courante, aux sysadmin de préparer une migration, ou simplement d'utiliser cette version pour une application spécifique, j'ai décidé de créer cette nouvelle SCL.

Installation :

yum --enablerepo=remi install php55

emblem-important-2-24.pngA noter :

  • comme la SCL est totalement indépendante du système, et ne le modifie pas, cette SCL est dans le dépôt remi.
  • l'installation est dans le dossier /opt/remi
  • le module pour Apache, php55-php, est disponible, mais évidement un seul mod_php peut être utiliser (il faudrait donc désactiver ou désinstaller tout autre module afin de l'utiliser, celui fournit par le paquet "php" reste prioritaire)
  • le service FPM (php55-php-fpm) est disponible, il écoute par défaut sur le port 9000, il faudrait donc adapter la configuration si vous souhaitez utiliser plusieurs services FPM en même temps.
  • la commande php55 permet d'accéder simplement à cette version, cependant l'utilisation de la commande scl reste la meilleure méthode.
  • les extensions PECL sont aussi disponibles dans la collection.
  • seulement pour  x86_64, pas de plan pour les autres architectures.
  • cette SCL est incompatible avec celle disponible dans RHSCL 1.1 (il faut donc choisir votre fournisseur, et prendre tous les paquets au même endroit).

emblem-notice-24.pngLire aussi les autres articles concernant les SCL.

$ scl enable php54 'php -v'
PHP 5.5.16 (cli) (built: Sep 3 2014 08:55:14)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

Les utilisateurs de Fedora 21 peuvent donc utiliser simultanément les 3 versions maintenues de PHP : 5.4 (SCL), 5.5 et 5.6 (système).

Comme d'habitude, vos retours sont les bienvenus, un forum dédié aux SCL est ouvert.

PHP 5.4 en Software Collection

Remi Collet

Les RPM de PHP 5.4, sont disponibles dans le dépôt remi pour Fedora 19, 20, 21 et Enterprise Linux 6, 7 (RHEL, CentOS, ...) dans une nouvelle Software Collection (php54) permettant son installation en parallèle de la version système.

Comme je crois fortement au potentiel des SCL pour fournir un moyen simple d'installer plusieurs versions en parallèle, et qu'il me semble utile d'offrir cette possibilité pour PHP 5.4 afin de permettre aux développeurs de tester leur application, en particulier de la compatibilité avec cette version ancienne mais courante sur les systèmes "Entreprise", aux sysadmin de préparer une migration, ou simplement d'utiliser cette version pour une application spécifique, j'ai décidé de créer cette nouvelle SCL.

Installation :

yum --enablerepo=remi install php54

emblem-important-2-24.pngA noter :

  • comme la SCL est totalement indépendante du système, et ne le modifie pas, cette SCL est dans le dépôt remi.
  • l'installation est dans le dossier /opt/remi
  • le module pour Apache, php54-php, est disponible, mais évidement un seul mod_php peut être utiliser (il faudrait donc désactiver ou désinstaller tout autre module afin de l'utiliser, celui fournit par le paquet "php" reste prioritaire)
  • le service FPM (php54-php-fpm) est disponible, il écoute par défaut sur le port 9000, il faudrait donc adapter la configuration si vous souhaitez utiliser plusieurs services FPM en même temps.
  • la commande php54 permet d'accéder simplement à cette version, cependant l'utilisation de la commande scl reste la meilleure méthode.
  • les extensions PECL sont aussi disponibles dans la collection.
  • seulement pour  x86_64, pas de plan pour les autres architectures.
  • cette SCL est incompatible avec celle disponible dans RHSCL 1.1 (il faut donc choisir votre fournisseur, et prendre tous les paquets au même endroit).

emblem-notice-24.pngLire aussi les autres articles concernant les SCL.

$ scl enable php54 'php -v'
PHP 5.4.32 (cli) (built: Aug 31 2014 20:02:48)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

Les utilisateurs de Fedora 19/20 peuvent donc utiliser simultanément les 3 versions maintenues de PHP : 5.4, 5.5 (système) et 5.6 (SCL).

Comme d'habitude, vos retours sont les bienvenus, un forum dédié aux SCL est ouvert.