Проблемы с передачей переменной со страницы на страницу с использованием $ _SESSION php - PullRequest
0 голосов
/ 04 ноября 2011

Я делаю задание для школы, где мы должны сделать два 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); 

?>

Это, конечно, строго упражнение, чтобы убедиться, что мы можем передавать значения с помощью сессии. С остальным кодом, составляющим капчу, проблем нет, он был протестирован и работает.

1 Ответ

1 голос
/ 04 ноября 2011

Вы выводите некоторые значения с типом содержимого, установленным в image / png, следовательно, либо у вас будет ошибка отправленных заголовков, либо, если текст еще не отправлен (потому что кэшируется PHP ), у вас будет испорченное изображение, и вы не сможете увидеть текст.

Не волнуйтесь, это случилось со всеми, включая меня: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...