#php #session
#php #сессия
Вопрос:
Мне интересно, почему символы в изображении, сгенерированном этим скриптом, не соответствуют символам, установленным для сеанса. Я не могу найти, почему это, если бы кто-нибудь мог помочь, это было бы здорово. Спасибо, Леа.
// Font directory font name
$font = 'wordpress/wp-content/themes/boldy/fonts/SF Juggernaut Bold.ttf';
// Total number of lines
$lineCount = 20;
// Size of the font
$fontSize = 19;
// Height of the image
$height = 38;
// Width of the image
$width = 120;
$img_handle = imagecreate ($width, $height) or die ("Cannot Create image");
// Set the Background Color RGB
$backColor = imagecolorallocate($img_handle, 242, 242, 242);
// Set the Line Color RGB
$lineColor = imagecolorallocate($img_handle, 207, 207, 207);
// Set the Text Color RGB
$txtColor = imagecolorallocate($img_handle, 95, 95, 95);
// Generate
$string = "bcdefghijklmopqrstwxyz023456789";
for($i=0;$i<6;$i ){
$pos = rand(0,36);
$str .= $string{$pos};
}
$textbox = imagettfbbox($fontSize, 0, $font, $str) or die('Error in imagettfbbox function');
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($img_handle, $fontSize, 0, $x, $y, $txtColor, $font , $str) or die('Error in imagettftext function');
for($i=0;$i<$lineCount;$i ){
$x1 = rand(0,$width);$x2 = rand(0,$width);
$y1 = rand(0,$width);$y2 = rand(0,$width);
imageline($img_handle,$x1,$y1,$x2,$y2,$lineColor);
}
header('Content-Type: image/jpeg');
imagejpeg($img_handle,NULL,100);
imagedestroy($img_handle);
session_start();
$_SESSION['img_number'] = $str;
ОБНОВЛЕНИЕ: После тестирования я отметил, что при первой загрузке изображения сеанс НЕ устанавливается, так что при обновлении изображения сеанс устанавливается с последним значением $ str
Комментарии:
1. Попробуйте поместить код начала сеанса / session variable set перед вашим
header('Content-Type: image/jpeg');
2. @onteria_ — похоже, это ничего не меняет. Строка сеанса, похоже, не синхронизирована с символами изображения.
Ответ №1:
У вас могут возникнуть проблемы с вызовом session_start(), если ваши заголовки уже отправлены.
Изменить
header('Content-Type: image/jpeg');
imagejpeg($img_handle,NULL,100);
imagedestroy($img_handle);
session_start();
$_SESSION['img_number'] = $str;
Для
session_start();
header('Content-Type: image/jpeg');
imagejpeg($img_handle,NULL,100);
imagedestroy($img_handle);
$_SESSION['img_number'] = $str;
Комментарии:
1. Нет, это там:
$str .= $string{$pos};
2. Спасибо. Не искал подобную строку … забыл, что PHP разрешен для таких объявлений.
Ответ №2:
Если вы отлаживаете свой скрипт с помощью чего-то вроде firebug или devtools, то он дважды вызывает ваше изображение.
Попробуйте отключить ваш firebug / devtools, и вы увидите ПРИБЫЛЬ.
Комментарии:
1. Хотел бы я, чтобы это было верно для меня, но я уже отключил firebug, а он все тот же.
2. Также попробуйте добавить какой-нибудь логин, чтобы понять, сколько раз и откуда вызывался ваш скрипт captcha.
Ответ №3:
session_start();
// Font directory font name
$font = 'wordpress/wp-content/themes/boldy/fonts/SF Juggernaut Bold.ttf';
// Total number of lines
$lineCount = 20;
// Size of the font
$fontSize = 19;
// Height of the image
$height = 38;
// Width of the image
$width = 120;
$img_handle = imagecreate ($width, $height) or die ("Cannot Create image");
// Set the Background Color RGB
$backColor = imagecolorallocate($img_handle, 242, 242, 242);
// Set the Line Color RGB
$lineColor = imagecolorallocate($img_handle, 207, 207, 207);
// Set the Text Color RGB
$txtColor = imagecolorallocate($img_handle, 95, 95, 95);
// Generate
$string = "bcdefghijklmopqrstwxyz023456789";
$str = '';
for($i=0;$i<6;$i ){
$pos = rand(0,36);
$str .= substr($string, $pos, 1);
}
$_SESSION['img_number'] = $str;
$textbox = imagettfbbox($fontSize, 0, $font, $str) or die('Error in imagettfbbox function');
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($img_handle, $fontSize, 0, $x, $y, $txtColor, $font , $str) or die('Error in imagettftext function');
for($i=0;$i<$lineCount;$i ){
$x1 = rand(0,$width);$x2 = rand(0,$width);
$y1 = rand(0,$width);$y2 = rand(0,$width);
imageline($img_handle,$x1,$y1,$x2,$y2,$lineColor);
}
header('Content-Type: image/jpeg');
imagejpeg($img_handle,NULL,100);
imagedestroy($img_handle);
Комментарии:
1. похоже, это не имеет никакого значения. Спасибо
2. Леа, ты получаешь какой-либо вывод шрифта вообще?