Un guide complet sur la fonction mysqli_set_local_infile_handler en PHP
L'extension mysqli propose une variété de fonctions pour interagir avec les bases de données MySQL. L'une d'elles est mysqli_set_local_infile_handler, qui vous permet de définir une fonction de rappel (callback) pour gérer les requêtes LOAD DATA LOCAL INFILE. Disponible depuis PHP 5.3, cette fonction nécessite l'extension mysqli.
Ce guide explique le fonctionnement de cette fonction et comment l'utiliser efficacement dans vos projets PHP.
Qu'est-ce que la fonction mysqli_set_local_infile_handler ?
mysqli_set_local_infile_handler est une fonction PHP intégrée qui spécifie un callback personnalisé pour gérer les requêtes LOAD DATA LOCAL INFILE. Elle prend deux arguments :
- L'objet de connexion MySQL (généralement retourné par
mysqli_connectounew mysqli). - La fonction de rappel pour traiter la requête.
Voici la syntaxe de la fonction mysqli_set_local_infile_handler :
La syntaxe PHP de la fonction mysqli_set_local_infile_handler
mysqli_set_local_infile_handler($connection, callable $callback);Fonctionnalités de la fonction mysqli_set_local_infile_handler
La fonction mysqli_set_local_infile_handler offre un moyen fiable d'intercepter et de traiter les requêtes LOAD DATA LOCAL INFILE en PHP. Parmi ses principales fonctionnalités, on trouve :
1. Traitement personnalisé des données
La fonctionnalité principale consiste à vous permettre de spécifier une fonction personnalisée pour gérer les requêtes de chargement de données depuis un fichier local vers une table MySQL. Cela est utile si vous souhaitez effectuer une validation personnalisée, de la journalisation ou une transformation des données avant leur chargement dans la table.
2. Compatibilité avec les connexions existantes
Vous pouvez attacher le gestionnaire à n'importe quel objet de connexion mysqli actif. Si vous disposez d'une connexion existante, vous pouvez utiliser le même objet pour définir un callback personnalisé afin de gérer les requêtes LOCAL INFILE.
Comment utiliser la fonction mysqli_set_local_infile_handler
Voici quelques étapes pour utiliser la fonction mysqli_set_local_infile_handler dans vos projets PHP :
1. Connexion au serveur MySQL
Avant d'utiliser la fonction mysqli_set_local_infile_handler, vous devez établir une connexion au serveur MySQL. Pour les projets PHP modernes, le constructeur orienté objet est recommandé :
Comment utiliser la fonction mysqli_set_local_infile_handler ?
<?php
$host = 'localhost';
$user = 'username';
$password = 'password';
$database = 'mydatabase';
$connection = new mysqli($host, $user, $password, $database);
if ($connection->connect_error) {
die('Connection failed: ' . $connection->connect_error);
}2. Définition de la fonction de rappel
Une fois la connexion au serveur MySQL établie, vous pouvez utiliser la fonction mysqli_set_local_infile_handler pour définir une fonction de rappel afin de gérer les requêtes LOCAL INFILE.
Important : Pour que ce gestionnaire soit déclenché, le serveur MySQL doit avoir la variable système
local_infileactivée (SET GLOBAL local_infile = 1;). De plus,LOAD DATA LOCAL INFILEprésente des risques de sécurité (par exemple, accès non autorisé aux fichiers), il ne doit donc être utilisé que lorsque cela est nécessaire et correctement sécurisé.
Voici un exemple de code :
Exemple de la fonction PHP mysqli_set_local_infile_handler
<?php
function custom_local_infile_handler($link, $file) {
// Open the file and return a resource handle
$fp = fopen($file, 'r');
if (!$fp) {
return false;
}
return $fp; // Must return a valid file resource handle
}
if (mysqli_set_local_infile_handler($connection, 'custom_local_infile_handler')) {
echo "Callback function set successfully.";
} else {
echo "Error setting callback function: " . mysqli_error($connection);
}Ce code définit une fonction de rappel personnalisée appelée custom_local_infile_handler pour gérer les requêtes LOCAL INFILE pour la connexion MySQL. Le callback doit retourner un descripteur de fichier valide en cas de succès, ou false en cas d'échec.
3. Déclenchement du gestionnaire
Le callback est automatiquement invoqué lorsque vous exécutez une instruction LOAD DATA LOCAL INFILE via mysqli_query :
Déclenchement du gestionnaire avec mysqli_query
<?php
$sql = "LOAD DATA LOCAL INFILE '/path/to/your/data.csv' INTO TABLE my_table FIELDS TERMINATED BY ','";
$result = mysqli_query($connection, $sql);
if ($result) {
echo "Data loaded successfully.";
} else {
echo "Error loading data: " . mysqli_error($connection);
}Conclusion
En résumé, mysqli_set_local_infile_handler vous donne un contrôle total sur la façon dont les données de fichiers locaux sont ingérées dans MySQL. En implémentant un callback personnalisé, vous pouvez gérer l'accès aux fichiers en toute sécurité, appliquer des transformations de données et maintenir des journaux détaillés, garantissant ainsi que les importations en masse respectent les règles de sécurité et métier de votre application.
Pratique
Quel est l'objectif principal de la fonction set_local_infile_handler en PHP ?