PHP Captcha不能在服务器上使用,但可以在本地使用

时间:2019-02-09 18:01:17

标签: php captcha

我的PHP验证码在我的OVH服务器上不起作用。

一切都很好在localhost与wamp。 取消上传后,验证码根本不会显示在我的网站上。

我不知道我在做什么错。

我的captcha.php包含在我的表单中,例如:<img src="captcha.php" alt="CAPTCHA" class="captcha-image">

PS:php-gd已经安装并且是最新的。 PHP版本:7.0.33

captcha.php:     

session_start();

$permitted_chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ';

function generate_string($input, $strength = 10) {
    $input_length = strlen($input);
    $random_string = '';
    for($i = 0; $i < $strength; $i++) {
        $random_character = $input[mt_rand(0, $input_length - 1)];
        $random_string .= $random_character;
    }

    return $random_string;
}

$image = imagecreatetruecolor(200, 50);

    imageantialias($image, true);

$colors = [];

$red = rand(125, 175);
$green = rand(125, 175);
$blue = rand(125, 175);

for($i = 0; $i < 5; $i++) {
$colors[] = imagecolorallocate($image, $red - 20*$i, $green - 20*$i, $blue - 20*$i);
}

imagefill($image, 0, 0, $colors[0]);

for($i = 0; $i < 10; $i++) {
    imagesetthickness($image, rand(2, 10));
    $line_color = $colors[rand(1, 4)];
    imagerectangle($image, rand(-10, 190), rand(-10, 10), rand(-10, 190), rand(40, 60), $line_color);
}

$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$textcolors = [$black, $white];

$fonts = [dirname(__FILE__).'\fonts\Acme.ttf', dirname(__FILE__).'\fonts\Ubuntu.ttf', dirname(__FILE__).'\fonts\Merriweather.ttf', dirname(__FILE__).'\fonts\PlayfairDisplay.ttf'];

    $string_length = 6;
$captcha_string = generate_string($permitted_chars, $string_length);

$_SESSION['captcha_text'] = $captcha_string;

    for($i = 0; $i < $string_length; $i++) {
    $letter_space = 170/$string_length;
        $initial = 15;

    imagettftext($image, 24, rand(-15, 15), $initial + $i*$letter_space, rand(25, 45), $textcolors[rand(0, 1)], $fonts[array_rand($fonts)], $captcha_string[$i]);
}

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>

本地:https://i.imgur.com/rqTK2X3.png 远程:https://i.imgur.com/Z4lEa9r.png

2 个答案:

答案 0 :(得分:0)

我认为您在OVH服务器上缺少GD扩展名。检查日志以确认。您的服务器向浏览器发送了错误,但是由于浏览器需要图像,因此它会显示图像图标丢失/损坏。

您可以使用以下命令之一安装GD(取决于您的PHP版本)

sudo apt-get install php7.0-gd
# or
sudo apt-get install php7.1-gd
# or
sudo apt-get install php7.2-gd

检查install php70-gd on ubuntu了解有关如何安装GD的更多详细信息

答案 1 :(得分:0)

好,知道了。 验证码仅适用于PHP 7.2。 Wamp默认为7.2,debian 9为7.0。

我已经正确安装了7.2,一切都很好。 我的路径问题是使用/而不是\(通常是Windows ...)解决的。

谢谢大家。