set_file_buffer()
Apprenez comment stream_set_write_buffer() contrôle la mise en mémoire tampon en PHP et pourquoi set_file_buffer() est obsolète.
Introduction
En PHP, la fonction stream_set_write_buffer() est utilisée pour définir la taille du tampon d'écriture d'un flux de fichier. C'est une fonction utile pour optimiser les performances de vos scripts PHP en contrôlant la façon dont les données sont écrites sur le disque. Notez que l'ancienne fonction set_file_buffer() a été dépréciée dans PHP 4.3.0 et supprimée dans PHP 5.0.0, donc stream_set_write_buffer() est la bonne approche moderne. Dans cet article, nous couvrirons tout ce que vous devez savoir sur la fonction stream_set_write_buffer(), notamment sa syntaxe, ses paramètres et des exemples de son utilisation.
Comprendre la fonction stream_set_write_buffer()
La fonction stream_set_write_buffer() en PHP est utilisée pour définir la taille du tampon d'écriture d'un flux. Elle prend deux paramètres : la ressource de flux et la taille du tampon en octets.
Lorsque vous utilisez stream_set_write_buffer(), PHP configure le flux pour mettre en mémoire tampon jusqu'au nombre d'octets spécifié avant de vider les données sur le disque. Définir la taille du tampon à 0 désactive entièrement la mise en mémoire tampon, ce qui est une configuration courante pour les sorties en temps réel. Le tampon est automatiquement vidé lorsqu'il atteint la taille spécifiée, lorsque le script se termine, ou lorsque vous appelez explicitement fflush() sur le flux. Configurer cela de manière appropriée peut être utile pour optimiser les performances de vos scripts PHP, en particulier lors de l'écriture de grandes quantités de données.
Syntaxe de la fonction stream_set_write_buffer()
La syntaxe de la fonction stream_set_write_buffer() est la suivante :
stream_set_write_buffer($stream, $buffer);Les paramètres sont :
$stream— une ressource de flux accessible en écriture, généralement retournée parfopen().$buffer— la taille du tampon en octets. Utilisez0pour désactiver la mise en mémoire tampon afin que chaque écriture soit vidée immédiatement.
Selon le manuel PHP, la fonction retourne 0 en cas de succès. En pratique, la valeur de retour dépend de la plateforme (certains systèmes retournent une valeur non nulle même lorsque la mise en mémoire tampon est configurée), donc vous ne devez pas vous baser dessus. Si vous avez besoin d'un vidage garanti, appelez fflush() plutôt que de vous fier au code de retour.
Exemples d'utilisation de stream_set_write_buffer()
Voyons un exemple de la façon dont la fonction stream_set_write_buffer() peut être utilisée en PHP.
Exemple 1 : Définir la mise en mémoire tampon de fichier
<?php
$file_handle = fopen('example.txt', 'w');
stream_set_write_buffer($file_handle, 1024);
fwrite($file_handle, 'Hello, world!');
fclose($file_handle);Cet exemple ouvre le fichier example.txt en écriture et définit le tampon d'écriture à 1024 octets. PHP conserve maintenant les données écrites en mémoire jusqu'à ce que 1024 octets s'accumulent, jusqu'à ce que vous appeliez fflush(), ou jusqu'à ce que le flux soit fermé avec fclose() — ce qui vide toutes les données encore en mémoire tampon et libère les ressources système. Fermez toujours le descripteur une fois terminé.
Exemple 2 : Désactiver la mise en mémoire tampon pour des écritures immédiates
Lorsque vous souhaitez que chaque écriture atteigne immédiatement le disque — par exemple, lors de l'écriture d'un fichier journal qu'un autre processus suit en temps réel — définissez la taille du tampon à 0 :
<?php
$log = fopen('app.log', 'a');
stream_set_write_buffer($log, 0); // unbuffered: every fwrite() flushes immediately
fwrite($log, "Request received\n");
fwrite($log, "Response sent\n");
fclose($log);Avec la mise en mémoire tampon désactivée, chaque appel à fwrite() est écrit immédiatement au lieu d'attendre que le tampon se remplisse, au prix d'un accès disque plus fréquent.
Conclusion
La fonction stream_set_write_buffer() en PHP vous permet d'optimiser les performances de vos scripts en contrôlant la quantité de données qu'un flux met en mémoire tampon avant de les vider sur le disque — et en désactivant entièrement la mise en mémoire tampon avec une taille de 0 lorsque vous avez besoin d'écritures immédiates. Comme sa valeur de retour n'est pas fiable sur toutes les plateformes, associez-la à fflush() lorsque vous devez forcer un vidage. Pour aller plus loin, explorez fopen() pour ouvrir des flux, fwrite() pour y écrire, et fclose() pour les fermer proprement.