Heim >Backend-Entwicklung >PHP-Tutorial >[Übersetzung][PHP-Erweiterungsentwicklung und eingebettet] Kapitel 13-php INI-Einstellungen
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 7b799fe73e35dcfdc019b13f54de80e5 und 017421ec4e1d87ae7f66fefe80084b1d Direktiven extern, beeinflussen die Startphase des Motors , kann als INI gesetzt"global"Wert. |
PERDIR |
befindet sich in der Konfigurationsdatei httpd.conf von Apache >7b799fe73e35dcfdc019b13f54de80e5 und 017421ec4e1d87ae7f66fefe80084b1d Direktive , oder fordern Sie das Verzeichnis an bzw virtuelles Verzeichnis, in dem sich das Skript befindet .htaccess Dateien unter dem Host und andere ApacheINI vor der Verarbeitung der Anfrage an anderer Stelle festlegen >BEFEHL. |
USER |
Sobald das Skript mit der Ausführung beginnt, kann nur geändert werden durch Aufrufen der User-Space-Funktion ini_set( ) INI setzt . |
参数名 |
含义 |
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 . |