如果启用register_global怎么办?

时间:2012-05-05 20:55:28

标签: php register-globals

我有一个简单的验证码,当register_global被禁用时效果很好,根据PHP手册Using Register Globals

这是正确的

但有时我会移动到许多主机,默认情况下它们会启用注册全局,因此我的验证码会停止工作,并且即使输入正确也始终提供错误的验证码。

我的问题

如果启用register_global以及禁用了?

,它为什么不起作用?

代码

captcha.php

<?PHP
session_start();
$digits_num=5;
$x_pos=25;
$y_pos=6;
$font_size=5;
function random_num($n){
$start_num = "1".str_repeat("0", $n-1);;
$end_num   = str_repeat("9", $n);
return rand($start_num, $end_num);
}
$text = random_num($digits_num);
$_SESSION["captcha_num"] = md5($text);
$captcha = imagecreatefrompng("./images/captcha.png");
$font_color['black']=imagecolorallocate($captcha, 0, 0, 0);
$font_color['white']=imagecolorallocate($captcha, 80, 73, 20);
imagestring($captcha, $font_size, $x_pos, $y_pos, $text, $font_color['white']);
header("Content-type: image/png");
imagepng($captcha);
?>

表格

<form name="frm" method="post" action="add.php">
<img src="captcha.php">
<input type="text" name="captcha_num" id="captcha_num" >
<input type="submit" name="submit" id="submit" value="submit">
</form>

add.php

<?PHP
session_start();
if(md5($_POST['captcha_num']) != $_SESSION['captcha_num']){
echo "Wrong captcha";
}else{
echo "Good Pass it";
}
?>

1 个答案:

答案 0 :(得分:4)

从您提到的手册页:

  

自PHP 5.3.0开始,此功能已被弃用,自PHP 5.4.0起已被删除   (...)
  也许PHP中最具争议的变化是PHP指令register_globals的默认值在PHP»4.2.0中从ON变为OFF。

换句话说:将其关闭

如何关闭它?

选项1:使用ini_set

将此代码置于代码之上(如果有代码,则放在引导程序文件中)

ini_set('register_globals', 'Off')

选项2:使用htaccess

在您网站的根目录中创建一个.htaccess文件并将此代码添加到其中:

php_flag register_globals Off

如果您使用不好的技术,不要问自己为什么脚本是错的,请问自己如何关闭/避免使用不良技术。

相关问题