Я пытаюсь получить некоторые переменные _SERVER, например, REMOTE_ADDR или DOCUMENT_ ROOT в функции RINIT (фаза инициализации запроса расширения):
...
_SERVER = Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]);
if (_SERVER == NULL) {
_log("_SERVER is null");
return;
}
if (_G(doc_root) == NULL && (NULL != (tmp = zend_hash_str_find(_SERVER, "DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT") - 1)))) {
_G(doc_root) = Z_STRVAL_P(tmp);
}
...
Но переменная _SERVER имеет значение NULL в RINIT. Когда я выполняю тот же код после RINIT (например, в compile_file), он имеет нормальное значение, и я могу извлечь любые элементы _SERVER.
Кажется, что он инициализируется не фазой RINIT, а в соответствии с рабочим циклом расширения. оно должно быть уже заполнено. И все расширения, которые я видел, извлекают данные в функцию RINIT, чтобы она работала.
Любая подсказка, почему это может произойти и как это исправить?