Inhaltsverzeichnis
Vorwort
Entwicklung
So übergeben Sie Parameter an Funktionen
Hinweis
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.
Umgebung:
Heim Backend-Entwicklung PHP-Tutorial PHP-Erweiterung – C-Erweiterung zur Implementierung der fortlaufenden Protokollierung

PHP-Erweiterung – C-Erweiterung zur Implementierung der fortlaufenden Protokollierung

Aug 08, 2016 am 09:23 AM
php quot zend zval

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>
Nach dem Login kopieren
<code>PHP扩展中接受参数的时候通过函数zend_parse_parameters,类似下面的形式进行传参:
zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &msg, &msg_len);
第二个参数是要传入参数类型的列表,有下面规范</code>
Nach dem Login kopieren

PHP-Erweiterung – C-Erweiterung zur Implementierung der fortlaufenden ProtokollierungEinige 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>
Nach dem Login kopieren
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>
Nach dem Login kopieren
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.
  1. Schauen Sie sich auch den YAF-Quellcode von Bruder Niao an. Das hat mir in den frühen Tagen des Lernens sehr geholfen ".
  2. Sehen wir uns den Effekt an
Nachdem die Entwicklung abgeschlossen war, habe ich ein Skript geschrieben und es ausprobiert, wobei ich das Protokoll zyklisch 100.000 Mal ausgegeben habe (300.000 Mal, um genau zu sein, Debug, Msg, und jeweils 100.000 Mal irren) ), das Folgende ist die Umgebung und die Ergebnisse

Umgebung:


Sie können sehen, dass die Verwendung der PHP-Erweiterung die Geschwindigkeit um etwa 1/4 erhöhen kann Original, haha, nicht schlecht, mein Code. Möglicherweise gibt es viel Raum für Optimierung, also arbeite weiter hart ~~
<code>centos虚拟机,64位
内存 1G
CPU i5-2410M @ 2.30GHz #这个获取到的是我电脑的</code>
Nach dem Login kopieren
次数 PHP代码 PHP扩展
第一次 8.83s 6.13s
第二次 8.60s 6.14s
平均 8.72s 6.14s
Ich habe den gesamten Code auf Github gestellt:

Eine PHP-Erweiterung für die Protokollierung im Singleton-Modus

Referenzartikel

Verwenden Sie C/C, um Ihr PHP zu erweitern – Laruence

Detaillierte PHP-Variablenspeicherstruktur – Wen Daxia

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.

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 arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

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

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.

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.

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 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

See all articles