


[übersetzung][PHP-Erweiterungsentwicklung und eingebettet] Kapitel 13-php INI-Einstellungen
Feb 10, 2017 am 10:17 AM
INI-Einstellungen
und die vorherigen 1 Wie die superglobalen Variablen und persistenten Konstanten, die Sie in Kapitel 1 gesehen haben, müssen php.ini-Werte im erweiterten MINIT-Block definiert werden. Im Gegensatz zu anderen Funktionen besteht die Definition von INI-Optionen jedoch nur aus einfachen Start-/Stoppzeilen.
PHP_MINIT_FUNCTION(sample4) { REGISTER_INI_ENTRIES(); return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(sample4) { UNREGISTER_INI_ENTRIES(); return SUCCESS; }
INI-Einstellungen definieren und darauf zugreifen
Der INI-Befehl selbst befindet sich über der MINIT-Funktion in der Quelle Codedatei, die v?llig unabh?ngig mithilfe der folgenden Makros definiert wird. Zwischen diesen beiden Makros k?nnen eine oder mehrere INI-Anweisungen definiert werden:
PHP_INI_BEIGN() PHP_INI_END()
Diese beiden Makrofunktionen ?hneln ZEND_BEGIN_MODULE_GLOBALS()/ZEND_END_MODULE_GLOBALS(). Hierbei handelt es sich jedoch nicht um eine Typdef-Struktur, sondern um eine Rahmenorganisation für die Definition statischer Dateninstanzen:
static zend_ini_entry ini_entries[] = { {0,0,NULL,0,NULL,NULL,NULL,NULL,NULL,0,NULL,0,0,NULL} };
Wie Sie sehen k?nnen, definiert es einen Vektor von zend_ini_entry-Werten, der mit einem leeren Datensatz endet Sie würden Die zuvor gesehene Definition des statischen Vektors function_entry ist konsistent.
Einfache INI-Einstellungen
Nun, Sie Es gibt eine INI-Struktur zum Definieren von INI-Anweisungen sowie den Mechanismus für die Engine zum Registrieren/Deinstallieren von INI-Einstellungen, sodass wir tats?chlich einige INI-Anweisungen für Ihre Erweiterung definieren k?nnen. Angenommen, Ihre Erweiterung stellt eine Begrü?ungsfunktion bereit, z. B. ?Same as“. in Kapitel 5 ?Ihre erste Erweiterung“ k?nnen Sie diese jedoch anpassen, wenn Sie Hallo sagen m?chten:
PHP_FUNCTION(sample4_hello_world) { php_printf("Hello World!\n"); }
Der einfachste und direkteste Weg ist die Definition eines INI-Befehls, und geben Sie ihm den Standardwert ?Hallo Welt!“:
#include "php_ini.h" PHP_INI_BEGIN() PHP_INI_ENTRY("sample4.greeting", "Hello World", PHP_INI_ALL, NULL) PHP_INI_END()
Sie k?nnen Sie haben Wie Sie es erraten haben, repr?sentieren die ersten beiden Parameter dieses Makros den Namen des INI-Befehls und seinen Standardwert. Der dritte Parameter wird verwendet, um zu bestimmen, ob die Engine die ?nderung des INI-Befehls zul?sst (dies betrifft das sp?ter eingeführte Problem mit der Zugriffsebene). Der letzte Parameter ist eine Callback-Funktion, die jedes Mal aufgerufen wird, wenn sich der Wert der INI-Anweisung ?ndert. Die Details zu diesem Parameter finden Sie im Abschnitt ?Ereignisse ?ndern“. > übersetzungshinweis: Wenn Sie, wie der übersetzer, auf Ergebnisse sto?en, die nicht mit den erwarteten Ergebnissen der Originalarbeit übereinstimmen, fügen Sie bitte w?hrend des Tests einen ?REGISTER_INI_ENTRIES();“-Aufruf zu Ihrer MINIT()-Funktion hinzu und stellen Sie sicher, dass dies der Fall ist dass sich der Aufruf in Ihrem Execute befindet, nachdem Sie globalen Speicherplatz in MINIT zugewiesen haben.
Nachdem Ihre INI-Einstellungen definiert wurden, müssen Sie sie nur noch in Ihrer Begrü?ungsfunktion verwenden.
Beachten Sie unbedingt, dass der Wert von char * der Engine geh?rt und nicht ge?ndert werden darf. Definieren Sie daher Ihre lokale Variable, die zum vorübergehenden Speichern der INI-Einstellung verwendet wird Wert als const ge?ndert. Natürlich sind nicht alle INI-Werte Strings; es gibt andere Makros zum Abrufen von Ganzzahl-, Gleitkomma- und Booleschen Werten:
PHP_FUNCTION(sample4_hello_world) { const char *greeting = INI_STR("sample4.greeting"); php_printf("%s\n", greeting); }
long lval = INI_INT("sample4.intval"); double dval = INI_FLT("sample4.fltval"); zend_bool bval = INI_BOOL("sample4.boolval");Normalerweise m?chten Sie den aktuellen Wert der INI-Einstellung wissen. Als Erg?nzung gibt es jedoch mehrere Makros, mit denen Sie den unver?nderten Wert der INI lesen k?nnen Einstellung:
In diesem Beispiel wird dem Namen der INI-Anweisung ?sample4.greeting“ eine Erweiterung vorangestellt, um sicherzustellen, dass es nicht zu Konflikten mit den INI-Anweisungsnamen kommt, die von anderen Erweiterungen bereitgestellt werden. Dieses Pr?fix ist nicht erforderlich, wird aber für ?ffentliche Erweiterungen für kommerzielle oder Open-Source-Ver?ffentlichungen empfohlen
Zugriffsebene
Für INI-Anweisungen gibt es immer einen Standardwert. In den meisten F?llen ist es jedoch ideal, den Standardwert unver?ndert zu lassen, für einige besondere Umst?nde oder bestimmte Aktionen innerhalb des Skripts ?kann ge?ndert werden. Wie in der folgenden Tabelle gezeigt, kann der Wert der INI-Anweisung an den folgenden drei Punkten ge?ndert werden:
Zugriffsebene | Bedeutung |
SYSTEM | befindet sich in php.ini , oder Apaches httpd.conf Konfigurationsdatei |
PERDIR | befindet sich in der Konfigurationsdatei httpd.conf von Apache > |
USER | Sobald das Skript mit der Ausführung beginnt, kann nur ge?ndert werden durch Aufrufen der User-Space-Funktion ini_set( ) INI setzt . |
參數(shù)名 | 含義 |
entry | zeigt auf das INI-Befehlselement, das tats?chlich von der Engine gespeichert wird.Diese Struktur liefert den aktuellen Wert , den ursprünglichen Wert , das Modul, zu dem es geh?rt , und einige andere Codes unten (zend_ini_entryStrukturstruktur)Aufgelistete Informationen |
new_value | Der einzustellende Wert.Wenn der Prozessor zurückkehrt ERFOLGREICH,Dieser Wert wird auf entry->value, gesetzt und wenn entry-> Für orig_value ist derzeit kein festgelegt. setzt den aktuellen Wert auf entry->orig_value in , und legen Sie das Tag entry->modified fest.Die L?nge davon Zeichenfolge wird übergeben new_value_lengthpassing. |
mh_arg1, 2, 3 | Diese 3 Zeiger entsprechen den Datenzeigern, die bei der INI-Anweisung angegeben werden definiert (zend_ini_entry3 Mitglieder mit demselben Namen ).eigentlich ,Diese Werte werden von der Engine für die interne Verarbeitung verwendet,Sie müssen sich nicht um sie kümmern. |
Bühne | ZEND_INI_STAGE_Serie Einer von 5Werten: STARTUP, SHUTDOWN, ACTIVATE, DEACTIVATE, RUNTIME. Diese Konstanten entsprechen MINIT, MSHUTDOWN, RINIT, RSHUTDOWN, und der aktiven Skriptausführung . |