


PHP-Erweiterung – C-Erweiterung zur Implementierung der fortlaufenden Protokollierung
Vorwort
Alles ist am Anfang schwierig, das stimmt! !
Bevor ich wirklich PHP-Erweiterungen entwickelte, hatte ich immer das Gefühl, dass die Entwicklung von PHP-Erweiterungen für mich eine sehr ferne Sache war. Obwohl ich einige CC-Grundlagen habe, war es immer noch sehr schwierig, den PHP-Quellcode zu lesen Diesmal habe ich mich schließlich dazu entschieden, eine PHP-Erweiterungsklassenbibliothek zu erstellen. Nachdem ich ein Wochenende lang daran gearbeitet hatte, habe ich schließlich eine frühere Protokollschreibklassenbibliothek in eine PHP-Erweiterung gekapselt Form. Dies kann als Einführung in die Entwicklung von PHP-Erweiterungen angesehen werden. Hier ist der Quellcode: eine Singleton-Modus-Protokollierungs-PHP-Erweiterung
Entwicklung
Was ich entwickelt habe eine PHP-Erweiterung für die Protokollierung, mit Funktionen und Die PHP-Rolling-Logs der letzten Tage sind grundsätzlich gleich und werden auch im Singleton-Modus ausgeführt.
Notieren Sie einige Punkte, auf die bei der Entwicklung geachtet werden sollte:
Für Details können Sie sich meiner Meinung nach den besten Weg ansehen Wenn Sie nicht wissen, wie Sie ihn selbst überprüfen können, müssen Sie die ZVAL-Struktur verstehen. ZVAL ist eine im PHP-Kernel definierte Datenstruktur >
So übergeben Sie Parameter an Funktionen
<code>//定义在Zend/zend_types.h:55 和 Zend/zend.h:322行 typedef struct _zval_struct zval; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount; zend_uchar type; /* active type */ zend_uchar is_ref; }; typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value; //其中的zval.type表示变量的类型,基本类型有下面几种,定义在Zend/zend.h:583中 #define IS_NULL 0 #define IS_LONG 1 #define IS_DOUBLE 2 #define IS_BOOL 3 #define IS_ARRAY 4 #define IS_OBJECT 5 #define IS_STRING 6 //部分常用的zval相关函数或者宏,定义在Zend/zend_operators.h:441行 Z_LVAL_P(zval_p) //获取zval_p指针所指向的zval结构的值,值得类型为LONG Z_STRVAL_P(zval_p)</code>
<code>PHP扩展中接受参数的时候通过函数zend_parse_parameters,类似下面的形式进行传参: zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &msg, &msg_len); 第二个参数是要传入参数类型的列表,有下面规范</code>
Einige Funktionen, die häufig bei der Entwicklung von Oberflächenbibliotheken verwendet werden
<code>从PHP5.3开始, zend_parse_paramters_函数新增了如下几个新的类型描述符: f - function or array containing php method call info (returned as zend_fcall_info and zend_fcall_info_cache) H - array or HASH_OF(object) (returned as HashTable) L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long) Z - the actual zval (zval**)</code>
Hinweis
<code>zend_declare_property_null(mylogs_ce, ZEND_STRL("level"), ZEND_ACC_PRIVATE TSRMLS_CC); //类似上面的函数是类进行初始化的时候设置变量 zend_declare_class_constant_long(mylogs_ce, ZEND_STRL("LOG_DEBUG"), 0 TSRMLS_CC); //类似上面的函数是类型进行初始化的时候设置常量 zend_read_property(mylogs_ce, instance, ZEND_STRL("level"), 0 TSRMLS_CC); //上面的是从实例instance中读取变量的值 zend_hash_find(&ce->constants_table, ZEND_STRS("LOG_DEBUG"), (void **)&_level); //上面的是从mylogs_ce这个类中读取常量 zend_update_property_long(mylogs_ce, instance, ZEND_STRL("level"), level TSRMLS_CC); //上面的是从instance中读取变量level</code>
Achten Sie auf die Speicherfreigabe, um Speicherlecks zu verhindern. Nach Abschluss der Entwicklung habe ich festgestellt, dass ein Speicherleck vorliegt. Sie können valgrind verwenden, um die Speicherlecks zu überprüfen und den Speicher freizugeben Andernfalls kann es bei der Verarbeitung großer Schleifen zu einer übermäßigen Speichernutzung kommen, was zu einem Fehler führt.
- Schauen Sie sich auch den YAF-Quellcode von Bruder Niao an. Das hat mir in den frühen Tagen des Lernens sehr geholfen ".
- Sehen wir uns den Effekt an
Umgebung:
<code>centos虚拟机,64位 内存 1G CPU i5-2410M @ 2.30GHz #这个获取到的是我电脑的</code>
次数 | PHP代码 | PHP扩展 |
---|---|---|
第一次 | 8.83s | 6.13s |
第二次 | 8.60s | 6.14s |
平均 | 8.72s | 6.14s |
24.05.2015 15:10:45 Uhr
Das Urheberrecht dieses Artikels liegt für immer beim Autor (luluyrt@163.com). Nach dem Nachdruck ist jede Form des Nachdrucks verboten Der Artikel, der Autor und der Autor müssen auf der Artikelseite eindeutig angegeben werden, andernfalls behalten wir uns eine rechtliche Haftung vor.Das Obige stellt die PHP-Erweiterung C zur Implementierung der fortlaufenden Protokollierung vor, einschließlich einiger Aspekte des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

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

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

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

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

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

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
