Heim Backend-Entwicklung PHP-Tutorial So verwenden Sie die Streams und den Wrapper-Wrapper von PHP

So verwenden Sie die Streams und den Wrapper-Wrapper von PHP

Dec 20, 2017 pm 06:52 PM
php streams wrapper

Heute erzähle ich Ihnen von den Konzepten und der Verwendung von PHP-Streams und Wrappern. Lassen Sie es mich für alle zusammenfassen.

Wir wissen, dass das Konzept der Streams in PHP4.3 eingeführt wurde. Es handelt sich um eine Abstraktion von Streaming-Daten und wird zur Vereinheitlichung von Datenoperationen wie Dateidaten, Netzwerkdaten, komprimierten Daten usw. verwendet Dass dieselben Daten gemeinsam genutzt werden können, sind die Dateisystemfunktionen von PHP. Beispielsweise kann die Funktion file_get_contents() lokale Dateien öffnen und auf URLs zugreifen. Vereinfacht ausgedrückt ist ein Stream ein Ressourcenobjekt, das ein Streaming-Datenverhalten zeigt.

Lesen und schreiben Sie linear und können Sie überall im Stream suchen.

Stream ähnelt in gewisser Weise der Datenbankabstraktionsschicht. Unabhängig davon, welche Datenbank verwendet wird, werden die Daten über der Abstraktionsschicht auf die gleiche Weise verarbeitet Es spielt keine Rolle, ob es sich um eine lokale Datei, eine Remote-Datei, eine komprimierte Datei usw. handelt, solange es sich um Streaming-Daten handelt, ist die Operationsmethode dieselbe.

Mit dem Konzept des Streams wird das Konzept des Wrappers abgeleitet. Jeder Stream entspricht einer Art Wrapper. Der Stream ist ein Konzept, das aus der Perspektive des einheitlichen Betriebs generiert wird, und der Wrapper wird aus dem Verständnis abgeleitet Ein Konzept, das sich aus dem Inhalt von Streaming-Daten ergibt, d. h. wie unterschiedliche Inhalte mit dieser einheitlichen Betriebsmethode bedient oder konfiguriert werden.

Diese Inhalte werden alle auf Streaming-Art dargestellt, die Inhaltsregeln sind jedoch unterschiedlich, z als http Die vom Protokoll übertragenen Daten liegen in Form eines Streams vor, aber nur der HTTP-Wrapper versteht die Bedeutung der vom http-Protokoll übertragenen Daten. Es kann verstanden werden, dass ein Stream ein Rohr mit fließendem Wasser ist, aber was es ist Ausfließende Daten sind Daten, und der Wrapper ist ein Paket außerhalb der Pipe, das die Bedeutung der ausströmenden Daten versteht und diese manipulieren kann.

Im offiziellen Handbuch heißt es: „Ein Wrapper ist zusätzlicher Code, der dem Stream mitteilt, wie er mit einem speziellen Protokoll oder einer speziellen Kodierung umgehen soll.“

Wrapper kann verschachtelt werden, nachdem ein Flow mit einem Wrapper umwickelt wurde. Zu diesem Zeitpunkt fungiert der innere Wrapper als Flow relativ zum äußeren Wrapper Das am Ende von PHP selbst implementierte C-Sprachentwicklungsdokument hat diese Erklärung:

Die Stream-API betreibt ein Paar verschiedener Ebenen: Auf der Basisebene definiert die API das php_stream-Objekt, um die Streaming-Datenquelle darzustellen, und auf einer etwas höheren Ebene. Auf dieser Ebene definiert die API das php_stream_wrapper-Objekt.

Es umhüllt das untergeordnete php_stream-Objekt, um die Möglichkeit zu bieten, den Inhalt und die Metadaten der URL abzurufen, Kontextparameter hinzuzufügen und das Wrapper-Verhalten anzupassen.

Jeder Stream wird geöffnet Wenden Sie eine beliebige Anzahl von Filtern an und die Stream-Daten werden vom Filter verarbeitet. Ich halte das Wort Filter für etwas ungenau und irreführend.

Die wörtliche Bedeutung scheint darin zu bestehen, einige Daten zu entfernen. Es sollte als Datenanpasser bezeichnet werden, da es einige Daten entfernen, hinzufügen und ändern kann. Aus historischen Gründen wird es jedoch auch genannt ein Datenanpasser. Es ist ein Filter, und jeder muss ihn einfach verstehen.

Wir sehen oft die folgenden Wörter, um ihre Unterschiede zu erklären:

Ressourcen und Daten: Ressourcen sind ein eher makroökonomischer Begriff, der normalerweise Daten umfasst, während Daten ein konkreterer Begriff sind. Oft wird von Daten gesprochen, in der Softwareplanung hingegen von Ressourcen. Sie sind Synonyme, genau wie der Unterschied zwischen Softwaredesign und Programmentwicklung.

Kontext und Parameter: Kontext ist ein relativ makroökonomischer Begriff, der häufig in der Kommunikation verwendet wird. Konkret handelt es sich dabei um die Parameter einer Kommunikation selbst, und der Begriff Parameter wird häufig für spezifischere Dinge wie Funktionen verwendet

Die konzeptionellen Dinge werden oben erklärt, werfen wir einen Blick auf den spezifischen Inhalt:

Hier finden Sie die von PHP unterstützten Protokolle und Wrapper: http://php.net/manual/zh/ Wrappers .php:

(Anmerkung des Autors: Der Originaltitel lautet: Unterstützte Protokolle und Verpackungsprotokolle. Die chinesische Übersetzung ist etwas irreführend. Um genau zu sein, handelt es sich um die unterstützten Protokolle und Wrapper. Auf der englischen Seite ist es sehr klar )
Standardunterstützung Es gibt einige Protokolle und Wrapper. Bitte verwenden Sie zum Anzeigen die Funktion stream_get_wrappers(). Sie können einen Wrapper auch anpassen und mit stream_wrapper_register() registrieren.
Obwohl RFC 3986 Folgendes verwenden kann: als Trennzeichen, PHP erlaubt nur ://, also verwenden Sie bitte das Format „scheme://target“ für die URL

file:// — 访问本地文件系统,在用文件系统函数时默认就使用该包装器
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
Nach dem Login kopieren
So implementieren Sie einen benutzerdefinierten Wrapper:

Verwenden Sie fopen, fwrite, fread , fgets, feof, Wenn Dateisystemfunktionen wie „rewind“, „file_put_contents“, „file_get_contents“ usw. auf Streams ausgeführt werden, werden die Daten zuerst an das definierte Wrapper-Klassenobjekt übergeben, und dann arbeitet der Wrapper mit dem Stream.

Wie implementiert man einen benutzerdefinierten Stream-Wrapper? PHP stellt einen Klassenprototyp bereit, der nur ein Prototyp, keine Schnittstelle oder Klasse ist und nicht zur Vererbung verwendet werden kann:

streamWrapper {
/* 属性 */
public resource $context ;
/* 方法 */
__construct ( void )
__destruct ( void )
public bool dir_closedir ( void )
public bool dir_opendir ( string $path , int $options )
public string dir_readdir ( void )
public bool dir_rewinddir ( void )
public bool mkdir ( string $path , int $mode , int $options )
public bool rename ( string $path_from , string $path_to )
public bool rmdir ( string $path , int $options )
public resource stream_cast ( int $cast_as )
public void stream_close ( void )
public bool stream_eof ( void )
public bool stream_flush ( void )
public bool stream_lock ( int $operation )
public bool stream_metadata ( string $path , int $option , mixed $value )
public bool stream_open ( string $path , string $mode , int $options , string &$opened_path )
public string stream_read ( int $count )
public bool stream_seek ( int $offset , int $whence = SEEK_SET )
public bool stream_set_option ( int $option , int $arg1 , int $arg2 )
public array stream_stat ( void )
public int stream_tell ( void )
public bool stream_truncate ( int $new_size )
public int stream_write ( string $data )
public bool unlink ( string $path )
public array url_stat ( string $path , int $flags )
}
Nach dem Login kopieren

在这个原型里面定义的方法,根据自己需要去定义,并不要求全部实现,这就是为什么不定义成接口的原因,因为有些实现根本用不着某些方法,
这带来很多灵活性,比如包装器是不支持删除目录rmdir功能的,那么就不需要实现streamWrapper::rmdir
由于未实现它,如果用户在包装器上调用rmdir将有错误抛出,要自定义这个错误那么也可以实现它并在其内部抛出错误
streamWrapper也不是一个预定义类,测试class_exists("streamWrapper")就知道,它只是一个指导开发者的原型

官方手册提供了一个例子:http://php.net/manual/zh/stream.streamwrapper.example-1.php

本博客提供一个从drupal8系统中抽取修改过的包装器例子,请看drupal8源码分析关于流那一部分

流系列函数,官方手册:http://php.net/manual/zh/ref.stream.php

常用的函数如下:

stream_bucket_append函数:为队列添加数据 
stream_bucket_make_writeable函数:从操作的队列中返回一个数据对象
stream_bucket_new函数:为当前队列创建一个新的数据
stream_bucket_prepend函数:预备数据到队列 
stream_context_create函数:创建数据流上下文
stream_context_get_default函数:获取默认的数据流上下文
stream_context_get_options函数:获取数据流的设置
stream_context_set_option函数:对数据流、数据包或者上下文进行设置
stream_context_set_params函数:为数据流、数据包或者上下文设置参数
stream_copy_to_stream函数:在数据流之间进行复制操作
stream_filter_append函数:为数据流添加过滤器
stream_filter_prepend函数:为数据流预备添加过滤器
stream_filter_register函数:注册一个数据流的过滤器并作为PHP类执行
stream_filter_remove函数:从一个数据流中移除过滤器
stream_get_contents函数:读取数据流中的剩余数据到字符串
stream_get_filters函数:返回已经注册的数据流过滤器列表
stream_get_line函数:按照给定的定界符从数据流资源中获取行
stream_get_meta_data函数:从封装协议文件指针中获取报头/元数据
stream_get_transports函数:返回注册的Socket传输列表
stream_get_wrappers函数:返回注册的数据流列表
stream_register_wrapper函数:注册一个用PHP类实现的URL封装协议
stream_select函数:接收数据流数组并等待它们状态的改变
stream_set_blocking函数:将一个数据流设置为堵塞或者非堵塞状态
stream_set_timeout函数:对数据流进行超时设置
stream_set_write_buffer函数:为数据流设置缓冲区
stream_socket_accept函数:接受由函数stream_ socket_server()创建的Socket连接
stream_socket_client函数:打开网络或者UNIX主机的Socket连接
stream_socket_enable_crypto函数:为一个已经连接的Socket打开或者关闭数据加密
stream_socket_get_name函数:获取本地或者网络Socket的名称
stream_socket_pair函数:创建两个无区别的Socket数据流连接
stream_socket_recvfrom函数:从Socket获取数据,不管其连接与否
stream_socket_sendto函数:向Socket发送数据,不管其连接与否
stream_socket_server函数:创建一个网络或者UNIX Socket服务端
stream_wrapper_restore函数:恢复一个事先注销的数据包
stream_wrapper_unregister函数:注销一个URL地址包
Nach dem Login kopieren


相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

php使用git部署环境

Git的一些使用案例

javascript数据类型和git使用代码详解

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Streams und den Wrapper-Wrapper von 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

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

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles