PHP 5.3 以上基於安全因素不支援 register_globals ,建議依照官方建議移除或更新有問題的 PHP 程式碼,如臨時無法移除或過渡時期暫無法立即更新時,可使用 自訂 register_globals() 函式的解決方案,將有需要的內容解析並設定為 Global 參數:
完整程式碼範例如:
- <?php
- function register_globals($order = 'egpcs')
- {
-
- if(!function_exists('register_global_array'))
- {
- function register_global_array(array $superglobal)
- {
- foreach($superglobal as $varname => $value)
- {
- global $$varname;
- $$varname = $value;
- }
- }
- }
-
- $order = explode("\r\n", 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;
- }
- }
- }
- ?>
該程式碼運作方式為將 $_ENV、$_GET、$_POST、$_COOKIE、$_SERVER 等內容全部讀入 register_global_array() 將內容參數設定為 Global,如此就可暫時替代 register_globals 的效果。
記得程式碼要生效運作時,需在 PHP 程式運作前載入 register_globals() 的自訂函式,如:
<?php register_globals(); ?>
資料參考來源:http://php.net/manual/en/security.globals.php
|