php – 解決register_globals在PHP 5.4之後移除的方案
register_globals
在 PHP 5.3.0 起廢棄並在PHP 5.4.0 起移除。
這功能這樣子運作的:
當你有一筆$_POST[a] = 123;
嚴謹的寫法應該是
$a = $_POST[a];
echo $a; //輸出123
但如果php.ini中register_globals = On
你只需要
echo $a; // 輸出123
方便,但是很不安全。不安全請參考官網說明。
但當遇到專案非常龐大,有時候改版須要一個一個檢查又沒有時間,
你需要使用原來的register_globals功能來應急一下,
PHP下面的版有網友寫出一個function可供網友貼到你的全域文件。
這樣在php 5.4 以後就可以照常運作了(等同register_globals = On)。
轉自http://tw1.php.net/manual/en/security.globals.php
/** * function to emulate the register_globals setting in PHP * for all of those diehard fans of possibly harmful PHP settings :-) * @author Ruquay K Calloway * @param string $order order in which to register the globals, e.g. 'egpcs' for default */ function register_globals($order = 'egpcs') { // define a subroutine if(!function_exists('register_global_array')) { function register_global_array(array $superglobal) { foreach($superglobal as $varname => $value) { global $$varname; $$varname = $value; } } } $order = explode("rn", trim(chunk_split($order, 1))); foreach($order as $k) { switch(strtolower($k)) { case 'e': register_global_array($_ENV); break; case 'g': register_global_array($_GET); break; case 'p': register_global_array($_POST); break; case 'c': register_global_array($_COOKIE); break; case 's': register_global_array($_SERVER); break; } } } register_globals();