# Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Konfigurationsoptionen für den MySQL Native Driver
Name | Standard | Veränderbar | Changelog
--- | --- | --- | ---
mysqlnd.collect_statistics | "1" | `INI_SYSTEM` |
mysqlnd.collect_memory_statistics | "0" | `INI_SYSTEM` |
mysqlnd.debug | "" | `INI_SYSTEM` |
mysqlnd.log_mask | 0 | `INI_ALL` |
mysqlnd.mempool_default_size | 16000 | `INI_ALL` |
mysqlnd.net_read_timeout | "86400" | `INI_ALL` | Vor PHP 7.2.0 war der Standardwert "31536000" und die Veränderbarkeit war `INI_SYSTEM`
mysqlnd.net_cmd_buffer_size | "4096" | `INI_SYSTEM` |
mysqlnd.net_read_buffer_size | "32768" | `INI_SYSTEM` |
mysqlnd.sha256_server_public_key | "" | `INI_PERDIR` |
mysqlnd.trace_alloc | "" | `INI_SYSTEM` |
mysqlnd.fetch_data_copy | 0 | `INI_ALL` | Entfernt seit PHP 8.1.0

Weitere Details und die Definitionen der INI_*-Konstanten sind unter Wo Konfigurationseinstellungen gesetzt werden können zu finden.

Hier eine kurze Erklärung der Konfigurationsoptionen:

`mysqlnd.collect_statistics` bool
  Aktiviert das Sammeln verschiedener Client-Statistiken, auf die über mysqli_get_client_stats() und mysqli_get_connection_stats() zugegriffen werden kann, und die auch von der Funktion phpinfo() im Abschnitt `mysqlnd` ausgegeben werden. Diese Konfigurationseinstellung aktiviert alle Statistiken des MySQL Native Drivers mit Ausnahme derjenigen, die sich auf die Speicherverwaltung beziehen.
`mysqlnd.collect_memory_statistics` bool
  Aktiviert das Sammeln verschiedener Speicherstatistiken, auf die über mysqli_get_client_stats() und mysqli_get_connection_stats() zugegriffen werden kann, und die auch von der Funktion phpinfo() im Abschnitt `mysqlnd` ausgegeben werden. Diese Konfigurationseinstellung aktiviert die Statistiken zur Speicherverwaltung innerhalb der gesamten Statistiken des MySQL Native Drivers.
`mysqlnd.debug` string
  Zeichnet die Kommunikation aller Erweiterungen, die `mysqlnd` verwenden, in der angegebenen Protokolldatei auf. Das Format der Direktive ist `mysqlnd.debug = "option1[,parameter_option1][:option2[,parameter_option2]]"`. Folgende Optionen stehen für die Formatzeichenkette zur Verfügung:
  - A[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an. Stellt außerdem sicher, dass die Daten nach jedem Schreibvorgang geschrieben werden. Zu diesem Zweck wird die Trace-Datei geschlossen und erneut geöffnet (was recht langsam ist). Dies trägt dazu bei, dass auch bei einem Absturz der Anwendung eine vollständige Protokolldatei vorhanden ist.
  - a[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an.
  - d - Aktiviert die Ausgabe des Makros DBUG_<N> für den aktuellen Zustand. Es kann eine Liste mit Schlüsselwörtern angehängt werden, um nur die Ausgaben des DBUG-Makros auszuwählen, die diese Schlüsselwörter enthalten. Wenn eine leere Liste angegeben wird, werden alle Makros ausgegeben.
  - f[,functions] - Beschränkt die Aktivitäten des Debuggers auf die angegebene Liste von Funktionen. Eine leere Liste impliziert, dass alle Funktionen ausgewählt werden.
  - F - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der Quelldatei, die das Makro enthält, das die Ausgabe verursacht.
  - i - Versieht jede Zeile der Debugger-Ausgabe mit der PID des aktuellen Prozesses.
  - L - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der Quelldatei, die das Makro enthält, sowie der Zeile des Makros, das diese Ausgabe verursacht.
  - n - Versieht jede Zeile der Debugger-Ausgabe mit der aktuellen Tiefe der Funktionsverschachtelung
  - o[,file] - Ähnlich wie a[,file], überschreibt aber die alte Datei und hängt nicht an sie an.
  - O[,file] - Ähnlich wie A[,file], überschreibt aber die alte Datei und hängt nicht an sie an.
  - t[,N] - Aktiviert die Verfolgung des Kontrollflusses einer Funktion. Die maximale Verschachtelungstiefe wird durch N angegeben. Die Voreinstellung für N ist 200.
  - x - Aktiviert die Erstellung von Profilen.
  - m - Verfolgt die mit der Speicherzuweisung und -freigabe verbundenen Aufrufe.
  Beispiel:

      d:t:x:O,/tmp/mysqlnd.trace

  > Hinweis: Dieses Funktionalität steht nur mit einem sogenannten Debug-Build von PHP zur Verfügung.

`mysqlnd.log_mask` int
  Legt fest, welche Abfragen protokolliert werden sollen. Der Standardwert ist 0, was die Protokollierung deaktiviert. Die Definition erfolgt mit einer Ganzzahl und nicht mit PHP-Konstanten. Ein Wert von 48 (16 + 32) protokolliert zum Beispiel langsame Abfragen, die entweder einen fehlerhaften Index ("no good index") (SERVER_QUERY_NO_GOOD_INDEX_USED = 16) oder überhaupt keinen Index (SERVER_QUERY_NO_INDEX_USED = 32) verwenden. Ein Wert von 2043 (1 + 2 + 8 + ... + 1024) protokolliert alle langsamen Abfragetypen. Folgende Typen stehen zur Verfügung: SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2, SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16, SERVER_QUERY_NO_INDEX_USED=32, SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128, SERVER_STATUS_DB_DROPPED=256, SERVER_STATUS_NO_BACKSLASH_ESCAPES=512 und SERVER_QUERY_WAS_SLOW=1024.
`mysqlnd.mempool_default_size` int
  Die voreingestellte Größe des mysqlnd-Speicherbereichs, der von den Ergebnismengen verwendet wird.
`mysqlnd.net_read_timeout` int
  `mysqlnd` und die MySQL Client Library `libmysqlclient` verwenden unterschiedliche Netzwerk-APIs. So verwendet `mysqlnd` PHP-Streams, während `libmysqlclient` den eigenen Wrapper für die Netzwerkaufrufe der Betriebssystemebene verwendet. PHP setzt für das Lesen von Streams standardmäßig ein Zeitlimit von 60s. Dies wird in der php.ini über `default_socket_timeout` eingestellt. Diese Vorgabe gilt für alle Streams, die keinen anderen Wert für das Zeitlimit setzen. `mysqlnd` setzt keinen anderen Wert, weshalb Verbindungen von lang laufenden Abfragen nach `default_socket_timeout` Sekunden getrennt werden können, was die Fehlermeldung 2006 - MySQL Server has gone away zur Folge hat. Die MySQL Client Library setzt standardmäßig ein Zeitlimit von 24 * 3600 Sekunden (1 Tag) und wartet auf andere Zeitlimits, z. B. TCP/IP-Zeitlimits. `mysqlnd` benutzt nun das gleiche sehr lange Zeitlimit. Der Wert ist über eine neue Einstellung in der php.ini konfigurierbar: `mysqlnd.net_read_timeout`. `mysqlnd.net_read_timeout` wird von jeder Erweiterung verwendet, die `mysqlnd` verwendet (`ext/mysql`, `ext/mysqli` und `PDO_MySQL`). `mysqlnd` weist PHP-Streams an, `mysqlnd.net_read_timeout` zu verwenden. Zu beachten ist, dass es subtile Unterschiede zwischen `MYSQL_OPT_READ_TIMEOUT` aus der MySQL Client Library und PHP-Streams geben kann. Zum Beispiel gilt `MYSQL_OPT_READ_TIMEOUT` laut Dokumentation nur für TCP/IP-Verbindungen und, vor MySQL 5.1.2, nur unter Windows. PHP-Streams haben diese Einschränkung möglicherweise nicht. Im Zweifelsfall sollte die Dokumentation von Streams zu Rate gezogen werden.
`mysqlnd.net_cmd_buffer_size` int
  `mysqlnd` weist jeder Verbindung einen internen Befehls-/Netzwerkpuffer von `mysqlnd.net_cmd_buffer_size` Bytes zu (in der php.ini). Wenn ein Befehl des MySQL-Client-Server-Protokolls, zum Beispiel `COM_QUERY` (normale Abfrage), nicht in den Puffer passt, vergrößert `mysqlnd` den Puffer auf die für das Senden des Befehls erforderliche Größe. Jedes Mal, wenn der Puffer für eine Verbindung erweitert wird, wird `command_buffer_too_small` um eins erhöht. Wenn `mysqlnd` den Puffer bei fast jeder Verbindung über seine anfängliche Größe von `mysqlnd.net_cmd_buffer_size` Bytes hinaus vergrößern muss, sollten in Betracht gezogen werden, die Standardgröße zu erhöhen, um Neuzuweisungen zu vermeiden. Die voreingestellte Puffergröße beträgt 4096 Bytes, was der kleinstmögliche Wert ist. Der Wert kann auch mittels `mysqli_options(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size)` gesetzt werden.
`mysqlnd.net_read_buffer_size` int
  Die maximale Größe des gelesenen Teilstücks in Bytes, wenn der Inhalt eines MySQL-Befehlspakets gelesen wird. Das MySQL-Client-Server-Protokoll kapselt alle seine Befehle in Paketen. Die Pakete bestehen aus einem kleinen Kopf und einem Textkörper mit dem eigentlichen Inhalt. Die Größe des Körpers ist im Kopfteil kodiert. `mysqlnd` liest den Körper in Stücken von `MIN(header.size, mysqlnd.net_read_buffer_size)` Bytes. Wenn ein Paketkörper größer als `mysqlnd.net_read_buffer_size` Bytes ist, muss `mysqlnd` den Befehl `read()` mehrfach aufrufen. Der Wert kann auch mittels `mysqli_options(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size)` gesetzt werden.
`mysqlnd.sha256_server_public_key` string
  Diese Option bezieht sich auf das SHA-256-Authentifizierungs-Plugin und enthält den Pfad zur Datei mit dem öffentlichen RSA-Schlüssel des MySQL-Servers. Der Client kann entweder auf die Angabe eines öffentlichen RSA-Schlüssels verzichten, den Schlüssel über diese PHP-Konfigurationseinstellung angeben oder zur Laufzeit mittels mysqli_options(). Wird vom Client kein öffentlicher RSA-Schlüssel angegeben, wird der Schlüssel im Rahmen des Standard-Authentifizierungsverfahrens des SHA-256-Authentifizierungs-Plugins ausgetauscht.
`mysqlnd.trace_alloc` string
`mysqlnd.fetch_data_copy` int
  Erzwingt das Kopieren von Ergebnismengen aus den internen Ergebnismengenpuffern in PHP-Variablen, anstatt die standardmäßige Referenz- und Copy-on-Write-Logik zu verwenden. Weitere Details sind in den Hinweisen zur Implementierung der Speicherverwaltung zu finden. Wenn Ergebnismengen kopiert werden, anstatt sie von PHP-Variablen referenzieren zu lassen, kann der für die PHP-Variablen belegte Speicher früher freigegeben werden. Je nach API-Code des Benutzers, den tatsächlichen Datenbankabfragen und der Größe ihrer Ergebnismengen kann dies den Speicherbedarf von mysqlnd verringern. Dies darf nicht gesetzt werden, wenn PDO_MySQL verwendet wird. PDO_MySQL unterstützt diesen neuen Abrufmodus noch nicht.

  > Hinweis: Diese Einstellung wurde in PHP 8.1.0 entfernt.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open