$m2) { global $$m1; $$m1 = ${$ch}[$m1]; } //if (@count($$ch) > 0) { // extract($$ch, EXTR_OVERWRITE); //} } } } else { // if (ini_get_bool('register_globals') == '1') { if ($VCO_REGISTER_GLBOALS) { X_debug('Emulate register_globals=off (is on)'); // This is NOT possible with PHP // ini_set('register_globals', 0); foreach ($types_to_register as $rtype) { $ch = '_'.$rtype; global $$ch; // Bug in PHP? foreach ($$ch AS $m1 => $m2) { global $$m1; $$m1 = null; } } } } } # ----------------------------------------------------------------------------- # REGISTER LONG ARRAYS (STABLE) # ----------------------------------------------------------------------------- $VCO_REGISTER_LONG_ARRAY = ini_get_bool('register_long_arrays'); function emulate_register_long_arrays($onoff) { global $types_to_register; global $VCO_REGISTER_LONG_ARRAY; if ($onoff) { // if (ini_get_bool('register_long_arrays') != '1') { if (!$VCO_REGISTER_LONG_ARRAY) { X_debug('Emulate register_long_arrays=on (is off)'); ini_set('register_long_arrays', 1); # todo: geht das? foreach ($types_to_register as $rtype) { $ch1 = 'HTTP_'.$rtype.'_VARS'; $ch2 = '_'.$rtype; global $$ch2; // Bug in PHP? Ist doch superglobal! global $$ch1; $$ch1 = array(); foreach ($$ch2 AS $m1 => $m2) { ${$ch1}[$m1] = ${$ch2}[$m1]; } } } } else { // if (ini_get_bool('register_long_arrays') == '1') { if ($VCO_REGISTER_LONG_ARRAY) { X_debug('Emulate register_long_arrays=off (is on)'); ini_set('register_long_arrays', 0); # todo: geht das? foreach ($types_to_register as $rtype) { $ch1 = 'HTTP_'.$rtype.'_VARS'; $ch2 = '_'.$rtype; global $$ch2; // Bug in PHP? Ist doch superglobal! global $$ch1; foreach ($$ch2 AS $m1 => $m2) { if (isset(${$ch1}[$m1])) { ${$ch1}[$m1] = null; } } $$ch1 = null; } } } } # ----------------------------------------------------------------------------- # MAGIC QUOTES GPC (WIP) # ----------------------------------------------------------------------------- $VCO_EMULATED_GPC = ini_get_bool('magic_quotes_gpc'); function emulate_magic_quotes_gpc($onoff) { global $types_to_register; global $VCO_EMULATED_GPC; /* See: http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc TODO: In PHP 4, also $_ENV variables are escaped. TODO: If the magic_quotes_sybase directive is also ON it will completely override magic_quotes_gpc. Having both directives enabled means only single quotes are escaped as ''. Double quotes, backslashes and NUL's will remain untouched and unescaped. --> status speichern und dann ggf verstecktes magic_quotes_gpc aktivieren sobald magic_quotes_sybase deaktiviert wird */ if ($onoff) { // if (ini_get_bool('magic_quotes_gpc') != '1') { if (!$VCO_EMULATED_GPC) { X_debug('Emulate magic_quotes_gpc=on (is off)'); ini_set('magic_quotes_gpc', 1); # todo: geht das? foreach ($types_to_register as $rtype) { if (($rtype != 'GET') && ($rtype != 'POST') && ($rtype != 'COOKIE')) continue; $ch1 = 'HTTP_'.$rtype.'_VARS'; $ch2 = '_'.$rtype; global $$ch2; // Bug in PHP? Ist doch superglobal! global $$ch1; foreach ($$ch2 AS $m1 => $m2) { global $$m1; global $VCO_EMULATED_SYBASE; if (isset($$m1)) $$m1 = addslashes2($$m1, $VCO_EMULATED_SYBASE); if (isset(${$ch1}[$m1])) ${$ch1}[$m1] = addslashes2(${$ch1}[$m1], $VCO_EMULATED_SYBASE); if (isset(${$ch2}[$m1])) ${$ch2}[$m1] = addslashes2(${$ch2}[$m1], $VCO_EMULATED_SYBASE); $_REQUEST[$m1] = addslashes2($_REQUEST[$m1], $VCO_EMULATED_SYBASE); } } $VCO_EMULATED_GPC = 1; } } else { // if (ini_get_bool('magic_quotes_gpc') == '1') { if ($VCO_EMULATED_GPC) { X_debug('Emulate magic_quotes_gpc=off (is on)'); ini_set('magic_quotes_gpc', 0); # todo: geht das? foreach ($types_to_register as $rtype) { if (($rtype != 'GET') && ($rtype != 'POST') && ($rtype != 'COOKIE')) continue; $ch1 = 'HTTP_'.$rtype.'_VARS'; $ch2 = '_'.$rtype; global $$ch2; // Bug in PHP? Ist doch superglobal! global $$ch1; foreach ($$ch2 AS $m1 => $m2) { global $$m1; global $VCO_EMULATED_SYBASE; if (isset($$m1)) $$m1 = stripslashes2($$m1, $VCO_EMULATED_SYBASE); if (isset(${$ch1}[$m1])) ${$ch1}[$m1] = stripslashes2(${$ch1}[$m1], $VCO_EMULATED_SYBASE); if (isset(${$ch2}[$m1])) ${$ch2}[$m1] = stripslashes2(${$ch2}[$m1], $VCO_EMULATED_SYBASE); $_REQUEST[$m1] = stripslashes2($_REQUEST[$m1], $VCO_EMULATED_SYBASE); } } $VCO_EMULATED_GPC = 0; } } } # ----------------------------------------------------------------------------- # MAGIC QUOTES SYBASE (WIP) # ----------------------------------------------------------------------------- $VCO_EMULATED_SYBASE = ini_get_bool('magic_quotes_sybase'); function emulate_magic_quotes_sybase($onoff) { global $types_to_register; global $VCO_EMULATED_SYBASE; if ($onoff) { // if (ini_get_bool('magic_quotes_sybase') != '1') { if (!$VCO_EMULATED_SYBASE) { X_debug('Emulate magic_quotes_sybase=on (is off)'); ini_set('magic_quotes_sybase', 1); # todo geht nicht??? global $VCO_EMULATED_GPC; if ($VCO_EMULATED_GPC) { foreach ($types_to_register as $rtype) { if (($rtype != 'GET') && ($rtype != 'POST') && ($rtype != 'COOKIE')) continue; $ch1 = 'HTTP_'.$rtype.'_VARS'; $ch2 = '_'.$rtype; global $$ch2; // Bug in PHP? Ist doch superglobal! global $$ch1; foreach ($$ch2 AS $m1 => $m2) { global $$m1; global $VCO_EMULATED_SYBASE; if (isset($$m1)) $$m1 = addslashes2(stripslashes2($$m1, $VCO_EMULATED_SYBASE), 1); if (isset(${$ch1}[$m1])) ${$ch1}[$m1] = addslashes2(stripslashes2(${$ch1}[$m1], $VCO_EMULATED_SYBASE), 1); if (isset(${$ch2}[$m1])) ${$ch2}[$m1] = addslashes2(stripslashes2(${$ch2}[$m1], $VCO_EMULATED_SYBASE), 1); $_REQUEST[$m1] = addslashes2(stripslashes2($_REQUEST[$m1], $VCO_EMULATED_SYBASE), 1); } } } $VCO_EMULATED_SYBASE = 1; } } else { // if (ini_get_bool('magic_quotes_sybase') == '1') { if ($VCO_EMULATED_SYBASE) { X_debug('Emulate magic_quotes_sybase=off (is on)'); ini_set('magic_quotes_sybase', 0); # todo geht nicht??? global $VCO_EMULATED_GPC; if ($VCO_EMULATED_GPC) { foreach ($types_to_register as $rtype) { if (($rtype != 'GET') && ($rtype != 'POST') && ($rtype != 'COOKIE')) continue; $ch1 = 'HTTP_'.$rtype.'_VARS'; $ch2 = '_'.$rtype; global $$ch2; // Bug in PHP? Ist doch superglobal! global $$ch1; foreach ($$ch2 AS $m1 => $m2) { global $$m1; global $VCO_EMULATED_SYBASE; if (isset($$m1)) $$m1 = addslashes2(stripslashes2($$m1, $VCO_EMULATED_SYBASE), 0); if (isset(${$ch1}[$m1])) ${$ch1}[$m1] = addslashes2(stripslashes2(${$ch1}[$m1], $VCO_EMULATED_SYBASE), 0); if (isset(${$ch2}[$m1])) ${$ch2}[$m1] = addslashes2(stripslashes2(${$ch2}[$m1], $VCO_EMULATED_SYBASE), 0); $_REQUEST[$m1] = addslashes2(stripslashes2($_REQUEST[$m1], $VCO_EMULATED_SYBASE), 0); } } } $VCO_EMULATED_SYBASE = 0; } } } # --- function addslashes2($cont, $sybase) { if ($sybase) { return str_replace("'", "''", $cont); } else { return addcslashes($cont, "\0\\\\'\""); } } function stripslashes2($cont, $sybase) { if ($sybase) { return str_replace("''", "'", $cont); } else { return stripcslashes($cont); } } function ini_get_bool($setting) { $x = ini_initialvalue($setting); if (strtolower($x) == 'off') $x = '0'; if (strtolower($x) == 'on') $x = '1'; return $x; } # Determinates the initial value of a setting without resetting it # Important to detect how the GPC data is escaed since the user may call the emulation functions for magic_quotes_gpc and magic_quotes_sybase in different order! function ini_initialvalue($setting) { $bak = ini_get($setting); ini_restore($setting); $res = ini_get($setting); ini_set($setting, $bak); return $res; } # ----------------------------------------------------------------------------- # DEBUG # ----------------------------------------------------------------------------- function X_debug($msg) { if (defined('PHPCOMPAT_DEBUG') && PHPCOMPAT_DEBUG) { echo "Debug: $msg
\n"; } } # MISC EMULATIONS # geht nicht da __FILE__ sich aauf phpcompat.inc.phps bezieht # if (!defined('__DIR__')) define('__DIR__', dirname(__FILE__)); // Magic constant introduced in PHP 5.3 ?>