Я делаю задание для школы, где мы должны сделать два php-файла. Первый файл вызывает сеанс, генерирует случайную строку из 5 символов и сохраняет строку в массиве сеанса. Второй сценарий генерирует изображение, берет строку из первого файла и вставляет ее поверх изображения для создания капчи.
У меня проблема с передачей значения во второй скрипт. Переменная сеанса captcha_string полностью видна в первом скрипте, но не передается второй странице. Я новичок в этом и разочарован. Насколько я понимаю, до тех пор, пока я начинаю сеанс, должен быть доступен весь массив $ _SESSION. Когда я запускаю первый скрипт, я получаю тег испорченного изображения, а не капчу, на которую я надеюсь. Надеюсь, это решит мою проблему.
Вот что я сделал для первого файла:
<?php
session_start();
$possible_chars = array_merge(range('A','Z'),range('0','9'));
shuffle($possible_chars);
$string = substr(implode($possible_chars),0,5);
$_SESSION['captcha_string']=$string;
?>
<img src="captcha_generator.php" alt="Weinerdog!" />
и это бит из второго файла, где я пытаюсь получить строку $ (captcha_string), которая называется "captcha_generator.php:
<?php
session_start();
putenv('GDFONTPATH=' . realpath('.'));
header("Content-type: image/png");
//import string for the captcha from $_SESSION
$string = $_SESSION['captcha_string'];
// Build an image resource using an existing image as a starting point.
$backgroundimage = "captcha_wiener.jpg";
$im=imagecreatefromjpeg($backgroundimage);
$colour = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
// Output the string of characters using a true type font.
// Above we set the font path to the current directory, this
// means that arial.ttf font file must be in this directory.
$font = 'arial.ttf';
$angle = rand(-5,5);
imagettftext($im, 120, $angle, 50, 250, $colour, $font, $string);
// Draw some annoying lines across the image.
imagesetthickness($im, 10);
for ($i = 0; $i <3; $i++) {
imageline($im, rand(100,50), rand(150,200), rand(450,550), rand(200,250), $colour);
}
// Output the image as a PNG and the free the used memory.
imagejpeg($im);
imagedestroy($im);
?>
Это, конечно, строго упражнение, чтобы убедиться, что мы можем передавать значения с помощью сессии. С остальным кодом, составляющим капчу, проблем нет, он был протестирован и работает.