PHP 验证码不能在服务器上运行,但可以在本地运行
PHP Captcha doesn't work on server but work localy
我的 PHP 验证码在我的 OVH 服务器上不起作用。
使用 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
我认为您的 OVH 服务器上缺少 GD 扩展。检查日志以确认。您的服务器向浏览器发送错误,但由于浏览器需要图像,因此它显示 missing/corrupted 图像图标。
您可以使用这些命令之一安装 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
检查 了解更多关于如何安装 GD 的详细信息
好的,知道了。
验证码仅适用于 PHP 7.2。
Wamp 默认有 7.2,debian 9 有 7.0.
我刚刚正确安装了 7.2,一切正常。
我的路径问题用 / 而不是 \ (ty Windows...).
解决了
谢谢大家
我的 PHP 验证码在我的 OVH 服务器上不起作用。
使用 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
我认为您的 OVH 服务器上缺少 GD 扩展。检查日志以确认。您的服务器向浏览器发送错误,但由于浏览器需要图像,因此它显示 missing/corrupted 图像图标。
您可以使用这些命令之一安装 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
检查
好的,知道了。 验证码仅适用于 PHP 7.2。 Wamp 默认有 7.2,debian 9 有 7.0.
我刚刚正确安装了 7.2,一切正常。 我的路径问题用 / 而不是 \ (ty Windows...).
解决了谢谢大家