php – 解決register_globals在PHP 5.4之後移除的方案
2013-04-30 / JSN / 0 Comments / 2,627 views
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
;html-script:false]
/**
* 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
*/
functionregister_globals($order='egpcs')
{
// define a subroutine
if(!function_exists('register_global_array'))
{
functionregister_global_array(array$superglobal)
{
foreach($superglobalas$varname=>$value)
{
global$$varname;
$$varname=$value;
}
}
}
$order=explode("rn",trim(chunk_split($order,1)));
foreach($orderas$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();
分享,才能讓我知道對你有幫助:
相關文章