PHPのregister_globalsオプションを再現する
register_globals
リクエストパラメータが自動でグローバル変数にセットされるもの
ただの害悪
古いPHPの環境をアップグレードする際にregister_globalsを前提とした処理になってると見る気も失せるのは致し方なし
再現スクリプト
以下のスクリプトをauto_prepend_file
等で読ませる
<?php
// $_FILESだけそのままextractで対応できないので別処理
$files_variables = ['name', 'type', 'size'];
foreach($_FILES as $fkey => $fval){
$$fkey = $fval['tmp_name'];
$keys = array_map(fn($n) => $fkey. '_'. $n, $files_variables);
$vals = array_map(fn($n) => $fval[$n], $files_variables);
extract(array_combine($keys, $vals));
}
// 順序的に$_SESSIONが先
if( isset($_SESSION) ){
extract($_SESSION, EXTR_SKIP);
}
// その他 - variables_orderに応じて処理
$ini_variables = ['e' => '_ENV', 's' => '_SERVER', 'c' => '_COOKIE', 'p' => '_POST', 'g' => '_GET'];
$ini_variables_order = strtolower(ini_get('variables_order'));
foreach(str_split($ini_variables_order) as $r){
$tmp = $ini_variables[$r];
extract($$tmp);
}
詰めたver
<?php
$files_variables = ['name', 'type', 'size'];
foreach($_FILES as $fkey => $fval){
$$fkey = $fval['tmp_name'];
extract(array_combine(array_map(function($n) use($fkey){ return $fkey. '_'. $n; }, $files_variables), array_map(function($n) use($fval){ return $fval[$n]; }, $files_variables)));
}$ini_variables = ['e' => '_ENV', 's' => '_SERVER', 'c' => '_COOKIE', 'p' => '_POST', 'g' => '_GET'];
$ini_variables_order = ini_get('variables_order');
if( isset($_SESSION) ) extract($_SESSION, EXTR_SKIP);
foreach(str_split($ini_variables_order) as $r) extract(${$ini_variables[strtolower($r)]});
?>