Guide complet sur la fonction mysqli_thread_safe en PHP
Lors de l'utilisation de bases de données MySQL en PHP, l'extension mysqli propose une variété de fonctions pour effectuer des opérations sur la base de données. Une question fréquente que se posent les développeurs est de savoir comment vérifier si l'extension mysqli est thread-safe.
Dans ce guide, nous clarifierons le fonctionnement de la sécurité des threads avec MySQLi, expliquerons pourquoi il s'agit d'une configuration de compilation plutôt que d'une fonction d'exécution, et vous montrerons comment la vérifier dans votre environnement.
Qu'est-ce que la fonction mysqli_thread_safe ?
La fonction mysqli_thread_safe() n'existe pas en PHP. La sécurité des threads pour l'extension mysqli est déterminée lors de la compilation, et non lors de l'exécution. Il n'existe aucune fonction PHP intégrée pour vérifier cet état de manière dynamique.
À la place, la sécurité des threads dépend du fait que PHP ait été compilé avec le module Zend Thread Safety (ZTS) activé. Lorsque ZTS est actif, PHP peut gérer en toute sécurité plusieurs threads au sein d'un même processus, ce qui est essentiel pour les serveurs web multi-threadés (comme Apache avec le MPM worker ou event) ou les scripts CLI exécutant des tâches concurrentes. Si ZTS est désactivé, PHP suppose un environnement mono-thread, et l'utilisation de mysqli dans un contexte multi-threadé peut provoquer des conditions de concurrence ou des plantages.
Fonctionnalités de la fonction mysqli_thread_safe
Puisque la sécurité des threads est une configuration de compilation plutôt qu'une fonctionnalité d'exécution, les "capacités" de MySQLi dans les environnements multi-threadés dépendent entièrement de la manière dont PHP a été compilé :
1. Configuration au moment de la compilation
La sécurité des threads est définie lors de la construction de PHP. Vous pouvez la vérifier en consultant la configuration de compilation de PHP ou en exécutant php -i | grep "Thread Safety". Si elle retourne enabled, ZTS est actif et mysqli fonctionnera en toute sécurité dans ce contexte.
2. Gestion des environnements multi-threadés
Dans les configurations multi-threadées, chaque thread nécessite sa propre connexion à la base de données. Partager une seule instance mysqli entre plusieurs threads est dangereux et entraînera un comportement imprévisible. Créez toujours une nouvelle connexion par thread.
Comment utiliser la fonction mysqli_thread_safe
Étant donné que la sécurité des threads ne peut pas être vérifiée avec une fonction d'exécution, utilisez l'une des méthodes suivantes pour vérifier votre environnement :
1. Utilisation de phpinfo()
Créez un fichier PHP simple et exécutez-le dans votre navigateur ou en ligne de commande :
<?php
phpinfo();Recherchez la section Zend Engine. Si Thread Safety est indiqué comme enabled, votre installation PHP prend en charge l'exécution multi-threadée, et mysqli fonctionnera en toute sécurité dans ce contexte.
2. Vérification en ligne de commande
Vous pouvez également vérifier directement depuis le terminal :
php -i | grep "Thread Safety"Cela affichera Thread Safety => enabled ou Thread Safety => disabled.
Conclusion
La sécurité des threads de l'extension mysqli est un paramètre de compilation contrôlé par le module Zend Thread Safety (ZTS), et non une fonction d'exécution. En vérifiant la configuration de compilation de votre PHP à l'aide de phpinfo() ou d'outils en ligne de commande, vous pouvez vous assurer que votre environnement est correctement configuré pour les opérations de base de données multi-threadées. Créez toujours des connexions mysqli distinctes par thread pour maintenir l'intégrité des données et éviter les conditions de concurrence.
Practice
What does it mean for PHP to be thread-safe?