Es folgt eine Liste der Funktionen, die in der Plugin-API von
mysqlnd zur VerfĂŒgung stehen:
Es gibt keine formale Definition dafĂŒr, was ein Plugin ist und wie ein Plugin-Mechanismus funktioniert.
Folgende Komponenten werden hÀufig in Plugin-Mechanismen verwendet:
Das Plugin-Konzept von mysqlnd nutzt diese Merkmale und
zeichnet sich zudem durch eine offene Architektur aus.
Keine EinschrÀnkungen
Ein Plugin hat uneingeschrÀnkten Zugriff auf die inneren AblÀufe von
mysqlnd. Es gibt keine SicherheitsbeschrÀnkungen oder
EinschrĂ€nkungen. Alles kann ĂŒberschrieben werden, um nĂŒtzliche oder
schÀdliche Algorithmen zu implementieren. Es wird empfohlen, nur Plugins
aus einer vertrauenswĂŒrdigen Quelle einzusetzen.
Wie bereits erwÀhnt, können Plugins Zeiger beliebig verwenden. Diese Zeiger sind in keiner Weise eingeschrÀnkt und können auf die Daten eines anderen Plugins zeigen. Mit einer einfachen Offset-Berechnung können die Daten eines anderen Plugins gelesen werden.
Es wird empfohlen, kooperative Plugins zu schreiben und immer die
Elternmethode aufzurufen. Die Plugins sollten immer mit
mysqlnd selbst zusammenarbeiten.
| Erweiterung | mysqlnd.query()-Zeiger | Aufrufstapel (Call Stack) bei Aufruf der Elternmethode |
|---|---|---|
| ext/mysqlnd | mysqlnd.query() | mysqlnd.query |
| ext/mysqlnd_cache | mysqlnd_cache.query() |
|
| ext/mysqlnd_monitor | mysqlnd_monitor.query() |
|
In diesem Szenario werden ein Cache-Plugin
(ext/mysqlnd_cache) und ein Ăberwachungs-Plugin
(ext/mysqlnd_monitor) geladen. Beide sind Unterklassen
von Connection::query(). Die Registrierung der Plugins
erfolgt wÀhrend MINIT gemÀà der zuvor gezeigten Logik.
PHP ruft Erweiterungen standardmĂ€Ăig in alphabetischer Reihenfolge auf. Die
Plugins wissen nichts voneinander und definieren keine AbhÀngigkeiten von
den Erweiterungen.
StandardmĂ€Ăig rufen die Plugins die ĂŒbergeordnete Implementierung der Abfragemethode in ihrer abgeleiteten Version der Methode auf.
Zusammenfassung des Verhaltens einer PHP-Erweiterung
Die folgende Zusammenfassung zeigt, was passiert, wenn das Beispiel-Plugin
ext/mysqlnd_plugin verwendet wird, das die C-Plugin-API
von mysqlnd fĂŒr PHP verfĂŒgbar macht:
ext/mysql,
ext/mysqli oder PDO_MYSQL. Alle
drei PHP-MySQL-Erweiterungen verwenden mysqlnd, um die
Verbindung zu 192.168.2.29 herzustellen.
Mysqlnd ruft seine Verbindungsmethode auf, die von
ext/mysqlnd_plugin abgeleitet wurde.
ext/mysqlnd_plugin ruft den vom Benutzer registrierten
Userspace-Hook, die Methode proxy::connect(), auf.
parent::connect() hergestellte Verbindung
zurĂŒck.
ext/mysqlnd_plugin bewirkt dasselbe wie
parent::connect(127.0.0.1), indem es die ursprĂŒngliche
mysqlnd-Methode aufruft, um eine Verbindung
herzustellen.
ext/mysqlnd stellt die Verbindung her und gibt sie
an ext/mysqlnd_plugin zurĂŒck, das sie seinerseits
zurĂŒckgibt.