2011-08-05 24 views
1

我最近更新到PHP 5.3.6,並且有一些不推薦使用的函數和INI指令。我有以下功能:PHP:register_long_arrays棄用(HTTP _ * _ VARS)

function ServerVar($varName) { 
global $HTTP_SERVER_VARS; 
global $HTTP_ENV_VARS; 

if(!isset($_SERVER)) 
{ 
    $_SERVER = $HTTP_SERVER_VARS; 
    if(!isset($_SERVER["REMOTE_ADDR"])) 
     $_SERVER = $HTTP_ENV_VARS; // must be Apache 
    } 

if(isset($_SERVER[$varName])) 
    return $_SERVER[$varName]; 
else 
    return ""; 
} 

運行該功能引起的Apache日誌中的錯誤:

<b>Deprecated</b>: Directive 'register_long_arrays' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br /> 

我modfied這樣的代碼:

if(!isset($_SERVER)) 
{ 
    $_SERVER = &$HTTP_SERVER_VARS; 
    if(!isset($_SERVER["REMOTE_ADDR"])) 
     $_SERVER = &$HTTP_ENV_VARS; // must be Apache 
    } 

if(isset($_SERVER[$varName])) 
    return $_SERVER[$varName]; 
else 
    return ""; 
} 

但是同樣的錯誤仍然出現在apache日誌中。解決這個問題的最好方法是什麼?

謝謝!

回答

6

在PHP 5.3(真的,我覺得還是PHP 5的後續版本any version of PHP newer than 4.1.0)你不應該在任何時候需要使用$HTTP_SERVER_VARS$HTTP_ENV_VARS。只需使用$_SERVER即可。如果這不起作用,那麼你的服務器需要修改它的配置;沒有這樣的代碼變通辦法。

+0

對不起。該代碼在4年前實施。我只是在做一些維護:(它是痛苦的,因爲代碼是按照FO而不是OO :( –

+2

@坦納:沒有理由感到抱歉。:)希望你的將來有更少的跆拳道:) –

+1

'$ _SERVER '自從PHP 4.1.0發佈以來,實際上已經存在了,它是在近十年前(2001年12月)發佈的。任何古代都有更大的問題。 :) – duskwuff