Inhaltsverzeichnis
Was ist Direct IO?
Dateien erstellen und schreiben
Dateien lesen
Dateivorgang
Andere Einstellungen
总结
Heim Backend-Entwicklung PHP-Tutorial Installation und Verwendung der Direct IO-Erweiterung in PHP

Installation und Verwendung der Direct IO-Erweiterung in PHP

Jul 09, 2021 am 11:43 AM
php

Über PHP-Dateioperationen werden wir auch in einer Reihe von Artikeln lernen. Heute erfahren wir zunächst etwas über eine Erweiterung, die nur wenige Menschen verwendet haben und die viele nicht einmal kennen. Sie unterscheidet sich geringfügig von unseren täglichen Dateioperationen. Diese Unterschiede sind jedoch mit bloßem Auge nicht intuitiv erkennbar. Sie liegen hauptsächlich im Gleichgewicht zwischen Geschäftsanforderungen und Leistung.

Was ist Direct IO?

Direct IO ist eigentlich ein Konzept im Linux-Betriebssystem. Es bedeutet, den Dateistream direkt zu bedienen. Wenn unser Betriebssystem Dateioperationen ausführt, liest und schreibt es Dateien nicht sofort direkt auf der Festplatte. In der Mitte befindet sich eine Ebene des Seitencaches. Da es sich um einen Cache handelt, wird er sicherlich gewisse Leistungsverbesserungen mit sich bringen, dies ist jedoch nicht völlig sicher. Die direkte Operation besteht darin, diese Schicht von Cache-Operationen zu ignorieren und Dateien direkt auf der Festplatte zu lesen und zu schreiben. Wir alle wissen, dass es eine große Lücke zwischen der Verarbeitungsgeschwindigkeit von Festplatten, sogar Solid-State-Laufwerken, und CPU und Speicher gibt. Der Standard-Seitencache wird verwendet, um diese Lücke zu schließen. Der Seitencache erhöht jedoch die Rechenoperationen der CPU und belegt den Speicher. Beim direkten Betrieb tritt dieses Problem nicht auf, aber relativ gesehen ist seine Geschwindigkeit nicht mit der von Dateilesevorgängen mit Cache vergleichbar.

Das Obige ist ein einfaches Verständnis von Direct IO. Für eine detailliertere Erklärung können Sie auf den zweiten Link im Referenzdokument am Ende des Artikels verweisen und eine eingehende Studie durchführen. In PHP laden wir die Direct IO-Erweiterung direkt von PECL herunter und installieren sie gemäß der normalen Installationsmethode der Erweiterung.

Dateien erstellen und schreiben

Da es sich um einen Dateivorgang handelt, erstellen und schreiben wir zunächst einige Dateidaten.

$fd = dio_open("./test", O_RDWR | O_CREAT);

echo dio_write($fd, "This is Test.I'm ZyBlog.Show me the money4i"), PHP_EOL;
// 43

print_r(dio_stat($fd));
// Array
// (
//     [device] => 64768
//     [inode] => 652548
//     [mode] => 35432
//     [nlink] => 1
//     [uid] => 0
//     [gid] => 0
//     [device_type] => 0
//     [size] => 43
//     [block_size] => 4096
//     [blocks] => 8
//     [atime] => 1602643459
//     [mtime] => 1602656963
//     [ctime] => 1602656963
// )

dio_close($fd);
Nach dem Login kopieren

Ähnlich wie bei den Funktionen der f-Serie müssen wir eine dio_open()-Funktion verwenden, um eine Datei zu öffnen. Der O_CREAT-Parameter bedeutet, eine Lese-/Schreibdatei zu öffnen und zu erstellen, wenn die Datei nicht vorhanden ist. Diese beiden Konstanten entsprechen den Konstanten, die sich auf den direkten Betrieb von Dateien unter Linux beziehen. Die Erklärung dieser Konstanten finden Sie auch im Link am Ende des Artikels.

Der Schreibvorgang kann auch mit dio_write() abgeschlossen werden. Der zurückgegebene Inhalt entspricht der Länge des geschriebenen Inhalts. Hier haben wir 43 Zeichen geschrieben.

dio_stat() gibt einige Informationen über das aktuelle Dateihandle zurück, Gerät, UID, GID, Atime, Mtime und andere Informationen, die wir in der Tat sehen können Diese Datei enthält einige einfache Informationen.

Dateien lesen

Das Lesen von Dateien kann ganz einfach über eine Funktion erfolgen. Die Funktion

$fd = dio_open("./test", O_RDWR | O_CREAT);

echo dio_read($fd), PHP_EOL;
// This is Test.I'm ZyBlog.Show me the money4i

dio_close($fd);
Nach dem Login kopieren

dio_read() enthält auch einen weiteren Parameter, der den Inhalt entsprechend der angegebenen Bytelänge lesen kann. Wir werden später verwandte Beispiele sehen.

Dateivorgang

Während des Dateilesevorgangs müssen wir möglicherweise nur einen Teil des Inhalts lesen oder den Dateiinhalt ab einer bestimmten Position lesen. Die folgenden Betriebsfunktionen wirken sich auf diese beiden Aspekte aus.

$fd = dio_open("./test", O_RDWR | O_CREAT);

var_dump(dio_truncate ($fd , 20)); 
// bool(true)
echo dio_read($fd), PHP_EOL;
// This is Test.I'm ZyB

dio_seek($fd, 3); 

echo dio_read($fd), PHP_EOL;
// s is Test.I'm ZyB

dio_close($fd);
Nach dem Login kopieren

Wie Sie am Namen erkennen können, wird dio_truncate() tatsächlich verwendet, um den Inhalt der Datei abzuschneiden. Hier kürzen wir ab dem 20. Zeichen und verwenden dann dio_read(), um nur die ersten 20 Zeichen zu lesen.

dio_seek() gibt an, ab welchem ​​Zeichen der Inhalt gelesen werden soll. Nachdem wir die Startzeichenposition als 3 angegeben haben, werden die ersten drei Zeichen nicht gelesen. Es ist zu beachten, dass dio_truncate() den Inhalt der Originaldatei ändert, dio_seek() hingegen nicht.

Andere Einstellungen

$fd = dio_open('./test', O_RDWR | O_NOCTTY | O_NONBLOCK);

dio_fcntl($fd, F_SETFL, O_SYNC);

dio_tcsetattr($fd, array(
  'baud' => 9600,
  'bits' => 8,
  'stop'  => 1,
  'parity' => 0
));

while (($data = dio_read($fd, 4))!=false) {
    echo $data, PHP_EOL;
}
// This
//  is
// Test
// .I'm
//  ZyB

dio_close($fd);
Nach dem Login kopieren

Die Funktion dio_fcntl() wird in der c-Funktionsbibliothek als Funktion bezeichnet. Der Zweck besteht darin, einige bestimmte Operationen am Dateideskriptor auszuführen. Hier verwenden wir F_SETFL bedeutet, dass das Dateideskriptor-Flag auf den angegebenen Wert gesetzt wird. Dieses O_SYNC bedeutet, dass das Schreiben in die Datei erst dann beendet wird, wenn die Daten auf die Festplatte geschrieben werden. Natürlich kann diese Funktion auch mit vielen anderen Operatoren eingestellt werden. Eine ausführliche Untersuchung finden Sie in der offiziellen PHP-Dokumentation.

dio_tcsetattr() wird verwendet, um die Terminalattribute und die Baudrate der geöffneten Datei festzulegen. Baud repräsentiert die Baudrate, Bits repräsentiert die Bits, Stop repräsentiert das Stoppbit und Parität repräsentiert das Paritätsbit. Dieser Aspekt erfordert einige Kenntnisse aus den Bereichen „Computer-Kompositionsprinzipien“ und „Betriebssystem“. Ich bin mir darüber nicht ganz im Klaren und werde ihn daher nicht im Detail erläutern. Daraus ist ersichtlich, dass die Grundkurse im Hochschulunterricht wirklich sehr wichtig sind. Ich glaube, dass Studierende, die diese professionellen Grundkurse studiert haben, die Rolle dieser Funktion sofort verstehen werden.

Abschließend verwenden wir den zweiten Parameter in dio_read(), um den Dateiinhalt basierend auf der Bytelänge zu lesen. Sie können sehen, dass der gelesene Inhalt in Segmenten mit einer Länge von 4 Zeichen ausgegeben wird.

总结

函数的学习还是比较简单的,核心的还是要知道这个扩展在什么业务场景下更适合使用。在文章开头的介绍中我们已经说明了直接操作文件与普通文件操作的一些区别,在自缓存应用或者需要传输非常大的数据时,直接操作对于 CPU 和 内存 更加地友好。而其它情况,我们还是使用系统默认的文件操作方式就可以了。其实在大部分情况下,我们基本看不出来它们的显著区别。所以在实际应用中,还是那句话,结合业务实际情况,选择最佳的方案。

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/4.PHP中DirectIO直操作文件扩展的使用.php
参考文档:
https://www.php.net/manual/zh/book.dio.php
https://www.ibm.com/developerworks/cn/linux/l-cn-directio/
Nach dem Login kopieren

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonInstallation und Verwendung der Direct IO-Erweiterung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

See all articles