We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 38067
    • 2 Posts
    Вот решил добавить капчу к себе на сайт: Капча имеет вот такой код

    <?php
      // Ширина изображения
      $width = 250;
      // Высота изображения
      $height = 160;
      // Количество символов в коде
      $sign = 3;
      // Защитный код
      $code = "";
    
      // Инициируем сессию
     session_start();
    
      // Символы, используемые в коде
      $letters = array('a','b','c','d','e','f',
                       'g','h','j','k','m','n',
                       'p','q','r','s','t','u',
                       'v','w','x','y','z','2',
                       '3','4','5','6','7','8','9');
      // Компоненты для RGB-цвета
      $figures = array('50','70','90','110',
                       '130','150','170','190','210');
    
      // Создаем пустое изображение
      $img = imagecreatetruecolor($width, $height);
    
      // Заливаем фон белым цветом
      $fon = imagecolorallocate($img, 255, 255, 255);
      imagefill($img, 0, 0, $fon);
    
      // Заливаем фон точками
      for($j=0; $j<$width; $j++)
      {
        for($i=0; $i<($height*$width)/300; $i++)
        {
          // Формируем случайный цвет
    	  $color = imagecolorallocatealpha(
    	                $img,
    	                $figures[rand(0,count($figures)-1)],
    	                $figures[rand(0,count($figures)-1)],
    	                $figures[rand(0,count($figures)-1)],
                        rand(10,30));
          // Устанавливаем случайную точку
          // случайного цвета
          imagesetpixel($img,
                        rand(0,$width),
                        rand(0,$height),
                        $color);
        }
      }
    
      // Накладываем защитный код
      for($i=0; $i<$sign; $i++)
      {
        //Ориентир
        $h = 1;
        //Рисуем
        $color = imagecolorallocatealpha(
                        $img,
                        $figures[rand(0,count($figures)-1)],
                        $figures[rand(0,count($figures)-1)],
                        $figures[rand(0,count($figures)-1)],
                        rand(10,30));
    
        // Генерируем случайный символ
        $letter = 'd';//$letters[rand(0,sizeof($letters)-1)];
    
        // Формируем координаты для вывода символа
        if(empty($x)) $x = $width*0.08;
        else $x = $x + ($width*0.8)/$sign+rand(0,$width*0.01);
    
        if($h == rand(1,2)) $y =(($height*1)/4) + rand(0,$height*0.2);
        else $y = (($height*1)/4) - rand(0,$height*0.2);
    
        // Запоминаем символ в переменной $code
        $code .= $letter;
    
                         $fonta = 'VeraSeBd.ttf';
      }
      imagettftext($img, 38, 20, $x-50, $y+95, $color, $fonta,$letter);
      $_SESSION['code'] = $code;
      header ("Content-type: image/jpeg");
      imagejpeg($img);
    ?>
    

    если я вызываю этот файл в снипете то на выходе я получаю краказябры, но если я ее вызываю вот так в снипете <img src="img.php'" /> то все выводится нормально, но при таком подходе код в $_SESSION['code'] не добавляется (находится в другой сессии как я понимаю). Вот вопрос как поместить код в сессию MODx? может у кого альтернативные методы есть?
      • 31246 ☆ A M B ☆
      • 428 Posts
      если я вызываю этот файл в снипете
      - как вы его вызываете?
      $_SESSION['code'] не добавляется
      - гугл вам в помощь, почитайте хорошо про сесии, нужно обрабатывать до вывода контента (файл должен быть первый)
        Valentin Rasulov - Industrial design (Hobbies - Web Development)
        Development not standard projects on CMF MODx Revolution.
        Small sample of extensions
        • 38067
        • 2 Posts
        я в снипет весь этот код вставляю, получается краказябры но зато $_SESSION['code'] добовляется в сессию MODx, а если я код сохраняю в файле и потом в снипете вызываю вот так <img src="img.php'" /> то изображение появляется нормальное но зато $_SESSION['code'] недобовляется в сессию MODx.