php extension: изменение _SERVER значений

cosite

Новичок
Добрый день.
Задача модуля изменить несколько значений из $_SERVER массива

Написал такой код

Код:
PHP_FUNCTION(set_server_admin)
{
    my_set_server_var("SERVER_ADMIN", "[email protected]");
    RETURN_STRING("change OK", 1);
}


int my_set_server_var(char *name, char *val) {
    HashTable *_SERVER;
    zval **stuff;
    zval *temp;
    if (!PG(http_globals)[TRACK_VARS_SERVER]) {
        return FAILURE;
    }
    _SERVER = Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]);
    if (SUCCESS == zend_hash_find(_SERVER, name, strlen(name) + 1, (void **) &stuff)) {
        zend_hash_del(_SERVER, name, strlen(name) + 1);
    }
    ALLOC_INIT_ZVAL(temp);
    ZVAL_STRING(temp, val, 1);
    zend_hash_add(_SERVER, name, strlen(name) + 1, &temp, sizeof(zval *), NULL);
    return SUCCESS;
}

Чтобы вызвать код, надо в скрипте вызвать функцию
PHP:
set_server_admin();
Такой подход работает, все отлично меняется.
Вопрос в том, можно ли замену делать без вызова кода в пхп?

Пытался код вызвать из
Код:
PHP_RINIT_FUNCTION(adminer) {
     my_set_server_var("SERVER_ADMIN", "[email protected]");
}
Но на этапе RINIT еще не определен PG(http_globals)[TRACK_VARS_SERVER], поэтому код не срабатывает.
 

WMix

герр M:)ller
Партнер клуба
мне кажется php берет адрес из настроек webserver'а, там и надо менять
 

cosite

Новичок
Если речь конкретно о SERVER_ADMIN то да, его можно изменить на стороне вебсервера. Но кроме него, есть и другие значения, которые возможно тоже нужно будет заменить.
Сделать ввиде php модуля было бы универсальней
 

WMix

герр M:)ller
Партнер клуба
сделать пхп модуль который создает настройки виртуального хоста, конфигурации пхп базы и тд это универсально, а ты пытаешься штаны на голову натянуть
 

cosite

Новичок
У меня стоит задача, менять _SERVER переменные вне зависимости от того, как запущен был скрипт (cli, apache, fpm и т.д.)
Да, возможно я пытаюсь штаны на голову натянуть, но других универсальных вариантов, кроме как реализовать это дело на php модуле - я не придумал.

Есть идея получше? Подскажи
 

WMix

герр M:)ller
Партнер клуба
вроде сказал, сгенери файлы настроек и пихай куда нужно.
и другим понятно (все будут там искать), и от языка не зависит (к примеру у перла будут теже настройки)
 

cosite

Новичок
Как будут подключаться настройки, если скрипт запускается консольно?
 

WMix

герр M:)ller
Партнер клуба
а что ожидаешь увидеть в $_SERVER если скрипт запускается консольно?
 

cosite

Новичок
Я там ничего не ожидаю) Задача была поставлена так, чтобы можно было переопределять значения из любого варианта запуска пхп.
Надобность такого переопределения оставим на совести других.

Вопрос в том, как без вызова функции в пхп - автоматом вызывать нужный код.
Либо предложите другое решение данной задачи
 

WMix

герр M:)ller
Партнер клуба
ну одно дело создать в php НОВУЮ переменную окружения которая по дефолту принимает значения из переменной $_SERVER или если не существует то выставляет свою, и дальше ее использовать, другое дело настроить сервер, тут уж сам определись что ты хочешь
 

AnrDaemon

Продвинутый новичок
Я там ничего не ожидаю) Задача была поставлена так
Кто там у вас такие дебильные задачи ставит?…
Задачи надо ставить не с ж…хвоста, а с головы - "надо, чтобы был такой-то результат".
Установка переменных - это не результат.
 

WMix

герр M:)ller
Партнер клуба
хотя, если вдуматься, для эмуляции возможно даже прикольный экстеншин
 

cosite

Новичок
Переопределение констант вообще легко далось
Код:
...
my_set_constant_var("PHP_OS", "ZX Spectrum");
...

int my_set_constant_var(char * name, char *val)
{
  zval **stuff;
  if (SUCCESS == zend_hash_find(EG(zend_constants), name, strlen(name) + 1, (void **) &stuff)) {
      zend_hash_del(EG(zend_constants), name, strlen(name) +1);
  }
  zend_register_string_constant(name, strlen(name) + 1, val, CONST_PERSISTENT | CONST_CS, 0 TSRMLS_DC);
}
Переопределить функцию пока не получается, пользуюсь runkit. Мое решение что-то вылетает) Позже выложу, если кому интересно.

Вопрос из первого поста остается открытым. Дайте хотябы направление, куда копать)
 
Сверху