Dans le développement de PHP, la gestion rationnelle des ressources est un lien clé pour assurer la stabilité et les performances du programme. Surtout lorsque l'exécution du script est terminée, garantissant que les connexions de base de données, les poignées de fichiers et autres ressources sont correctement fermées, ce qui peut éviter les fuites de mémoire et d'autres problèmes potentiels. Cet article se développera autour de la fonction intégrée PHP Register_shutdown_function , présentant comment effectuer automatiquement les opérations de version de ressources à la fin du script.
registre_shutdown_function est une fonction fournie par PHP pour enregistrer une fonction de rappel qui est automatiquement appelée à la fin de l'exécution du script. Que le script se termine normalement ou se termine en raison d'une erreur, la fonction peut être exécutée, ce qui fournit un point de crochet fiable pour la version des ressources.
<?php
// Enregistrez une fonction de rappel exécutée lors de la fermeture
register_shutdown_function(function() {
echo "Fin de l'exécution du script,Commencez à libérer des ressources。\n";
});
?>
De nombreuses ressources telles que les connexions de base de données, les poignées de fichiers, les connexions de cache, etc. S'ils ne sont pas fermés dans le temps, cela peut provoquer:
L'augmentation de l'utilisation des ressources du serveur affecte les performances;
Les scripts de longue date peuvent connaître des fuites de mémoire;
Des situations exceptionnelles telles que la concurrence des ressources et la blocage.
Par conséquent, il est recommandé de libérer explicitement les ressources pertinentes à la fin du cycle de vie du script.
Supposons que vous utilisiez MySQLI pour les opérations de base de données, vous pouvez la concevoir comme ceci:
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Fermez la connexion à la base de données à la fin du script d'enregistrement
register_shutdown_function(function() use ($mysqli) {
if ($mysqli->ping()) {
$mysqli->close();
echo "La connexion de la base de données fermée。\n";
}
});
// Exécuter quelques requêtes
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
print_r($row);
}
?>
Dans cet exemple, nous enregistrons une fonction de rappel via registre_shutdown_function pour nous assurer que la connexion de la base de données est fermée à la fin du script et éviter les déchets de ressources.
Dans des scripts complexes, des exceptions ou des erreurs mortelles peuvent se produire. registre_shutdown_function peut également capturer ce type de situation pour assurer la libération et l'exécution des ressources.
<?php
$fp = fopen("log.txt", "a");
// Enregistrez une fonction rapprochée,Libérez la poignée du fichier
register_shutdown_function(function() use ($fp) {
if (is_resource($fp)) {
fclose($fp);
echo "La poignée du fichier est fermée。\n";
}
});
// Simuler des exceptions
throw new Exception("Exception d'exécution du script!");
?>
Même si le script est interrompu en raison d'une exception, la fonction de clôture sera toujours appelée pour s'assurer que les ressources de fichier sont publiées.
registre_shutdown_function est un outil puissant pour exécuter des fonctions de rappel à la fin de l'exécution du script PHP.
Il garantit que dans des situations normales ou anormales, des ressources telles que les connexions de base de données, les poignées de fichiers, etc. sont publiées.
En combinant des fonctions et fermetures anonymes, la logique de gestion des ressources peut être implémentée de manière concise.
Il est recommandé que tous les scripts PHP impliquant des opérations de ressources externes utilisent ce mécanisme pour le recyclage des ressources.