15.12.2010

Почему при выключенном register_globals, инасталляторы CMS-ок ругаются, что он включен.

Попался движок (прямо скажем ублюдочно написанный сверстниками моего 2-х летнего сына) DCMS.
В свойствах php.ini стоит register_globals Off. Инсталлятор не пропускает к шагу установки, потому что не проходит prerequisites.
Причина в следующем. Есть два типа значений в php.ini: бинарное и текстовое.
Для выставления бинарных значений (включено/выключено; да/нет ; 1/0; правда/ложь) через Apache используется директива php_flag.
А для выставления произвольных смысловых значений (qwerty; 517; !!!&&&?; "hello12") используется директива php_value. Причем, в отличии от языков программирования, 0 в php_value расценивается не как бинарное отрицание, а как просто символ "0".
Таким образом имеем, что изначально register_globals выставлен в 0, как в бинарное отрицание. Но в движке есть свой .htaccess, в котором горепрограммисты написали так:
php_value register_globals 0
И в результате register_globals получил существующее значение, а раз есть значение, значит оно есть true. Ну и со всеми вытекающими.
Соответственно либо комментим (если в основном php.ini выключено уже) либо так:
    php_value register_globals 0
+++   php_flag register_globals 0

Комментариев нет:

Отправить комментарий