set_file_buffer()
Erfahren Sie, wie stream_set_write_buffer() die Schreibpufferung eines Datei-Streams in PHP steuert und wie man die Pufferung deaktiviert.
Einführung
In PHP wird die Funktion stream_set_write_buffer() verwendet, um die Schreibpuffergröße eines Datei-Streams festzulegen. Sie ist nützlich, um die Performance Ihrer PHP-Skripte zu optimieren, indem Sie steuern, wie Daten auf die Festplatte geschrieben werden. Beachten Sie, dass die ältere Funktion set_file_buffer() in PHP 4.3.0 als veraltet markiert und in PHP 5.0.0 entfernt wurde. stream_set_write_buffer() ist daher der korrekte moderne Ansatz. In diesem Artikel werden alle wichtigen Informationen zur Funktion stream_set_write_buffer() behandelt, einschließlich Syntax, Parameter und Beispiele zur Verwendung.
Die Funktion stream_set_write_buffer() verstehen
Die Funktion stream_set_write_buffer() in PHP legt die Schreibpuffergröße eines Streams fest. Sie akzeptiert zwei Parameter: die Stream-Ressource und die Puffergröße in Bytes.
Wenn Sie stream_set_write_buffer() verwenden, konfiguriert PHP den Stream so, dass bis zu der angegebenen Anzahl an Bytes im Speicher gepuffert werden, bevor die Daten auf die Festplatte geschrieben werden. Wird die Puffergröße auf 0 gesetzt, wird die Pufferung vollständig deaktiviert – eine häufige Konfiguration für Echtzeitausgaben. Der Puffer wird automatisch geleert, wenn er die angegebene Größe erreicht, wenn das Skript endet oder wenn Sie explizit fflush() auf dem Stream aufrufen. Eine geeignete Einstellung kann die Performance Ihrer PHP-Skripte erheblich verbessern, insbesondere beim Schreiben großer Datenmengen.
Syntax der Funktion stream_set_write_buffer()
Die Syntax der Funktion stream_set_write_buffer() lautet wie folgt:
stream_set_write_buffer($stream, $buffer);Die Parameter sind:
$stream— eine beschreibbare Stream-Ressource, die typischerweise vonfopen()zurückgegeben wird.$buffer— die Puffergröße in Bytes. Verwenden Sie0, um die Pufferung zu deaktivieren, sodass jeder Schreibvorgang sofort geleert wird.
Laut PHP-Handbuch gibt die Funktion bei Erfolg 0 zurück. In der Praxis ist der Rückgabewert plattformabhängig (manche Systeme geben einen Wert ungleich null zurück, selbst wenn die Pufferung konfiguriert wurde). Verlassen Sie sich daher nicht auf den Rückgabewert. Wenn ein garantiertes Leeren des Puffers erforderlich ist, rufen Sie fflush() auf, anstatt sich auf den Rückgabewert zu verlassen.
Beispiele zur Verwendung von stream_set_write_buffer()
Sehen wir uns ein Beispiel an, wie die Funktion stream_set_write_buffer() in PHP eingesetzt werden kann.
Beispiel 1: Datei-Pufferung festlegen
<?php
$file_handle = fopen('example.txt', 'w');
stream_set_write_buffer($file_handle, 1024);
fwrite($file_handle, 'Hello, world!');
fclose($file_handle);Dieses Beispiel öffnet die Datei example.txt zum Schreiben und setzt den Schreibpuffer auf 1024 Bytes. PHP hält die geschriebenen Daten nun im Speicher, bis 1024 Bytes angesammelt sind, bis Sie fflush() aufrufen oder bis der Stream mit fclose() geschlossen wird – was alle verbleibenden gepufferten Daten leert und Systemressourcen freigibt. Schließen Sie den Handle immer, wenn Sie fertig sind.
Beispiel 2: Pufferung für sofortige Schreibvorgänge deaktivieren
Wenn jeder Schreibvorgang sofort auf die Festplatte gelangen soll – zum Beispiel beim Schreiben einer Log-Datei, die ein anderer Prozess in Echtzeit überwacht – setzen Sie die Puffergröße auf 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);Bei deaktivierter Pufferung wird jeder fwrite()-Aufruf sofort durchgeschrieben, anstatt zu warten, bis der Puffer voll ist – auf Kosten häufigerer Festplatten-I/O-Operationen.
Fazit
Die Funktion stream_set_write_buffer() in PHP ermöglicht es Ihnen, die Skript-Performance zu optimieren, indem Sie steuern, wie viele Daten ein Stream puffert, bevor sie auf die Festplatte geschrieben werden – und die Pufferung mit einer Größe von 0 vollständig deaktivieren, wenn sofortige Schreibvorgänge erforderlich sind. Da der Rückgabewert nicht plattformübergreifend zuverlässig ist, sollten Sie fflush() verwenden, wenn Sie einen Flush erzwingen müssen. Für weitere Informationen erkunden Sie fopen() zum Öffnen von Streams, fwrite() zum Schreiben in Streams und fclose() zum sauberen Schließen.