В настоящее время я разрабатываю систему кодирования для сайта, который я сейчас разрабатываю для школьного проекта .. здесь: http://rjtestsystem.atwebpages.com/
Вот код, ошибка, прототип, который я придумал:
<?php
if (isset($_GET['METHOD']) && $_GET['METHOD']=='captcha')
{ session_start();
$code=rand(1000,9999);
$_SESSION["code"] = $code;
session_write_close();
$font = rand(1,4).".ttf";
if ($font == "1.ttf")
$font_size = 20;
else if ($font == "2.ttf")
$font_size = 25;
else if ($font == "3.ttf")
$font_size = 30;
else if ($font == "4.ttf")
$font_size = 35;
$angle = 0;
$width = 120;
$height = 60;
$bounding_box = imagettfbbox($font_size, $angle, $font, $code);
$textwidth = abs($bounding_box[4] - $bounding_box[0]);
$textheight = abs($bounding_box[5] - $bounding_box[1]);
$x = ($width - $textwidth) / 2;
$y = (($height*3/4) + $textheight) / 2;
$image = imagecreatetruecolor($width, $height);
$text_background = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 230, 230, 230);
imagefill($image, 0, 0, $text_background);
imageline($image, 0, $y-rand(0,10), $width, $y-rand(0,10), $color);
imageline($image, 0, $y, $width, $y, $color);
imageline($image, 0, $y+rand(0,10), $width, $y-rand(0,20), $color);
imageline($image, $x+rand(0,$width/2), 0, $x+rand($width/2,$width), $height, $color);
imageline($image, $x+rand(0,$width/2), $height, $x+rand($width/2,$width), 0, $color);
for($i=0;$i<400;$i++)
{ imagesetpixel($image,rand()%$width,rand()%$height,$color);
}
imagettftext($image, $font_size, $angle, $x, $y, $color, $font, $code);
header("Cache-Control: no-cache, must-revalidate");
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
exit();
}
?>
<img src = "<?php echo $_SERVER['PHP_SELF']; ?>?METHOD=captcha">
Кажется, код работает нормально, но когда я пытаюсь переместить файлы в другое место, система выдаст мне сообщение о том, что файл используется другой программой. Кажется, что ссылки на файлы TTF все еще там даже после выполнения кода. Я пытался найти способ остановить это поведение, но, похоже, я не могу правильно выполнить свои поиски. Ну, проблема исчезает, как только я перезагружаю сервер, но это хлопотно при отладке. Есть ли способ или правильный метод для удаления ссылок / файлового дескриптора / etc на файлы TTF или закрытия этого процесса, как только он закончится? Если возможно, я бы хотел продолжать использовать этот код.
У меня есть только год опыта работы в Php, поэтому, пожалуйста, имейте мой элементарный способ кодирования и задавать вопросы. Если кто-то может привести меня к правильному обсуждению, пожалуйста, сделайте. Спасибо.
Я использую WAMP сервер версии 2.4.
Задача ещё не решена.
Других решений пока нет …