PHP 8.5.0 Alpha 1 available for testing

La API del plugin mysqlnd

A continuación se presenta la lista de funciones proporcionadas en la API plugin mysqlnd:

  • mysqlnd_plugin_register()

  • mysqlnd_plugin_count()

  • mysqlnd_plugin_get_plugin_connection_data()

  • mysqlnd_plugin_get_plugin_result_data()

  • mysqlnd_plugin_get_plugin_stmt_data()

  • mysqlnd_plugin_get_plugin_net_data()

  • mysqlnd_plugin_get_plugin_protocol_data()

  • mysqlnd_conn_get_methods()

  • mysqlnd_result_get_methods()

  • mysqlnd_result_meta_get_methods()

  • mysqlnd_stmt_get_methods()

  • mysqlnd_net_get_methods()

  • mysqlnd_protocol_get_methods()

No hay una definición formal de qué es un plugin ni de cómo funciona un plugin.

Los componentes más frecuentemente encontrados en los mecanismos de plugin son:

  • Un gestor de plugin

  • Una API del plugin

  • Los servicios aplicativos (o módulos)

  • Las APIs de los servicios aplicativos (o APIs del módulo)

El concepto de un plugin mysqlnd utiliza estas características, así como otras joyas de arquitectura abierta.

Sin restricciones

Un plugin tiene acceso total a los trabajos internos de mysqlnd. No hay límites de seguridad ni restricciones. Todo puede ser sobrescrito para implementar algoritmos útiles o hostiles. Se recomienda desplegar solo plugins desde fuentes de confianza.

Tal como se ha discutido anteriormente, los plugins pueden utilizar libremente punteros. Estos punteros no están restringidos de ninguna manera, por lo que puede apuntar hacia los datos de otro plugin. Una simple posición aritmética puede ser utilizada para leer los datos de otro plugin.

Se recomienda escribir plugins cooperativos, y por lo tanto, siempre llamar al método padre. Los plugins deben cooperar siempre con mysqlnd.

Problemas: un ejemplo de encadenamiento y cooperación
Extensión Puntero mysqlnd.query() Pila de llamadas si se llama al padre
ext/mysqlnd mysqlnd.query() mysqlnd.query
ext/mysqlnd_cache mysqlnd_cache.query()
  1. mysqlnd_cache.query()

  2. mysqlnd.query

ext/mysqlnd_monitor mysqlnd_monitor.query()
  1. mysqlnd_monitor.query()

  2. mysqlnd_cache.query()

  3. mysqlnd.query

En este escenario, un plugin de caché (ext/mysqlnd_cache) y un plugin de supervisión (ext/mysqlnd_monitor) están cargados. Ambos tienen una subclase de Connection::query(). El registro del plugin ocurre durante el MINIT utilizando la lógica mencionada anteriormente. PHP llama a las extensiones en un orden alfabético por defecto. Los plugins no están al tanto unos de otros y no pueden fijar dependencias.

Por defecto, los plugins llaman a la implementación del padre de la función de consulta en su versión de la función derivada.

Resumen de la extensión PHP

A continuación se presenta un resumen de lo que ocurre al utilizar un plugin de ejemplo, ext/mysqlnd_plugin, que expone la API C del plugin mysqlnd a PHP:

  • Todas las aplicaciones PHP MySQL intentan establecer una conexión a la dirección 192.168.2.29

  • La aplicación PHP utilizará ext/mysql, ext/mysqli o PDO_MYSQL. Estas 3 extensiones PHP MySQL utilizan mysqlnd para establecer la conexión a la dirección 192.168.2.29.

  • Mysqlnd llama a su método de conexión, que ha sido subclaseado por ext/mysqlnd_plugin.

  • ext/mysqlnd_plugin llama al método del espacio de usuario proxy::connect() registrado por el usuario.

  • El espacio de usuario modifica el host de conexión de 192.168.2.29 a 127.0.0.1 y devuelve la conexión establecida por parent::connect().

  • ext/mysqlnd_plugin ejecuta el equivalente de parent::connect(127.0.0.1) llamando al método original de mysqlnd para establecer una conexión.

  • ext/mysqlnd establece una conexión y devuelve el control a ext/mysqlnd_plugin. ext/mysqlnd_plugin también devuelve.

  • Cualquier extensión PHP MySQL utilizada por la aplicación, recibe una conexión a 127.0.0.1. La extensión PHP MySQL devuelve el control a la aplicación PHP. El ciclo está cerrado.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top